Pushgateway 是什么
Pushgateway 是 Prometheus 体系里的中转站:短生命周期任务在退出前把指标推上来,Prometheus 再按常规方式抓取它。它解决的是「任务跑完就消失,抓取来不及」的问题,但代价是数据不会自己过期——任务下线后旧值会一直留在网关里,看起来像是当前状态。因此配套的清理动作不是可选项,而是使用它的前提。
基本信息
| 适用平台 | Prometheus 生态,默认端口 9091 |
|---|---|
| 分组标识 | job 加任意标签,构成指标的分组键 |
| 覆盖行为 | 同一分组重复推送会整体覆盖上次的值 |
| 关键要求 | 任务结束或实例下线后必须主动清理 |
典型使用场景
- 批处理任务:每日跑一次的 ETL 上报耗时与处理行数
- 备份校验:备份脚本推送成功标记与文件大小
- 脚本巡检:临时巡检脚本推送检查结果
- 外部依赖观测:无法被抓取的第三方指标先写入再抓取
- CI 流水线:把部署结果与时长推送给监控
推送与清理
推送与清理
# 推送:按 exposition 文本格式上传,路径中的 job 与 instance 构成分组
printf 'etl_duration_seconds 42.5\netl_rows_total 120034\n' | \
curl --data-binary @- http://127.0.0.1:9091/metrics/job/etl/instance/worker-1
# 删除整个分组(任务结束后执行,避免残留旧值)
curl -X DELETE http://127.0.0.1:9091/metrics/job/etl/instance/worker-1
# 校验推送是否成功
curl -s http://127.0.0.1:9091/metrics | grep etl_duration_seconds关键点与做法
| 事项 | 做法 | 写错的后果 |
|---|---|---|
| 分组标签 | 标签要能唯一区分实例 | 多实例互相覆盖,数据张冠李戴 |
| 抓取配置 | 建议开启 honor_labels | 推送标签被覆盖,无法区分来源 |
| 清理时机 | 任务结束或下线时删除分组 | 旧值长期留存被当成当前状态告警 |
| 失败处理 | 推送失败要重试并记录 | 指标缺失但无人察觉 |
| 指标命名 | 带业务前缀,如 etl_ | 与其它来源指标重名冲突 |
Pushgateway 里的数据不会自动过期,也不会被自动清理;把它当成「状态的快照」来管理,任务相关指标必须配清理动作。
能用拉取就别用推送:常驻服务直接用指标暴露端点更可靠;Pushgateway 只适用于无法被抓取的短任务,滥用会让监控语义变模糊。