引言

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+):
    1. 在 Kibana “Integrations > APM” 添加政策。
    2. 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 以支持异构环境。这将显著提升您的应用可靠性和调试效率。

Logo

更多推荐