APM Server 性能诊断

编辑
诊断 Elasticsearch 的反压
编辑

当 Elasticsearch 处于过度负载或索引压力下时,APM Server 在将新文档索引到 Elasticsearch 时可能会遇到下游反压。通常,来自 Elasticsearch 的反压会以较高的索引延迟和/或拒绝的请求的形式表现出来,这反过来可能导致 APM Server 拒绝传入的请求。结果,连接到受影响的 APM Server 的 APM 代理在发送 APM 事件时将遭受流量限制和/或请求超时。

要快速识别可能存在的问题,请尝试在 APM Server 日志中查找类似的错误日志行。

...
{"log.level":"error","@timestamp":"2024-07-27T23:46:28.529Z","log.origin":{"function":"github.com/elastic/go-docappender/v2.(*Appender).flush","file.name":"[email protected]/appender.go","file.line":370},"message":"bulk indexing request failed","service.name":"apm-server","error":{"message":"flush failed (429): [429 Too Many Requests]"},"ecs.version":"1.6.0"}
{"log.level":"error","@timestamp":"2024-07-27T23:55:38.612Z","log.origin":{"function":"github.com/elastic/go-docappender/v2.(*Appender).flush","file.name":"[email protected]/appender.go","file.line":370},"message":"bulk indexing request failed","service.name":"apm-server","error":{"message":"flush failed (503): [503 Service Unavailable]"},"ecs.version":"1.6.0"}
...

要深入了解 APM Server 的健康状况和性能,请考虑按照 监控 APM Server 中的步骤启用监控功能。启用后,APM Server 还会报告一组重要指标,以帮助您识别任何性能下降。

请密切注意以下指标字段:

  • beats_stats.metrics.libbeat.output.events.active 表示等待摄取的缓冲挂起文档的数量;(如果此值迅速增加,可能表示 Elasticsearch 反压
  • beats_stats.metrics.libbeat.output.events.acked 表示已成功摄取的文档总数;
  • beats_stats.metrics.libbeat.output.events.failed 表示摄取失败的文档总数;(如果此值迅速增加,可能表示 Elasticsearch 反压
  • beats_stats.metrics.libbeat.output.events.toomany 表示由于 Elasticsearch 返回 429 Too many Requests 而摄取失败的文档数量;(如果此值迅速增加,可能表示 Elasticsearch 反压
  • beats_stats.output.elasticsearch.bulk_requests.available 表示可用于执行批量索引请求的批量索引器数量;(如果此值等于 0,可能表示 Elasticsearch 反压
  • beats_stats.output.elasticsearch.bulk_requests.completed 表示已完成的批量请求数量;
  • beats_stats.metrics.output.elasticsearch.indexers.active 表示当前正在处理批次的活动批量索引器的数量;

有关导出指标字段的完整列表,请参阅 Metricbeat 文档

过度索引压力或拒绝请求的一个可能原因是 Elasticsearch 容量不足。要缓解此问题,请遵循 拒绝的请求 中的指南。

(不推荐)如果无法扩展 Elasticsearch 资源,您可以调整 配置 Elasticsearch 输出 中描述的 flush_bytesflush_intervalmax_retriestimeout 设置以降低 APM Server 索引压力。但是,请注意,增加缓冲文档的数量和/或减少重试次数可能会导致丢弃的 APM 事件速率更高。下面列出了一个自定义配置示例,其中默认缓冲文档的数量大约增加了一倍,同时 Elasticsearch 索引重试次数也减少了。此配置提供了一个通用示例,可能不适用于您的情况。尝试进一步调整设置以查看哪些设置适合您。

output.elasticsearch:
  flush_bytes: "2MB" # double the default value
  flush_interval: "2s" # double the default value
  max_retries: 1 # decrease the default value
  timeout: 60 # decrease the default value