追踪分析
追踪分析允许您收集追踪数据并定制管道,以摄取和转换数据供 OpenSearch 使用。以下提供了 OpenSearch Data Prepper 中追踪分析工作流程的概述、如何配置它以及如何可视化追踪数据。
简介
当使用 Data Prepper 作为服务器端组件来收集追踪数据时,您可以自定义 Data Prepper 管道以摄取和转换数据供 OpenSearch 使用。转换后,您可以可视化转换后的追踪数据,以便与 OpenSearch Dashboards 中的 Observability 插件一起使用。追踪数据提供了应用程序性能的可见性,并帮助您获得有关单个追踪的更多信息。
以下流程图说明了追踪分析工作流程,从运行 OpenTelemetry Collector 到使用 OpenSearch Dashboards 进行可视化。
要监控追踪分析,您需要在服务环境中设置以下组件
- 为您的应用程序添加插桩,使其能够生成遥测数据并将其发送到 OpenTelemetry Collector。
- 将 OpenTelemetry Collector 作为 Amazon Elastic Kubernetes Service (Amazon EKS) 的 sidecar 或 daemonset、Amazon Elastic Container Service (Amazon ECS) 的 sidecar 或 Amazon Elastic Compute Cloud (Amazon EC2) 上的代理运行。您应该配置收集器以将追踪数据导出到 Data Prepper。
- 部署 Data Prepper 作为 OpenSearch 的摄取收集器。配置它将丰富的追踪数据发送到您的 OpenSearch 集群或 Amazon OpenSearch Service 域。
- 使用 OpenSearch Dashboards 可视化和检测分布式应用程序中的问题。
追踪分析管道
为了在 Data Prepper 中监控追踪分析,我们提供了三个管道:entry-pipeline
、raw-trace-pipeline
和 service-map-pipeline
。下图提供了管道如何协同工作以监控追踪分析的概述。
OpenTelemetry 追踪源
OpenTelemetry 源接受来自 OpenTelemetry Collector 的追踪数据。该源遵循 OpenTelemetry 协议,并正式支持 gRPC 传输和使用行业标准加密 (TLS/HTTPS)。
处理器
追踪分析功能有三个处理器
- otel_traces_raw – otel-trace-source 处理器接收来自 otel_traces_raw 的 span 记录集合,并执行有状态处理、提取和完成追踪组相关字段。
- otel_traces_group – otel_traces_group 处理器通过查找 OpenSearch 后端来填充 span 记录集合中缺失的追踪组相关字段。
- service_map_stateful – service_map_stateful 处理器执行追踪数据所需的预处理,并构建元数据以显示
service-map
仪表板。
OpenSearch 接收器
OpenSearch 提供了一个通用接收器,可将数据作为目的地写入 OpenSearch。OpenSearch 接收器具有与 OpenSearch 集群相关的配置选项,例如端点、SSL、用户名/密码、索引名称、索引模板和索引状态管理。
该接收器为追踪分析功能提供了特定配置。这些配置允许接收器使用特定于追踪分析的索引和索引模板。以下 OpenSearch 索引特定于追踪分析
- otel-v1-apm-span – otel-v1-apm-span 索引存储 otel_traces_raw 处理器的输出。
- otel-v1-apm-service-map – otel-v1-apm-service-map 索引存储 service_map_stateful 处理器的输出。
追踪调优
从 0.8.x 版本开始,Data Prepper 支持追踪分析的垂直和水平扩展。您可以调整单个 Data Prepper 实例的大小以满足工作负载需求并垂直扩展。
您可以通过使用核心对等转发器部署多个 Data Prepper 实例来形成集群,从而进行水平扩展。这使得 Data Prepper 实例能够与集群中的实例进行通信,并且是水平扩展部署所必需的。
扩展建议
使用以下推荐配置来扩展 Data Prepper。我们建议您根据要求修改参数。我们还建议您监控 Data Prepper 主机指标和 OpenSearch 指标,以确保配置按预期工作。
缓冲区
Data Prepper 处理的追踪请求总数等于 otel-trace-pipeline
和 raw-pipeline
中 buffer_size
值的总和。发送到 OpenSearch 的追踪请求总数等于 raw-trace-pipeline
中 batch_size
和 workers
的乘积。有关 raw-pipeline
的更多信息,请参阅追踪分析管道。
在更改缓冲区设置时,我们建议以下事项
otel-trace-pipeline
和raw-pipeline
中的buffer_size
值应该相同。buffer_size
应大于或等于raw-pipeline
中的workers
*batch_size
。
工作线程
workers
设置决定了 Data Prepper 用于处理来自缓冲区的请求的线程数。我们建议您根据 CPU 利用率设置 workers
。该值可以高于可用处理器数量,因为 Data Prepper 在向 OpenSearch 发送数据时会占用大量的输入/输出时间。
堆内存
通过设置 JVM_OPTS
环境变量来配置 Data Prepper 堆内存。我们建议您将堆值设置为最小值 4
* batch_size
* otel_send_batch_size
* individual span的最大大小
。
如OpenTelemetry Collector部分所述,在 OpenTelemetry Collector 配置中将 otel_send_batch_size
设置为 50
。
本地磁盘
Data Prepper 使用本地磁盘存储服务图处理所需的元数据,因此我们建议仅存储以下关键字段:traceId
、spanId
、parentSpanId
、spanKind
、spanName
和 serviceName
。service-map
插件只存储两个文件,每个文件存储 window_duration
秒的数据。例如,以 3000 spans/second
的吞吐量进行测试,总磁盘使用量为 4 MB
。
Data Prepper 还使用本地磁盘写入日志。在最新版本的 Data Prepper 中,您可以将日志重定向到您喜欢的路径。
AWS CloudFormation 模板和 Kubernetes/Amazon EKS 配置文件
AWS CloudFormation 模板提供了一种用户友好的机制,用于配置追踪调优部分中描述的扩展属性。
Kubernetes 配置文件和Amazon EKS 配置文件可用于在集群部署中配置这些属性。
基准测试
基准测试在具有以下配置的 r5.xlarge
EC2 实例上执行
buffer_size
: 4096batch_size
: 256workers
: 8堆内存
: 10 GB
此设置能够以 20
% 的 CPU 利用率处理 2100
spans/秒的吞吐量。
管道配置
以下部分提供了不同类型管道的示例以及如何配置每种类型。
示例:追踪分析管道
以下示例演示了如何构建支持 OpenSearch Dashboards Observability 插件的管道。此管道从 OpenTelemetry Collector 获取数据并使用另外两个管道作为接收器。这两个独立的管道服务于两个不同的目的,并写入不同的 OpenSearch 索引。第一个管道为 OpenSearch 准备追踪数据,并将 span 文档丰富并摄入到 OpenSearch 中的 span 索引中。第二个管道将追踪聚合到服务图中,并将服务图文档写入 OpenSearch 中的服务图索引。
从 Data Prepper 2.0 版本开始,Data Prepper 不再支持 otel_traces_raw_prepper
处理器。otel_traces_raw
处理器取代了 otel_traces_raw_prepper
处理器,并支持 Data Prepper 最近的一些数据模型更改。相反,您应该使用 otel_traces_raw
处理器。请参阅以下 YAML 文件示例
entry-pipeline:
delay: "100"
source:
otel_traces_source:
ssl: false
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
sink:
- pipeline:
name: "raw-trace-pipeline"
- pipeline:
name: "service-map-pipeline"
raw-pipeline:
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- otel_traces_raw:
sink:
- opensearch:
hosts: ["https://:9200"]
insecure: true
username: admin
password: admin
index_type: trace-analytics-raw
service-map-pipeline:
delay: "100"
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- service_map_stateful:
sink:
- opensearch:
hosts: ["https://:9200"]
insecure: true
username: admin
password: admin
index_type: trace-analytics-service-map
为了保持相似的摄取吞吐量和延迟,根据客户端请求负载中估计的最大批处理大小来调整 buffer_size
和 batch_size
。{: .tip}
示例:otel trace
以下是一个启用了 SSL 和基本身份验证的 otel-trace-source
.yaml 文件示例。请注意,您需要修改 otel-collector-config.yaml
文件,使其使用您自己的凭据。
source:
otel_traces_source:
#record_type: event # Add this when using Data Prepper 1.x. This option is removed in 2.0
ssl: true
sslKeyCertChainFile: "/full/path/to/certfile.crt"
sslKeyFile: "/full/path/to/keyfile.key"
authentication:
http_basic:
username: "my-user"
password: "my_s3cr3t"
示例:pipeline.yaml
以下是一个没有启用 SSL 和基本身份验证的 pipeline.yaml
文件示例,用于 otel-trace-pipeline
管道
otel-trace-pipeline:
# workers is the number of threads processing data in each pipeline.
# We recommend same value for all pipelines.
# default value is 1, set a value based on the machine you are running Data Prepper
workers: 8
# delay in milliseconds is how often the worker threads should process data.
# Recommend not to change this config as we want the entry-pipeline to process as quick as possible
# default value is 3_000 ms
delay: "100"
source:
otel_traces_source:
#record_type: event # Add this when using Data Prepper 1.x. This option is removed in 2.0
ssl: false # Change this to enable encryption in transit
authentication:
unauthenticated:
buffer:
bounded_blocking:
# buffer_size is the number of ExportTraceRequest from otel-collector the data prepper should hold in memeory.
# We recommend to keep the same buffer_size for all pipelines.
# Make sure you configure sufficient heap
# default value is 512
buffer_size: 512
# This is the maximum number of request each worker thread will process within the delay.
# Default is 8.
# Make sure buffer_size >= workers * batch_size
batch_size: 8
sink:
- pipeline:
name: "raw-trace-pipeline"
- pipeline:
name: "entry-pipeline"
raw-pipeline:
# Configure same as the otel-trace-pipeline
workers: 8
# We recommend using the default value for the raw-pipeline.
delay: "3000"
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
# Configure the same value as in entry-pipeline
# Make sure you configure sufficient heap
# The default value is 512
buffer_size: 512
# The raw processor does bulk request to your OpenSearch sink, so configure the batch_size higher.
# If you use the recommended otel-collector setup each ExportTraceRequest could contain max 50 spans. https://github.com/opensearch-project/data-prepper/tree/v0.7.x/deployment/aws
# With 64 as batch size each worker thread could process upto 3200 spans (64 * 50)
batch_size: 64
processor:
- otel_traces_raw:
- otel_traces_group:
hosts: [ "https://:9200" ]
# Change to your credentials
username: "admin"
password: "admin"
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
sink:
- opensearch:
hosts: [ "https://:9200" ]
index_type: trace-analytics-raw
# Change to your credentials
username: "admin"
password: "admin"
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
service-map-pipeline:
workers: 8
delay: "100"
source:
pipeline:
name: "entry-pipeline"
processor:
- service_map_stateful:
# The window duration is the maximum length of time the data prepper stores the most recent trace data to evaluvate service-map relationships.
# The default is 3 minutes, this means we can detect relationships between services from spans reported in last 3 minutes.
# Set higher value if your applications have higher latency.
window_duration: 180
buffer:
bounded_blocking:
# buffer_size is the number of ExportTraceRequest from otel-collector the data prepper should hold in memeory.
# We recommend to keep the same buffer_size for all pipelines.
# Make sure you configure sufficient heap
# default value is 512
buffer_size: 512
# This is the maximum number of request each worker thread will process within the delay.
# Default is 8.
# Make sure buffer_size >= workers * batch_size
batch_size: 8
sink:
- opensearch:
hosts: [ "https://:9200" ]
index_type: trace-analytics-service-map
# Change to your credentials
username: "admin"
password: "admin"
# Add a certificate file if you are accessing an OpenSearch cluster with a self-signed certificate
#cert: /path/to/cert
# If you are connecting to an Amazon OpenSearch Service domain without
# Fine-Grained Access Control, enable these settings. Comment out the
# username and password above.
#aws_sigv4: true
#aws_region: us-east-1
您需要为您的 OpenSearch 集群修改上述配置,使其与您的环境匹配。请注意,它有两个需要修改的 opensearch
接收器。
您必须进行以下更改
hosts
– 设置为您的主机。username
– 提供您的 OpenSearch 用户名。password
– 提供您的 OpenSearch 密码。aws_sigv4
– 如果您正在使用带有 AWS 签名的 Amazon OpenSearch Service,请将此值设置为true
。它将使用默认的 AWS 凭证提供程序签署请求。aws_region
– 如果您正在使用带有 AWS 签名的 Amazon OpenSearch Service,请将此值设置为您的 AWS 区域。
有关 OpenSearch 接收器的其他可用配置,请参阅Data Prepper OpenSearch 接收器。
OpenTelemetry Collector
您需要在服务环境中运行 OpenTelemetry Collector。请遵循入门来安装 OpenTelemetry Collector。确保您已配置收集器,其中包含为您的 Data Prepper 实例配置的导出器。以下 otel-collector-config.yaml
文件示例从各种插桩接收数据并将其导出到 Data Prepper。
otel-collector-config.yaml 文件示例
以下是一个 otel-collector-config.yaml
文件示例
receivers:
jaeger:
protocols:
grpc:
otlp:
protocols:
grpc:
zipkin:
processors:
batch/traces:
timeout: 1s
send_batch_size: 50
exporters:
otlp/data-prepper:
endpoint: localhost:21890
tls:
insecure: true
service:
pipelines:
traces:
receivers: [jaeger, otlp, zipkin]
processors: [batch/traces]
exporters: [otlp/data-prepper]
在您的服务环境中运行 OpenTelemetry 后,您必须配置您的应用程序以使用 OpenTelemetry Collector。OpenTelemetry Collector 通常与您的应用程序并行运行。
后续步骤和更多信息
OpenSearch Dashboards Observability 插件文档提供了有关配置 OpenSearch 以在 OpenSearch Dashboards 中查看追踪分析的更多信息。
有关如何为追踪分析调整和扩展 Data Prepper 的更多信息,请参阅追踪调优。
迁移到 Data Prepper 2.0
从 Data Prepper 1.4 版本开始,追踪处理使用 Data Prepper 的事件模型。这允许管道作者配置其他处理器来修改 span 或追踪。为了提供迁移路径,Data Prepper 1.4 版本引入了以下更改
otel_traces_source
有一个可选的record_type
参数,可以设置为event
。配置后,它将输出事件对象。otel_traces_raw
替换了用于基于事件的 span 的otel_traces_raw_prepper
。otel_traces_group
替换了用于基于事件的 span 的otel_traces_group_prepper
。
在 Data Prepper 2.0 版本中,otel_traces_source
将只输出事件。Data Prepper 2.0 版本还完全删除了 otel_traces_raw_prepper
和 otel_traces_group_prepper
。要迁移到 Data Prepper 2.0,您可以使用事件模型配置您的追踪管道。