Elastic APM 与 Elasticsearch 集成:构建完整可观测性栈
引言
Elastic APM 深度依赖 Elasticsearch 作为数据后端,但正确集成可以解锁更强大的功能,如自定义查询、聚合分析和与其它 Elastic 工具的协同。本文探讨 APM 与 Elasticsearch 的集成细节,包括数据流、索引管理以及高级用例,帮助您构建统一的 observability 栈。APM 数据流与 Elasticsearch 集成
- 数据管道:APM Agent 发送事件(Transactions、Spans、Errors、Metrics)到 APM Server,后者处理后转换为 JSON 文档,索引到 Elasticsearch 的专用索引(如 traces-apm*、metrics-apm*)。
- 集成设置:使用 Fleet 管理 APM 集成(Elastic Agent 8.x+):
- 在 Kibana “Integrations > APM” 添加政策。
- Elastic Agent 运行本地 APM Server,自动安装模板和管道。
- 优势:共享数据流,支持与日志/指标的融合。
- 手动集成:运行独立 APM Server:
output.elasticsearch:hosts: ["localhost:9200"]index: "apm-%{[agent][version]}-%{+yyyy.MM.dd}"
加载索引模板:apm-server setup --template。
高级 Elasticsearch 查询与分析
- 查询 APM 数据:使用 Kibana Dev Tools 执行 DSL 查询:
GET /traces-apm*/_search
{"query": {"bool": {"must": [{ "term": { "service.name": "my-app" } },{ "range": { "transaction.duration.us": { "gte": 1000000 } } } // >1s 事务]}},"aggs": {"latency": { "percentiles": { "field": "transaction.duration.us" } }}
}
这可计算 P95 延迟。
- 聚合与 ML:在 Elasticsearch 中运行聚合分析异常,或使用 ML 节点检测追踪模式。
与其它工具的集成
- OpenTelemetry:使用 OTLP Collector 将 OT 数据导入 APM Server,实现混合追踪。
- Kubernetes 集成:部署 Elastic Agent as DaemonSet,自动监控 Pod。使用 Filebeat 关联日志:
- 配置:fields: { kubernetes: { pod: { name: “%{[kubernetes.pod.name]}” } } }。
- 源映射:上传源映射到 APM Server,解码 JS 错误堆栈:
curl -X POST "http://localhost:8200/v1/sourcemaps" \
-H "Authorization: Bearer your-api-key" \
--data-binary @sourcemap.json
优化与故障排除
- 索引管理:应用 ILM 策略减少存储:热阶段 1 天,删除 >90 天数据。
- 常见问题:索引冲突?运行 apm-server setup 重新加载模板。数据延迟?检查 APM Server 日志。
- 规模化:对于 PB 级数据,使用 Elasticsearch 的分片和副本优化查询速度。
结论
Elastic APM 与 Elasticsearch 的集成提供无缝数据管道和强大分析能力。通过 Fleet 和自定义查询,您可以实现从追踪到警报的全栈可观测性。建议从 APM 集成开始,逐步添加 OpenTelemetry 以支持异构环境。这将显著提升您的应用可靠性和调试效率。