追踪分析入门
OpenSearch 追踪分析包含两个组件:Data Prepper 和追踪分析 OpenSearch Dashboards 插件。Data Prepper 仓库包含多个示例应用程序,可帮助您入门。
基本数据流
-
追踪分析依赖于您向应用程序添加插桩并生成追踪数据。OpenTelemetry 文档包含多种编程语言的示例应用程序,可以帮助您入门,包括 Java、Python、Go 和 JavaScript。
(在下面的 Jaeger HotROD 示例中,一个额外的组件,即 Jaeger 代理,与应用程序并行运行并将数据发送到 OpenTelemetry Collector,但概念是相似的。)
-
OpenTelemetry Collector 从应用程序接收数据并将其格式化为 OpenTelemetry 数据。
-
Data Prepper 处理 OpenTelemetry 数据,将其转换为 OpenSearch 可用的格式,并将其索引到 OpenSearch 集群上。
-
追踪分析 OpenSearch Dashboards 插件以图表和表格的形式近乎实时地显示数据,重点关注服务架构、延迟、错误率和吞吐量。
Jaeger HotROD
一个追踪分析示例应用程序是 Jaeger HotROD 演示,它模拟了数据在分布式应用程序中的流动。
下载或克隆 Data Prepper 仓库。然后导航到 examples/jaeger-hotrod/
,并在文本编辑器中打开 docker-compose.yml
。此文件包含 基本数据流 中每个元素的容器。
- 一个分布式应用程序 (
jaeger-hot-rod
) 带有 Jaeger 代理 (jaeger-agent
) - OpenTelemetry Collector (
otel-collector
) - Data Prepper (
data-prepper
) - 一个单节点 OpenSearch 集群 (
opensearch
) - OpenSearch Dashboards (
opensearch-dashboards
)。
关闭文件并运行 docker compose up --build
。容器启动后,在网络浏览器中导航到 https://:8080
。
在网页界面中点击一个按钮,向应用程序发送请求。每个请求都会启动组成应用程序的各项服务的一系列操作。从控制台日志中,您可以看到这些操作共享相同的 trace-id
,这让您可以将请求中的所有操作作为一个单一的追踪来跟踪。
jaeger-hot-rod | http://0.0.0.0:8081/customer?customer=392
jaeger-hot-rod | 2020-11-19T16:29:53.425Z INFO frontend/server.go:92 HTTP request received {"service": "frontend", "trace_id": "12091bd60f45ea2c", "span_id": "12091bd60f45ea2c", "method": "GET", "url": "/dispatch?customer=392&nonse=0.6509021735471818"}
jaeger-hot-rod | 2020-11-19T16:29:53.426Z INFO customer/client.go:54 Getting customer{"service": "frontend", "component": "customer_client", "trace_id": "12091bd60f45ea2c", "span_id": "12091bd60f45ea2c", "customer_id": "392"}
jaeger-hot-rod | 2020-11-19T16:29:53.430Z INFO customer/server.go:67 HTTP request received {"service": "customer", "trace_id": "12091bd60f45ea2c", "span_id": "252ff7d0e1ac533b", "method": "GET", "url": "/customer?customer=392"}
jaeger-hot-rod | 2020-11-19T16:29:53.430Z INFO customer/database.go:73 Loading customer{"service": "customer", "component": "mysql", "trace_id": "12091bd60f45ea2c", "span_id": "252ff7d0e1ac533b", "customer_id": "392"}
这些操作也具有 span_id
。Span 是来自单个服务的工作单元。每个追踪都包含若干个 span。应用程序开始处理请求后不久,您就可以看到 OpenTelemetry Collector 开始导出 span。
otel-collector | 2020-11-19T16:29:53.781Z INFO loggingexporter/logging_exporter.go:296 TraceExporter {"#spans": 1}
otel-collector | 2020-11-19T16:29:53.787Z INFO loggingexporter/logging_exporter.go:296 TraceExporter {"#spans": 3}
然后 Data Prepper 处理来自 OpenTelemetry Collector 的数据并对其进行索引。
data-prepper | 1031918 [service-map-pipeline-process-worker-2-thread-1] INFO com.amazon.dataprepper.pipeline.ProcessWorker – service-map-pipeline Worker: Processing 3 records from buffer
data-prepper | 1031923 [entry-pipeline-process-worker-1-thread-1] INFO com.amazon.dataprepper.pipeline.ProcessWorker – entry-pipeline Worker: Processing 1 records from buffer
最后,您可以看到 OpenSearch 节点响应索引请求。
node-0.example.com | [2020-11-19T16:29:55,064][INFO ][o.e.c.m.MetadataMappingService] [9fb4fb37a516] [otel-v1-apm-span-000001/NGYbmVD9RmmqnxjfTzBQsQ] update_mapping [_doc]
node-0.example.com | [2020-11-19T16:29:55,267][INFO ][o.e.c.m.MetadataMappingService] [9fb4fb37a516] [otel-v1-apm-span-000001/NGYbmVD9RmmqnxjfTzBQsQ] update_mapping [_doc]
在一个新的终端窗口中,运行以下命令以查看 OpenSearch 集群中的一个原始文档
curl -X GET -u 'admin:<custom-admin-password>' -k 'https://:9200/otel-v1-apm-span-000001/_search?pretty&size=1'
在网络浏览器中导航到 https://:5601
并选择 Trace Analytics。您可以在 Jaeger HotROD 网页界面中看到您单次点击的结果:每个 API 和 HTTP 方法的追踪数量、延迟趋势、服务架构的颜色编码地图,以及一个可用于深入查看单个操作的追踪 ID 列表。
如果您没有看到您的追踪,请在 OpenSearch Dashboards 中调整时间范围。有关使用该插件的更多信息,请参阅OpenSearch Dashboards 插件。