当前位置: 首页 > news >正文

Prometheus Pushgetway详解

一、Pushgateway 核心概述

1.1 是什么

Pushgateway 是 Prometheus 生态的独立推送网关服务,是为了弥补 Prometheus 原生 Pull(拉取)模式缺陷而生的中间件。

Prometheus 默认工作模式:主动定时拉取各 Exporter/业务接口的监控指标。

Pushgateway 工作模式:业务主动推送指标 → Pushgateway 临时存储 → Prometheus 定时拉取网关数据

简单链路:业务程序/脚本 → Pushgateway(9091)<--(Pull)--> Prometheus Server(9090) → Grafana
image
核心定位:短时任务、无常驻接口、内网隔离、自定义指标的临时指标缓存网关

1.2 为什么需要 Pushgateway(核心解决的问题)

Prometheus 原生 Pull 模式存在明显短板,以下场景完全无法适配:

  • 短生命周期任务:定时脚本、批处理任务、一次性执行程序,任务执行完进程就退出,Prometheus 定时拉取时早已无服务,永久丢失指标

  • 无暴露 HTTP 接口的服务:老旧程序、自定义脚本、Shell/Python 任务,没有/无法开发 metrics 接口

  • 网络隔离场景:被监控机器在防火墙后、内网隔离、与 Prometheus 网络不通,Prometheus 无法主动穿透拉取数据

  • 自定义临时业务指标:订单成功率、脚本执行状态、临时统计数据,无专属 Exporter 采集

1.3 核心适用场景 & 禁用场景

✅ 推荐使用场景

  • 定时批处理任务、Shell/Python 定时脚本监控

  • 短生命周期一次性程序、CI/CD 流水线任务监控

  • 内网隔离、防火墙拦截,Prometheus 无法直连的节点

  • 业务自定义临时指标、非标准监控数据上报

❌ 禁止/不推荐场景(重点避坑)

  • 常驻服务、长期运行业务:Web服务、微服务、数据库、中间件,必须用标准 Exporter + Pull 模式

  • 高频海量指标上报:会造成网关数据堆积、Prometheus 抓取压力过大

  • 替代所有 Exporter:违背 Prometheus 设计理念,增加架构复杂度

1.4 核心特性

  • 独立轻量服务,默认端口 9091,部署简单、资源占用极低

  • 提供标准 HTTP API,支持 Shell、Python、Java、Go 等任意语言推送指标

  • 支持分组存储:按 Job、Instance 维度隔离不同业务指标

  • 持久化缓存:重启不丢失已推送指标

  • 支持手动/自动删除过期指标,避免数据脏数据堆积

二、Pushgateway 与原生 Pull 模式核心区别

对比维度 Prometheus Pull(原生) Pushgateway Push(推送)
数据流向 Prometheus 主动拉取 业务主动推送,Prometheus 被动拉取网关
适用对象 常驻服务、长期运行进程 短时任务、一次性脚本、无接口服务
服务存活监控 自带心跳,服务宕机自动告警 无法监控目标存活(核心缺陷)
数据实时性 定时拉取,周期可控 推送即更新,实时性更高
架构复杂度 中(多一层网关组件)
脏数据风险 极低 高(任务退出指标残留,需手动清理)

核心重点:Pushgateway 不会自动清理指标,短时任务执行完毕后,指标会永久残留,必须手动配置删除逻辑,否则产生大量脏数据。

三、Pushgateway 部署实战(Linux 二进制部署)

采用官方二进制包部署,轻量无依赖,生产首选,不推荐 Docker 新手入门。

3.1 下载安装

# 下载官方安装包(适配Linux x86_64)
wget https://github.com/prometheus/pushgateway/releases/download/v1.10.0/pushgateway-1.10.0.linux-amd64.tar.gz# 解压
tar zxf pushgateway-1.10.0.linux-amd64.tar.gz# 移动到系统目录
mv pushgateway-1.10.0.linux-amd64 /usr/local/pushgateway# 创建软链接
ln -s /usr/local/pushgateway/pushgateway /usr/local/bin/

3.2 配置系统服务(开机自启)

创建 systemd 服务文件,实现常驻运行、开机自启、故障重启。

