APM Server 性能诊断
编辑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 资源,您可以调整 flush_bytes
、flush_interval
、max_retries
和 timeout
设置,如配置 Elasticsearch 输出中所述,以减少 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