Prometheus最佳实践(六)——Pushgateway
Prometheus Pushgateway 使用指南与最佳实践(中文总结)
本文档来自 Prometheus 官方文档 - When to use the Pushgateway,核心观点是:Pushgateway 仅适用于极少数特定场景,不应作为常规指标采集手段。盲目使用会带来严重问题。
一、Pushgateway 是什么?
- 一个中间代理服务,允许无法被 Prometheus 主动拉取(scrape)的作业主动推送(push)指标。
- 详细机制见 Pushing metrics。
二、为什么不推荐常规使用?
1. 破坏 Prometheus 的拉取模型优势
❌ 失去自动健康监控:
Prometheus 通过up指标判断目标是否存活。Pushgateway 本身始终“up”,即使原始作业已崩溃。❌ 生命周期错位:
Pushgateway 永不自动删除已推送的指标序列(time series),即使原始作业已终止或重命名。
- 结果:陈旧指标长期存在,污染监控数据。
- 对比:拉取模式下,实例消失 → 指标自动消失。
2. 架构风险
- ❌ 单点故障 & 性能瓶颈:
多个作业通过同一个 Pushgateway 上报 → 它成为关键依赖和性能瓶颈。
三、唯一推荐的使用场景
✅ 服务级批处理作业(Service-level batch job)
- 定义:
作业逻辑不绑定到特定机器或实例,而是代表整个服务的行为。
示例:- 全局用户清理任务
- 跨集群数据归档
- 全站缓存预热
- 关键要求:
- 指标不得包含
instance、host等标识具体机器的标签。 - 指标生命周期与作业本身解耦,避免因实例变动产生陈旧数据。
- 推荐指标:
last_success_timestamp_seconds(上次成功时间戳)job_duration_seconds(作业耗时)
- 指标不得包含
📌 参考:Batch Job 监控最佳实践
四、常见误用场景及替代方案
| 误用场景 | 问题 | 正确做法 |
|---|---|---|
| 机器相关的批处理任务 (如 cron 安全更新、配置管理) | 每台机器独立运行,需保留 instance 标签 → 导致陈旧指标堆积 |
✅ 使用 Node Exporter 的 textfile collector 将结果写入 /var/lib/node_exporter/textfile_collector/ 下的 .prom 文件 |
| 因防火墙/NAT 无法拉取 | 将 Pushgateway 当作“穿透工具” | ✅ 将 Prometheus 部署到同网络内 或使用 **PushProx**(专为 NAT/防火墙设计的反向代理) |
| 临时调试或一次性脚本 | 指标无明确生命周期,易成垃圾数据 | ⚠️ 若必须使用,务必在脚本结束时调用 Pushgateway API 删除指标 |
五、如果必须使用 Pushgateway
- 严格限制使用范围:仅用于上述“服务级批处理”。
- 避免高基数标签:不要推送含用户 ID、会话 ID 等动态标签的指标。
- 定期清理:通过 Pushgateway 的
/metrics/job/<job>DELETE API 手动清理陈旧作业数据。 - 不要用于实时监控:它不是为高频、持续上报设计的。
总结:决策流程图
1 | 你的作业是否是“服务级批处理”? |
🌟 核心原则:
能 Pull 就绝不 Push。Pushgateway 是例外,不是常规选项。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 楚歌!