cat > /etc/systemd/system/pushgateway.service << EOF
[Unit]
Description=Prometheus Pushgateway
Documentation=https://prometheus.io/docs/pushgateway/
After=network.target[Service]
Type=simple
# 整合完整生产级启动参数:端口监听、指标路径、持久化、关闭标签强校验
ExecStart=/usr/local/bin/pushgateway \
--web.listen-address=":9091" \
--web.telemetry-path="/metrics" \
--persistence.file=/data/pushgateway/pushgateway.db \
--persistence.interval=5m \
--push.disable-consistency-check# 进程常驻保障
Restart=always
RestartSec=3
# 资源限制(生产可选,防止资源溢出)
LimitNOFILE=65535[Install]
WantedBy=multi-user.target
EOF

3.3 启动服务并验证

# 创建数据目录
mkdir -p /data/pushgateway# 重载服务、开机自启、启动服务
systemctl daemon-reload
systemctl enable pushgateway
systemctl start pushgateway# 查看运行状态
systemctl status pushgateway# 端口验证(默认9091)
ss -tulpn | grep 9091

3.4 访问 Web 界面

浏览器访问:http://服务器IP:9091,可直观查看所有已推送的指标、Job、Instance 分组。

四、Prometheus 对接 Pushgateway 配置

Pushgateway 部署完成后,需要配置 Prometheus 定时拉取网关指标,核心配置重点 honor_labels

4.1 修改 prometheus.yml

global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:# 新增Pushgateway抓取任务- job_name: 'pushgateway'scrape_interval: 10s# 核心配置:优先使用推送指标自带标签,不被网关标签覆盖# 用于解决标签的冲突问题,有效值为: true和false,默认值为false# 当设置为true时,将保留抓取的标签以忽略服务器自身的标签。说白了会覆盖原有标签。# 当设置为false时,则不会覆盖原有标签,而是在标点前加了一个"exported_"前缀。honor_labels: truestatic_configs:- targets: ['127.0.0.1:9091']

4.2 配置核心解释(必懂)

  • honor_labels: true:业务推送指标的自定义标签优先级最高,当推送的指标与服务器目标标签冲突时,保留推送方的标签。这能保证你在推送时定义的 jobinstance 标签不被覆盖。避免 Pushgateway 服务端标签覆盖业务标签,生产必须开启

  • scrape_interval:缩短抓取周期,适配短时任务实时监控

4.3 重启 Prometheus 验证

# 校验配置文件
promtool check config /etc/prometheus/prometheus.yml# 重启服务
systemctl restart prometheus

Prometheus Web 界面 → Status → Targets,可看到 pushgateway 状态为 UP,即对接成功。

五、核心实战:指标推送、查询、删除

Pushgateway 基于 HTTP API 推送,支持 curl 命令、Python 脚本、业务代码 三种常用方式。

5.1 推送语法规范

推送地址格式:POST http://<pushgateway>:9091/metrics/job/任务名/instance/实例名

指标数据格式(Prometheus 标准):

# 指标名 标签=值 指标数值
# HELP 自定义任务执行状态
# TYPE task_status gauge
task_status{name="backup_db"} 1----# 推送 batch_job 这个 job 的指标
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/batch_job/instance/host01
# TYPE processed_rows counter
processed_rows{status="success"} 1024
# TYPE last_run_timestamp gauge
last_run_timestamp 1686000000
EOF
  • --data-binary @- 从标准输入读取原始数据,不能使用 -d,因为 -d 会进行 URL 编码。

  • 指标名称必须带有 # TYPE# HELP 是推荐但非强制。

  • 类型说明:gauge(瞬时值) 适配绝大多数短时任务监控。

5.2 Curl 快速推送(临时测试首选)

# 推送数据库备份任务状态:1成功 0失败
cat << EOF | curl --data-binary @- http://127.0.0.1:9091/metrics/job/cron_task/instance/10.0.0.10
# HELP cron_backup_status 定时备份任务状态
# TYPE cron_backup_status gauge
cron_backup_status{task_name="db_backup"} 1
EOF

推送成功返回 202 Accepted,即可在 Pushgateway、Prometheus 页面查询到指标。

5.3 Python 脚本推送(生产常用)

适用于自定义业务统计、脚本任务监控,可嵌入任意定时任务。

