分析 Jaeger 链路追踪数据
UDB-SX 可观测性插件中的链路追踪分析功能现在支持 Jaeger 链路追踪数据。如果您使用 UDB-SX 作为 Jaeger 链路追踪数据的后端,您可以使用内置的链路追踪分析功能。这提供了对 OpenTelemetry (OTel) 链路追踪数据的支持。
当您执行链路追踪分析时,可以从两个数据源中进行选择:
Data Prepper – 通过 Data Prepper 摄取到 UDB-SX 中的数据
Jaeger – 作为其后端存储在 UDB-SX 中的链路追踪数据
如果您将 Jaeger 链路追踪数据存储在 UDB-SX 中,您现在可以使用内置的链路追踪分析功能来分析错误率和延迟。您还可以筛选追踪并分析追踪的跨度详情,以精确定位任何服务问题。
当您将 Jaeger 数据摄取到 UDB-SX 时,它会存储在与通过 Data Prepper 运行数据时创建的 OTel 生成索引不同的索引中。使用 UDB-SX Dashboards 中的数据源选择器来指明您想要在其上执行链路追踪分析的数据源。
您可以分析的 Jaeger 链路追踪数据包括跨度数据以及服务和操作端点数据。
默认情况下,每次为 Jaeger 摄取数据时,都会为该天创建一个单独的索引。
要了解更多关于 Jaeger 数据追踪的信息,请参阅 Jaeger 文档。
数据摄取要求
要对 Jaeger 数据执行链路追踪分析,您需要配置错误能力。
摄取到 UDB-SX 的 Jaeger 数据必须将环境变量 ES_TAGS_AS_FIELDS_ALL 设置为 true 以处理错误。如果数据不是以此格式摄取的,则无法处理错误,并且错误数据将无法用于 UDB-SX 的链路追踪分析中的追踪。
关于使用 Jaeger 索引的数据摄取
非 Jaeger 数据的链路追踪分析使用命名约定为 otel-v1-apm-span-* 或 otel-v1-apm-service-map* 的 OTel 索引。
Jaeger 索引遵循命名约定 jaeger-span-* 或 jaeger-service-*。
设置 UDB-SX 以使用 Jaeger 数据
以下部分提供了一个示例 Docker Compose 文件,其中包含启用链路追踪分析错误功能所需的配置。
步骤 1:运行 Docker Compose 文件
使用以下 Docker Compose 文件为链路追踪分析启用 Jaeger 数据。将 ES_TAGS_AS_FIELDS_ALL 环境变量设置为 true 以启用将错误添加到追踪数据中。
复制以下 Docker Compose 文件并将其保存为 docker-compose.yml:
version: '3'
services:
opensearch-node1: # 这也是 Docker 网络中容器的主机名 (即 https://opensearch-node1/)
image: opensearchproject/opensearch:latest # 指定最新的可用镜像 - 如果需要特定版本,请修改
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster # 命名集群
- node.name=opensearch-node1 # 命名将在此容器中运行的节点
- discovery.seed_hosts=opensearch-node1,opensearch-node2 # 发现集群时要查找的节点
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # 有资格担任集群管理器的节点
- bootstrap.memory_lock=true # 禁用 JVM 堆内存交换
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # 将最小和最大 JVM 堆大小设置为至少系统 RAM 的 50%
ulimits:
memlock:
soft: -1 # 将 memlock 设置为无限制(无软限制或硬限制)
hard: -1
nofile:
soft: 65536 # opensearch 用户的最大打开文件数 - 设置为至少 65536
hard: 65536
volumes:
- opensearch-data1:/usr/share/opensearch/data # 创建名为 opensearch-data1 的卷并将其挂载到容器
ports:
- "10200:10200"
- "9600:9600"
networks:
- opensearch-net # 所有容器都将加入同一个 Docker 桥接网络
opensearch-node2:
image: opensearchproject/opensearch:latest # 这应与用于 opensearch-node1 的镜像相同,以避免问题
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster
- node.name=opensearch-node2
- discovery.seed_hosts=opensearch-node1,opensearch-node2
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- opensearch-data2:/usr/share/opensearch/data
networks:
- opensearch-net
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:latest # 确保 opensearch-dashboards 的版本与其他节点上安装的 opensearch 版本匹配
container_name: opensearch-dashboards
ports:
- 6601:6601 # 将主机端口 6601 映射到容器端口 6601
expose:
- "6601" # 暴露端口 6601 以通过 Web 访问 UDB-SX Dashboards
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node1:10200","https://opensearch-node2:10200"]' # 定义 UDB-SX Dashboards 将查询的 UDB-SX 节点
networks:
- opensearch-net
jaeger-collector:
image: jaegertracing/jaeger-collector:latest
ports:
- "14269:14269"
- "14268:14268"
- "14267:14267"
- "14250:14250"
- "9411:9411"
networks:
- opensearch-net
restart: on-failure
environment:
- SPAN_STORAGE_TYPE=opensearch
- ES_TAGS_AS_FIELDS_ALL=true
- ES_USERNAME=admin
- ES_PASSWORD=admin
- ES_TLS_SKIP_HOST_VERIFY=true
command: [
"--es.server-urls=https://opensearch-node1:10200",
"--es.tls.enabled=true",
]
depends_on:
- opensearch-node1
jaeger-agent:
image: jaegertracing/jaeger-agent:latest
hostname: jaeger-agent
command: ["--reporter.grpc.host-port=jaeger-collector:14250"]
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
networks:
- opensearch-net
restart: on-failure
environment:
- SPAN_STORAGE_TYPE=opensearch
depends_on:
- jaeger-collector
hotrod:
image: jaegertracing/example-hotrod:latest
ports:
- "8080:8080"
command: ["all"]
environment:
- JAEGER_AGENT_HOST=jaeger-agent
- JAEGER_AGENT_PORT=6831
networks:
- opensearch-net
depends_on:
- jaeger-agent
volumes:
opensearch-data1:
opensearch-data2:
networks:
opensearch-net:
步骤 2:启动集群
运行以下命令来部署 Docker compose YAML 文件:
docker compose up -d
要停止集群,请运行以下命令:
docker compose down
步骤 3:生成示例数据
使用 Docker 文件提供的示例应用程序生成数据。运行 Docker Compose 文件后,它会在本地主机端口 8080 上运行示例应用程序。要打开应用程序,请访问 http://localhost:8080。

