用Pushgateway监控Cronjob等瞬时任务,需任务执行完主动推送指标至Pushgateway,再由Prometheus定时拉取;适用于短生命周期任务,禁用于长时服务;需正确配置标签、告警及定期清理。

用Prometheus联合Pushgateway监控Cronjob这类离线瞬时任务,核心是让任务“自己说话”——执行完立刻把关键信息推给Pushgateway,再由Prometheus定期来取。这种方式不依赖任务长期存活,也不要求网络直连,专治“跑完就消失”的监控盲区。
明确适用场景与边界
只对真正短生命周期的任务用Pushgateway:比如每小时执行一次、运行几十秒就退出的备份脚本、ETL清洗任务、CI/CD构建步骤等。它不是给Web服务或数据库用的——那些该走原生pull模式。滥用Pushgateway会导致指标陈旧、状态失真,甚至掩盖真实故障。
部署与配置Pushgateway
推荐用Docker快速启动,确保端口暴露且可被Prometheus访问:
- 运行命令:docker run -d --name pushgateway -p 9091:9091 prom/pushgateway
- 验证是否就绪:curl http://localhost:9091/metrics 应返回HTTP 200及空指标或已有数据
- Prometheus配置中添加scrape目标(prometheus.yml):
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091']
params:
grouping_key: [job, instance]
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
在Cronjob脚本中推送关键指标
脚本结尾处加入推送逻辑,用最轻量方式发送结构化数据。以Shell为例:
- 记录起止时间与退出码:start=$(date +%s); your_actual_command; exit_code=$?; end=$(date +%s)
- 构造指标文本(注意换行与空行):echo "script_execution_duration_seconds{job=\"backup\",env=\"prod\",instance=\"db01\"} $((end-start))" | curl --data-binary @- http://pushgateway:9091/metrics/job/backup/instance/db01
- 同时推送状态:echo "script_execution_status{job=\"backup\",env=\"prod\",instance=\"db01\"} $exit_code" | curl --data-binary @- http://pushgateway:9091/metrics/job/backup/instance/db01
标签(job、instance等)必须一致,否则Prometheus拉取时会视为不同时间序列。
设置告警与清理策略
指标留在Pushgateway里不会自动过期,需主动管理:
- 在Prometheus中写告警规则,例如:script_execution_status{job="backup"} == 0 表示失败;script_execution_duration_seconds{job="backup"} > 300 表示超时
- 为避免历史堆积,可在脚本成功后调用API清理旧数据:curl -X DELETE http://pushgateway:9091/metrics/job/backup/instance/db01
- 或启用Pushgateway的--persistence.file参数实现重启后指标保留

