import requestspush_url = "http://127.0.0.1:9091/metrics/job/python_task/instance/10.0.0.10"# 组装Prometheus标准指标
metrics = """
# HELP python_task_run_status Python定时任务执行状态
# TYPE python_task_run_status gauge
python_task_run_status{task="log_clean"} 1
"""# 推送指标
response = requests.post(push_url, data=metrics)
if response.status_code == 202:print("指标推送成功")
else:print(f"推送失败:{response.status_code}")

5.4 指标查询验证

Prometheus Web 界面输入查询语句,实时查看数据:

cron_backup_status
python_task_run_status

5.5 指标删除操作(核心必备)

Pushgateway 不会自动清理过期指标,任务结束后需主动删除,避免脏数据。

删除指定 Job 所有指标

curl -X DELETE http://127.0.0.1:9091/metrics/job/cron_task

删除指定 Job+Instance 指标

 curl -X DELETE  http://10.0.0.42:9091/metrics/job/disk_usage/instance/10.0.0.42

5.6 自动清理过期指标(生产方案)

配置 Linux 定时任务,定时清空无效指标,防止长期堆积:

# 每天凌晨2点清空所有pushgateway指标
0 2 * * * curl -X DELETE http://127.0.0.1:9091/metrics/all

六、Grafana 可视化展示

对接完成后,可在 Grafana 快速配置监控面板:

  1. Grafana 数据源选择已配置的 Prometheus

  2. 新建面板,输入指标查询语句

  3. 配置阈值告警:cron_backup_status == 0 触发任务失败告警

  4. 展示任务执行状态、次数、成功率等自定义视图

七、生产核心问题与避坑指南(重点)

7.1 无法监控目标存活(最大缺陷)

Pull 模式下,服务宕机 Prometheus 会抓取失败,自动触发告警;但 Pushgateway 是主动推送,任务异常退出、进程挂掉,网关依然保留最后一次推送的正常指标,无法感知故障。

解决方案

  • 增加 任务心跳指标,定时推送时间戳

  • Prometheus 配置告警规则:超过 2 个周期无指标更新则判定任务失联

7.2 标签覆盖问题

未开启 honor_labels: true 时,Pushgateway 的 Job/Instance 标签会覆盖业务自定义标签,导致指标维度错乱。

解决方案:生产环境强制开启该配置。

7.3 脏数据堆积

短时任务频繁执行、退出,旧指标长期残留,导致监控数据失真、存储膨胀。

解决方案:任务执行完毕主动调用删除接口 + 定时任务全局清理。

7.4 重复指标问题

脚本重复执行、重试推送,导致同一指标多条数据,影响统计准确性。

解决方案:推送前先删除同 Job 旧指标,再推送新数据。

八、生产最佳实践总结

  1. 场景严格限定:只用于短时脚本、定时任务、无接口服务,常驻业务严禁使用

  2. 必开配置:Prometheus 抓取任务开启 honor_labels: true

  3. 强制清理机制:任务结束主动删指标 + 定时全局清理,杜绝脏数据

  4. 补全存活监控:通过心跳指标+过期告警,弥补无法监控存活的缺陷

  5. 指标规范统一:所有自定义指标遵循 Prometheus 命名规范,统一 Job、Instance 分组

九、实战演示:

  • 监控tcp_status_count:每分钟检测tcp 12种状态的数量
	1.编写脚本采集12种状态 
