- 文档首页
托管 Prometheus
最佳实践
Prometheus 数据采集与接入
开源 Prometheus 的 Agent 模式性能优化最佳实践
Prometheus 数据采集与接入
开源 Prometheus 的 Agent 模式性能优化最佳实践
开源 Prometheus 的 Agent 模式性能优化最佳实践
在容器服务(VKE)或自建 Kubernetes 集群中,可根据集群规模、数据写入链路及运维复杂度选择合适的监控指标采集方式。本文介绍使用开源 Prometheus 的 Agent 模式采集监控指标并写入 VMP 时,如何从优化参数配置、写入前标识和过滤指标数据、降压与缓冲三个方面提升该模式的性能。
可参考本节内容优化 Prometheus Agent 的 remote_write 配置。参数及说明如下:
按采集规模选择初始配置
根据每秒样本数(即 sps)选择对应的 queue_config 初始配置。该配置用于使发送并发、队列容量和批次大小与当前采集规模匹配,后续可根据运行状态继续调整。
小型规模:≤ 1k sps
中型规模:5k–20k sps
大型规模:≥ 50k sps
采集规模不超过 1k sps 时,可使用以下配置作为初始值,以降低内存占用和发送并发。使用默认值(即 capacity: 10000、max_samples_per_send: 2000)时,每个分片的内存占用通常小于 2 MB,总内存峰值约等于:max_shards * 单个分片内存。
参考配置:
调整思路:
- 降低 capacity 和 max_shards,节省内存。
- 增大 batch_send_deadline,聚合更多样本,提升发送效率。
采集规模为 5k–20k sps 时,可先使用接近默认值的配置,并观察分片数和样本积压情况。观察结果可用于判断发送并发是否接近上限,或远端接收能力是否不足。
参考配置:
调整思路:
- 重点监控 prometheus_remote_storage_shards 指标。
- 如果分片数持续接近 max_shards 且 samples_pending 仍在增加,考虑是远端限流或性能不足,应降低 max_shards 以减少并发压力。
采集规模达到 50k sps 以上时,建议提高队列容量、最小分片数和单次发送样本数,并确认远端能够承受对应并发。
参考配置:
调整思路:
- 增大 capacity 和 max_samples_per_send,匹配高吞吐。
- 降低 batch_send_deadline 和 max_backoff,以加快数据发送和异常恢复速度。
- 使用 external_labels 标识数据来源
- 在 global 配置块下使用 external_labels,可以为从该 Agent 发出的所有时间序列附加固定标签,例如集群名称、地域、环境等。多个集群、地域或环境的数据写入同一远端时,可通过这些标签区分指标来源。
- 使用 write_relabel_configs 过滤指标
- write_relabel_configs 是 remote_write 下的配置,可以在数据发送前,基于标签对时序数据进行过滤、重塑和修改。该配置可用于保留关键指标或丢弃低价值指标,控制进入远端存储的数据范围。
- 可使用 labelmap 或 replace 统一标签名称,或修复不规范的标签值,减少不一致标签进入远端存储。
- 建议尽量避免使用具有无限或极大可能取值的标签,例如 id、uuid、email、session。此类标签会增加时序数量,可能增加远端存储成本和查询复杂度。您可以在 write_relabel_configs 中使用 action: labeldrop 或 action: drop 规则移除高基数标签。
- 当远端出现 HTTP 429 限流或 HTTP 5xx 过载时,推荐调整以下参数:
- 降低 max_shards:减少并发请求数,降低远端写入压力。
- 提高 batch_send_deadline:延长本地等待时间,聚合更多样本后再发送,降低请求频率。
- 增大 min_backoff / max_backoff:延长重试间隔,为远端恢复预留更多时间。
- Prometheus Agent 将待发送数据缓存在 WAL 中,该缓冲区通常对应约 2 小时的数据量。若远端存储持续不可用超过 2 小时,最旧的数据将被丢弃,造成永久丢失,为避免数据丢失,建议提前采取以下措施:
- HA 部署:至少部署两个 Agent 实例(副本),抓取相同的 Targets。
- 持久化卷:确保 Agent 使用 PV,防止 Pod 意外重启造成 WAL 丢失。
- 多路写入:配置多个 remote_write 入口,将数据同时写入两个或多个独立的远端存储系统,实现更高级别的数据冗余。
完成 remote_write 配置后,建议您通过 prometheus_remote_storage_* 指标观察写入状态,以判断是否存在样本积压、发送失败、分片数接近上限、发送延迟升高或重试增加等问题。下表涵盖关键 prometheus_remote_storage_* 指标及含义,帮助您快速定位写入链路的异常现象。
排查队列积压(pending samples 持续增长时):
- 检查 prometheus_remote_storage_shards 是否已达到 max_shards。
- 查看 sent_batch_duration 是否过高,判断是网络延迟还是远端处理慢。
- 查看 Agent 日志,检查是否有大量 HTTP 429、HTTP 5xx 错误码,或 context deadline exceeded 超时。
- 如果是后端问题,按降压策略调整 queue_config。
排查内存升高:
- 确认是否由分片数过多引起,特别是在数据积压时,shards 会自动扩容至 max_shards。
- 检查 prometheus_tsdb_head_series,确认是否由高基数 Target 导致。
- 降低 max_shards,可以快速控制内存增长。
排查证书或鉴权问题:
- 查看 Agent 日志,通常会有明确的 certificate signed by unknown authority 或 authorization failed 等 TLS / Auth 错误。
- 检查 tls_config 和 authorization(例如 bearer_token_file)配置是否正确。
最近更新时间:2026.07.20 10:16:54