跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Prometheus Pushgateway 安装配置与临时任务监控实践

前言 在运维与开发过程中,Prometheus 监控大盘通常能完整展示长期运行服务的状态,但凌晨执行的备份脚本、几分钟结束的 CI/CD 任务或临时调度的数据处理作业等短生命周期任务,往往因执行完毕即退出而无法被 Prometheus 的拉取(Pull)机制捕获,形成监控盲区。 针对此类场景,Prometheus 官方提供了 Pushgateway 组件。将介绍 Pushgateway 的安装…

Tesfly发布于 2026/3/30更新于 2026/10/2046K 浏览
Prometheus Pushgateway 安装配置与临时任务监控实践

前言

在运维与开发过程中,Prometheus 监控大盘通常能完整展示长期运行服务的状态,但凌晨执行的备份脚本、几分钟结束的 CI/CD 任务或临时调度的数据处理作业等短生命周期任务,往往因执行完毕即退出而无法被 Prometheus 的拉取(Pull)机制捕获,形成监控盲区。

针对此类场景,Prometheus 官方提供了 Pushgateway 组件。本文将介绍 Pushgateway 的安装配置方法,并演示如何将临时任务的执行数据主动推送至 Prometheus,实现全链路监控。

1. 环境准备

本文演示环境基于 Linux 虚拟机,相关软件版本如下:

  • 操作系统:CentOS Linux release 7.9.2009 (Core)
  • Docker:26.1.4
  • Prometheus:v3.5.0
  • Pushgateway:1.11.2

2. Pushgateway 安装配置

2.1 二进制包安装
  1. 下载并解压二进制包:
tar -zxvf pushgateway-1.11.2.linux-amd64.tar.gz
mv pushgateway-1.11.2.linux-amd64 pushgateway
rm -rf pushgateway-1.11.2.linux-amd64.tar.gz
  1. 创建 systemd 服务文件 /etc/systemd/system/pushgateway.service:
[Unit]
Description=Pushgateway for Prometheus
Documentation=https://github.com/prometheus/pushgateway
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecStart=/app/pushgateway/pushgateway \
  --web.listen-address=:9091 \
  --web.enable-admin-api \
  --log.level=info
WorkingDirectory=/app/pushgateway
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=pushgateway

[Install]
WantedBy=multi-user.target
  1. 设置权限并启动服务:
sudo  -R prometheus:prometheus /app/pushgateway
  +x /app/pushgateway/pushgateway
 systemctl daemon-reload
 systemctl start pushgateway
 systemctl  pushgateway
 systemctl status pushgateway
chown
sudo
chmod
sudo
sudo
sudo
enable
sudo
  1. 验证服务:
ps aux | grep pushgateway
curl http://localhost:9091/metrics
journalctl -u pushgateway -f
  1. (可选)配置防火墙放行 9091 端口:
sudo firewall-cmd --permanent --add-port=9091/tcp
sudo firewall-cmd --reload

此时访问 http://<ip>:9091 即可看到 Pushgateway Web UI。访问 http://<ip>:9091/metrics 可查看其自身暴露的 Go 运行时及进程指标。

2.2 Docker 安装

使用官方镜像快速部署:

docker pull prom/pushgateway
docker run -d --name=pg -p 9091:9091 prom/pushgateway

启动后访问 http://<ip>:9091 即可。

3. Prometheus 配置 Pushgateway

编辑 Prometheus 配置文件 prometheus.yml,添加对应的 scrape job:

scrape_configs:
  - job_name: 'pushgateway'
    honor_labels: true
    static_configs:
      - targets: ['localhost:9091']
        labels:
          app: "pushgateway"

注意:必须配置 honor_labels: true,否则 Pushgateway 推送的 job 和 instance 标签会被 Prometheus 覆盖。

重启 Prometheus 服务:

systemctl restart prometheus
systemctl status prometheus