cat /usr/local/bin/tcp_status.sh
#!/bin/bashpushgateway_url="http://10.0.0.92:9091/metrics/job/tcp_status/instance/10.0.0.91"
time=$(date +%Y-%m-%d+%H:%M:%S)state="SYN-SENT SYN-RECV FIN-WAIT-1 FIN-WAIT-2 TIME-WAIT CLOSE CLOSE-WAIT LAST-ACK LISTEN CLOSING ESTAB"
for i in  $statedot=`ss -tan |grep $i |wc -l`echo tcp_connections{state=\""$i"\"} $t >>/tmp/tcp.txt
done;cat /tmp/tcp.txt | curl --data-binary @- $pushgateway_url
rm -rf  /tmp/tcp.txt2.采集指标到pushgateway
bash /usr/local/bin/tcp_status.sh3.Prometheus检查数据
tcp_connections4.grafana出图 
  • disk_usage
#!/bin/bashmetrics=""
for line in `df |awk 'NR>1{print $NF "=" int($(NF-1))}'`
dodisk_name=`echo $line|awk -F'=' '{print $1}'`disk_usage=`echo $line|awk -F'=' '{print $2}'`metrics="$metrics\ndisk_usage{disk_name=\"$disk_name\"} $disk_usage"
doneecho -e "# A histogram, which has a pretty complex representation in the text format:\n# HELP http_request_duration_seconds A histogram of the request duration.\n# TYPE http_request_duration_seconds histogram\n$metrics" | curl --data-binary @- http://10.0.0.42:9091/metrics/job/disk_usage/instance/10.0.0.42

十、核心一句话总结

Pushgateway 不是替代 Exporter 的通用监控方案,而是 Prometheus Pull 模式的补充工具,专门解决短时、无接口、隔离环境的自定义指标监控问题,使用核心在于:规范推送、主动清理、补全告警、严控场景

http://www.jsqmd.com/news/931938/

相关文章:

  • 3分钟搞定B站缓存视频转换:m4s-converter完整使用教程
  • 逻辑代数基础:数字世界的语言
  • 打破数据孤岛,聚英云平台打造一体化数据分析系统
  • 基于ESP8266的40Hz伽马波光刺激器DIY:从脑波夹带原理到物联网硬件实现
  • 手把手教你搞定反激电源的‘顽疾’:从漏感震荡到准谐振,实测RCD与齐纳钳位怎么选
  • AI如何优化科学传播:从文本简化到公众信任的实证研究
  • 2026必看:东莞甲醛检测治理公司推荐|专业靠谱选东莞佰家环保科技有限公司,技术口碑双在线 - 专注室内空气检测治理
  • Haskell依赖类型实现TensorFlow张量操作编译时维度安全
  • 2026浮子流量计国产品牌综合实力权威排名及深度选型指南 - 水质仪表品牌排行榜
  • 3步解锁屏幕翻译黑科技:Translumo带你打破语言壁垒
  • UnityExplorer深度指南:如何成为Unity游戏调试与修改的专家?
  • ScottPlot实战:在WPF中打造一个实时监控仪表盘(CPU/内存/网络流量动态曲线)
  • 基于ESP32与LoRa的探空气球数据采集系统:从硬件设计到实战部署
  • 别再傻傻分不清了!用Python代码实战演示KNN分类和K-means聚类的核心区别
  • 2026学生降AIGC软件盘点:省时省力+高分适配哪家强?
  • 从AI决策到万物互联:技术趋势的商业落地与个人应对策略
  • Qt5.15项目里QWebEngine加载网页慢到超时?别急着改源码,先试试这个Windows证书策略
  • 【Sora 2展厅制作倒计时72小时】:错过本次RTX 6000 Ada驱动更新窗口,将永久丧失光线追踪反射层级支持
  • RoundedTB:解锁Windows任务栏现代化美学的终极实战手册
  • 5个技巧让你用Black-Litterman模型构建更稳健的投资组合 [特殊字符]
  • Arduino互动幽灵盒子:从传感器到状态机的机电一体化实践
  • 2026日喀则卫生间免砸砖防水、外墙、地下室、楼顶渗漏+彩钢瓦、阳光房漏水 本地专业防水公司TOP5权威推荐(2026年6月本地最新深度调研) - 企业资讯
  • 从URDF反推DH参数:在ROS中为你的六轴机械臂快速配置MoveIt!
  • 别再只盯着手机了!聊聊HarmonyOS的微内核和Android的宏内核,到底谁更适合你的IoT项目?
  • Core ML与Watson混合AI架构:打造智能移动应用的新范式
  • 如何通过e1547打造个性化的数字艺术浏览体验
  • 用Python给视频帧“藏”点小秘密:一个CTF出题人的实战脚本分享(附完整代码)
  • 别再忍受‘假外观’了!手把手教你用Blender调整Livox Mid-360在Gazebo中的3D模型尺寸
  • 终极暗黑破坏神2存档编辑器:可视化编辑解放你的游戏体验
  • 口碑最好的AI论文网站推荐(从开题选题到定稿排版全流程)适合全体毕业生