在示例应用程序 Hot R.O.D. 中,选择任意按钮以生成数据。现在您可以在 Dashboards 中查看链路追踪数据。
步骤 4:在 UDB-SX Dashboards 中查看链路追踪数据
生成 Jaeger 链路追踪数据后,您可以在 Dashboards 中查看它。
转到 http://localhost:6601/app/observability-dashboards#/trace_analytics/home 的 Trace analytics。
在 UDB-SX Dashboards 中使用链路追踪分析
要在 Dashboards 中分析 Jaeger 链路追踪数据,首先设置链路追踪分析功能。要开始使用,请参阅 开始使用链路追踪分析。
数据源
在执行链路追踪分析时,您可以指定 Data Prepper 或 Jaeger 作为数据源。 从 Dashboards 中,转到 Observability > Trace analytics 并选择 Jaeger。

仪表板视图
选择 Jaeger 作为数据源后,您可以在 Dashboard 视图中查看所有已索引的数据,包括错误率和吞吐量。
错误率
您可以在 Dashboard 视图中查看随时间变化的追踪错误计数,还可以看到错误率非零的服务和操作的前五个组合。

吞吐量
选择 Throughput 后,您可以看到 Jaeger 索引追踪随时间变化的吞吐量。
您可以从 Top 5 Service and Operation Latency 列表中选择一个单独的追踪,并查看详细的追踪数据。

您还可以看到具有最高延迟的服务和操作组合。
如果您选择服务与操作名称的其中一个条目,并转到 Traces 列选择一个追踪,它将自动添加服务和操作作为筛选器。
追踪
在 Traces 中,您可以看到列表中每个单独追踪 ID 的经过筛选的服务和操作的延迟和错误。

如果您选择一个单独的追踪 ID,您可以看到关于该追踪的更详细信息,例如服务花费的时间和跨度。您还可以以 JSON 格式查看索引负载。

服务
您还可以查看每个单独服务的单独错误率和延迟。转到 Observability > Trace analytics > Services。在 Services 中,您可以看到列表中每个服务的平均延迟、错误率、吞吐量和追踪。