访问 Prometheus UI (http://<ip>:9090) 的 Targets 页面,确认 Pushgateway 状态为 UP。

4. 推送数据到 Pushgateway

Pushgateway 提供标准 HTTP API 用于接收指标。默认推送 URL 格式为: http://<pushgateway-addr>:9091/metrics/job/{JOB_NAME}{/LABEL_NAME/LABEL_VALUE...} 其中 job 为必填项,后续可追加任意标签对(如 instance/<INSTANCE_NAME>)以区分数据来源。

4.1 推送简单指标
echo "test_metric 123456" | curl --data-binary @- http://192.168.42.140:9091/metrics/job/test_job

推送成功后,Pushgateway 会自动生成 push_time_seconds 和 push_failure_time_seconds 指标。在 Prometheus UI 中即可查询到 test_metric。

4.2 推送复杂指标(带类型与帮助信息)
cat <<EOF | curl --data-binary @- http://192.168.42.140:9091/metrics/job/some_job/instance/some_instance
# TYPE some_metric counter
some_metric{label="val1"} 42
# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283
EOF
4.3 删除指标
  • 删除指定 job 和 instance 的数据:
    curl -X DELETE http://192.168.42.140:9091/metrics/job/some_job/instance/some_instance
    
  • 删除指定 job 下的所有数据:
    curl -X DELETE http://192.168.42.140:9091/metrics/job/some_job
    

5. 真实场景应用示例

5.1 Shell 脚本监控备份任务

模拟备份任务并推送耗时与状态指标:

#!/bin/bash
JOB_NAME="daily_backup"
INSTANCE="server01"
PUSHGATEWAY_URL="http://localhost:9091"

start_time=$(date +%s)
echo "Starting backup..."
sleep 3
backup_success=1 # 1 表示成功,0 表示失败
end_time=$(date +%s)
duration=$((end_time - start_time))

cat <<EOF | curl --data-binary @- ${PUSHGATEWAY_URL}/metrics/job/${JOB_NAME}/instance/${INSTANCE}
# HELP backup_duration_seconds Duration of the backup job in seconds
# TYPE backup_duration_seconds gauge
backup_duration_seconds ${duration}
# HELP backup_success Whether the backup succeeded (1) or failed (0)
# TYPE backup_success gauge
backup_success ${backup_success}
EOF
echo "Metrics pushed to Pushgateway."

执行后,Prometheus 中可查询到: backup_duration_seconds{job="daily_backup", instance="server01"} 3 backup_success{job="daily_backup", instance="server01"} 1

5.2 Python 脚本监控数据处理任务
import requests
import time

def push_metrics(job, instance, records_processed, success):
    metrics = f"""# HELP data_records_processed Number of records processed
# TYPE data_records_processed gauge
data_records_processed {records_processed}
# HELP data_job_success Job success status (1 = success, 0 = failure)
# TYPE data_job_success gauge
data_job_success {int(success)}"""

    url = f"http://localhost:9091/metrics/job/{job}/instance/{instance}"
    response = requests.post(url, data=metrics.encode('utf-8'))
    if response.status_code == 202:
        print("Metrics pushed successfully.")
    else:
        print(f"Failed to push metrics: {response.status_code}")

# 模拟任务执行
start = time.time()
try:
    records = 1500
    time.sleep(2)
    success = True
except Exception as e:
    records = 0
    success = False

push_metrics(
    job="data_pipeline",
    instance="worker-node-01",
    records_processed=records,
    success=success
)

执行后,Prometheus 中将生成对应的 data_records_processed 与 data_job_success 指标。

总结

Pushgateway 作为 Prometheus 生态的补充组件,通过'推送 + 中转'机制有效解决了短生命周期任务无法被拉取监控的痛点。在实际应用中,只需合理配置 job 与 instance 标签,即可将 Shell 脚本、Python 批处理等临时作业的执行状态、耗时及业务指标无缝接入 Prometheus 监控体系。配合规范的指标清理策略,可确保监控数据的准确性与时效性。

目录

  1. 前言
  2. 1. 环境准备
  3. 2. Pushgateway 安装配置
  4. 2.1 二进制包安装
  5. 2.2 Docker 安装
  6. 3. Prometheus 配置 Pushgateway
  7. 4. 推送数据到 Pushgateway
  8. 4.1 推送简单指标
  9. 4.2 推送复杂指标(带类型与帮助信息)
  10. TYPE some_metric counter
  11. TYPE another_metric gauge
  12. HELP another_metric Just an example.
  13. 4.3 删除指标
  14. 5. 真实场景应用示例
  15. 5.1 Shell 脚本监控备份任务
  16. HELP backupdurationseconds Duration of the backup job in seconds
  17. TYPE backupdurationseconds gauge
  18. HELP backup_success Whether the backup succeeded (1) or failed (0)
  19. TYPE backup_success gauge
  20. 5.2 Python 脚本监控数据处理任务
  21. TYPE datarecordsprocessed gauge
  22. HELP datajobsuccess Job success status (1 = success, 0 = failure)
  23. TYPE datajobsuccess gauge
  24. 模拟任务执行
  25. 总结

更多推荐文章

查看全部
  • 计算机网络:陆地无线电信道概述
  • 2026 年 Python 发展局势:AI 时代的通用基础设施语言
  • 前端动画库:让你的网站动起来
  • PHPStudy Pro 本地 PHP 环境搭建与使用指南
  • Spring Boot Web 后端开发核心注解详解
  • Qdrant 向量数据库完全指南:从入门到 Spring AI/LangChain4J 集成实践
  • OpenClaw 开源 AI Agent 框架技术解析与实战指南
  • Revit 模型 Web 端轻量化展示与 GLTF 转换实践
  • Python 爬虫实战:使用 Requests 与 Parsel 下载图片
  • Stable Diffusion v1.5 Archive 跨平台效果一致性保障与复现验证
  • FPGA 商用级 ISP:动态坏点校正 DPCC 的滑窗架构与并行判决实现
  • AirSim 无人机仿真入门:实现起飞与降落
  • Python AI 实战:从线性回归到图像分类
  • Spring Boot 数据验证与异常处理
  • 基于自适应卡尔曼滤波器的无人机追踪无人车仿真
  • Oracle 限制单个用户的并发连接数
  • 6 款主流 AI 模型评测:国产 Agent 行业共识与排名
  • 基于 Java 大数据的智能家居能耗预测与节能策略优化实战
  • 基于SpringBoot的流浪动物救助收养系统
  • Stable Diffusion 入门:稳定生成人物脸部与姿势控制技巧

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online