分析 Jaeger 追踪数据
自 2.5 引入
OpenSearch 可观测性插件中的追踪分析功能现已支持 Jaeger 追踪数据。如果您使用 OpenSearch 作为 Jaeger 追踪数据的后端,您可以使用内置的追踪分析功能。这提供了对 OpenTelemetry (OTel) 追踪数据的支持。
执行追踪分析时,您可以从两个数据源中选择:
- Data Prepper – 通过 Data Prepper 摄取到 OpenSearch 中的数据
- Jaeger – 将追踪数据存储在 OpenSearch 中作为其后端
如果您将 Jaeger 追踪数据存储在 OpenSearch 中,您现在可以使用内置的追踪分析功能来分析错误率和延迟。您还可以过滤追踪并分析追踪的 Span 详细信息,以查明任何服务问题。
当您将 Jaeger 数据摄取到 OpenSearch 中时,它会存储在与通过 Data Prepper 运行数据时创建的 OTel 生成的索引不同的索引中。使用 OpenSearch Dashboards 中的数据源选择器来指示您要执行追踪分析的数据源。
您可以分析的 Jaeger 追踪数据包括 Span 数据以及服务和操作端点数据。
默认情况下,每次为 Jaeger 摄取数据时,它都会为当天创建一个单独的索引。
要了解更多关于 Jaeger 数据追踪的信息,请参阅 Jaeger 文档。
数据摄取要求
要在 Jaeger 数据上执行追踪分析,您需要配置错误功能。
摄取到 OpenSearch 中的 Jaeger 数据必须将环境变量 ES_TAGS_AS_FIELDS_ALL
设置为 true
以支持错误。如果数据未按此格式摄取,它将无法用于错误,并且 OpenSearch 追踪分析中将无法获得追踪的错误数据。
关于 Jaeger 索引的数据摄取
非 Jaeger 数据的追踪分析使用遵循命名约定 otel-v1-apm-span-*
或 otel-v1-apm-service-map*
的 OTel 索引。
Jaeger 索引遵循命名约定 jaeger-span-*
或 jaeger-service-*
。
设置 OpenSearch 以使用 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: # This is also the hostname of the container within the Docker network (i.e. https://opensearch-node1/)
image: opensearchproject/opensearch:latest # Specifying the latest available image - modify if you want a specific version
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster # Name the cluster
- node.name=opensearch-node1 # Name the node that will run in this container
- discovery.seed_hosts=opensearch-node1,opensearch-node2 # Nodes to look for when discovering the cluster
- cluster.initial_cluster_manager_nodes=opensearch-node1,opensearch-node2 # Nodes eligible to serve as cluster manager
- bootstrap.memory_lock=true # Disable JVM heap memory swapping
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m" # Set min and max JVM heap sizes to at least 50% of system RAM
ulimits:
memlock:
soft: -1 # Set memlock to unlimited (no soft or hard limit)
hard: -1
nofile:
soft: 65536 # Maximum number of open files for the opensearch user - set to at least 65536
hard: 65536
volumes:
- opensearch-data1:/usr/share/opensearch/data # Creates volume called opensearch-data1 and mounts it to the container
ports:
- "9200:9200"
- "9600:9600"
networks:
- opensearch-net # All of the containers will join the same Docker bridge network
opensearch-node2:
image: opensearchproject/opensearch:latest # This should be the same image used for opensearch-node1 to avoid issues
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 # Make sure the version of opensearch-dashboards matches the version of opensearch installed on other nodes
container_name: opensearch-dashboards
ports:
- 5601:5601 # Map host port 5601 to container port 5601
expose:
- "5601" # Expose port 5601 for web access to OpenSearch Dashboards
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node1:9200","https://opensearch-node2:9200"]' # Define the OpenSearch nodes that OpenSearch Dashboards will query
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:9200",
"--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 上运行示例应用程序。要打开应用程序,请访问 https://:8080。
在示例应用程序 Hot R.O.D. 中,选择任意按钮生成数据。现在您可以在 Dashboards 中查看追踪数据。
步骤 4:在 OpenSearch Dashboards 中查看追踪数据
生成 Jaeger 追踪数据后,您可以在 Dashboards 中查看它。
访问 **追踪分析**:https://:5601/app/observability-dashboards#/trace_analytics/home。
在 OpenSearch Dashboards 中使用追踪分析
要在 Dashboards 中分析 Jaeger 追踪数据,首先需要设置追踪分析功能。要开始,请参阅追踪分析入门。
数据源
执行追踪分析时,您可以将 Data Prepper 或 Jaeger 指定为数据源。在 Dashboards 中,导航到 **可观测性 > 追踪分析** 并选择 Jaeger。
仪表板视图
选择 Jaeger 作为数据源后,您可以在**仪表板**视图中查看所有已索引的数据,包括**错误率**和**吞吐量**。
错误率
您可以在**仪表板**视图中查看追踪错误随时间的变化,还可以看到具有非零错误率的前五种服务和操作组合。
吞吐量
选择**吞吐量**后,您可以查看 Jaeger 索引追踪随时间变化的吞吐量。
您可以从**前 5 个服务和操作延迟**列表中选择单个追踪,并查看详细的追踪数据。
您还可以查看延迟最高的服务和操作组合。
如果您选择服务和操作名称中的一个条目,并进入**追踪**列选择一个追踪,它将自动添加该服务和操作作为过滤器。
追踪
在**追踪**中,您可以查看列表中每个单独追踪 ID 的过滤服务和操作的延迟和错误。
如果您选择单个追踪 ID,您可以查看有关追踪的更详细信息,例如**服务耗时**和 **Span**。您还可以查看 JSON 格式的索引有效负载。
服务
您还可以查看每个服务的单独错误率和延迟。导航到 **可观测性 > 追踪分析 > 服务**。在**服务**中,您可以查看列表中每个服务的平均延迟、错误率、吞吐量和追踪。