资讯动态

Prometheus Pushgateway部署与使用指南

发布时间:2026/10/28 2:32:11 来源:尧图企业网站定制
1. Pushgateway在Prometheus监控体系中的定位Pushgateway是Prometheus生态中一个特殊的中间组件它的存在解决了Prometheus基于Pull的监控模型无法覆盖的几种特殊场景。在标准的Prometheus架构中监控目标通过暴露HTTP端点提供指标数据由Prometheus Server主动抓取Pull模式。但某些情况下这种模式会遇到挑战短生命周期任务批量任务或定时任务运行时间可能短于Prometheus的抓取间隔导致指标未被采集就已消失网络隔离环境监控目标位于NAT后或防火墙策略限制Prometheus Server无法直接访问第三方系统集成需要接收来自外部系统主动推送的指标数据Pushgateway的设计哲学是作为指标数据的缓存层。目标服务将指标主动推送到Pushgateway后这些数据会持久化在内存中等待Prometheus Server按照常规的抓取周期来拉取。需要注意的是Pushgateway并不是为了替代Prometheus的原生Pull模型而是作为特定场景下的补充方案。重要提示滥用Pushgateway会导致监控数据堆积和单点故障。最佳实践是仅将其用于批处理作业等特殊场景常规服务仍应采用标准的exporter模式。2. 安装部署全流程解析2.1 二进制安装方案对于测试环境或快速验证场景二进制安装是最便捷的方式。以下是详细步骤版本选择# 获取最新稳定版示例版本号实际使用时请检查更新 PUSHGATEWAY_VERSION1.6.2 wget https://github.com/prometheus/pushgateway/releases/download/v${PUSHGATEWAY_VERSION}/pushgateway-${PUSHGATEWAY_VERSION}.linux-amd64.tar.gz解压与权限设置tar xvf pushgateway-${PUSHGATEWAY_VERSION}.linux-amd64.tar.gz cd pushgateway-${PUSHGATEWAY_VERSION}.linux-amd64 chmod x pushgateway系统服务配置以systemd为例# /etc/systemd/system/pushgateway.service [Unit] DescriptionPrometheus Pushgateway Afternetwork.target [Service] Userpushgateway Grouppushgateway ExecStart/opt/pushgateway/pushgateway \ --web.listen-address:9091 \ --web.telemetry-path/metrics Restartalways [Install] WantedBymulti-user.target启动与验证sudo systemctl daemon-reload sudo systemctl start pushgateway curl http://localhost:9091/metrics # 验证基础指标2.2 Docker容器化部署对于生产环境推荐使用容器化部署以确保环境一致性docker run -d \ -p 9091:9091 \ --name pushgateway \ --restart always \ -v /etc/localtime:/etc/localtime:ro \ prom/pushgateway:latest \ --web.listen-address:9091 \ --persistence.file/data/pushgateway.dat关键参数说明--persistence.file指定持久化文件路径防止容器重启数据丢失--web.enable-admin-api启用管理API慎用可能带来安全风险--web.enable-lifecycle允许通过HTTP API重新加载配置2.3 Kubernetes部署方案在K8s环境中部署时需要特别注意持久化存储和资源限制apiVersion: apps/v1 kind: Deployment metadata: name: pushgateway spec: replicas: 1 selector: matchLabels: app: pushgateway template: metadata: labels: app: pushgateway spec: containers: - name: pushgateway image: prom/pushgateway:v1.6.2 ports: - containerPort: 9091 resources: limits: memory: 512Mi cpu: 500m volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: pushgateway-pvc --- apiVersion: v1 kind: Service metadata: name: pushgateway spec: selector: app: pushgateway ports: - protocol: TCP port: 9091 targetPort: 90913. 核心使用模式详解3.1 基础指标推送通过HTTP API推送指标是最基础的使用方式支持多种数据格式简单指标推送echo example_metric 3.14 | curl --data-binary - http://pushgateway:9091/metrics/job/some_job带多标签的复杂指标cat EOF | curl --data-binary - http://pushgateway:9091/metrics/job/some_job/instance/some_instance # TYPE example_metric counter example_metric{environmentprod,regioneast} 42 # HELP another_metric Just an example another_metric 7 EOF3.2 批处理任务集成对于批处理任务推荐在任务开始和结束时分别推送指标import requests from datetime import datetime job_name nightly_report instance fworker-{os.getpid()} def push_metrics(metric_name, value, type_strgauge): payload f # TYPE {metric_name} {type_str} {metric_name} {value} requests.post( fhttp://pushgateway:9091/metrics/job/{job_name}/instance/{instance}, datapayload ) # 任务开始时记录 push_metrics(job_start_timestamp, datetime.now().timestamp()) try: # 执行任务... # 任务成功时记录 push_metrics(job_status, 1) push_metrics(job_duration_seconds, 120.5) except Exception as e: # 任务失败时记录 push_metrics(job_status, 0) push_metrics(job_error_count, 1) finally: # 确保最终状态被记录 push_metrics(job_end_timestamp, datetime.now().timestamp())3.3 指标生命周期管理Pushgateway中的指标不会自动过期需要特别注意手动删除指标# 删除特定job的所有指标 curl -X DELETE http://pushgateway:9091/metrics/job/some_job # 删除特定jobinstance的指标 curl -X DELETE http://pushgateway:9091/metrics/job/some_job/instance/some_instance自动过期方案 可以通过在推送指标时添加push_time_seconds指标然后在Prometheus中配置告警规则检测长时间未更新的指标(time() - pushgateway_push_time_seconds{jobsome_job}) 36004. 生产环境最佳实践4.1 安全防护配置Pushgateway默认没有认证机制生产环境必须加强安全基础认证 启动时添加认证参数--web.config.file/etc/pushgateway/web.ymlweb.yml配置示例basic_auth_users: admin: $2y$12$h4H9... # bcrypt加密的密码网络隔离通过防火墙限制只允许特定IP段访问Pushgateway在K8s中使用NetworkPolicy限制Pod访问4.2 性能优化建议指标分组将相关指标合并到同一个请求中推送减少HTTP请求数批量提交对于高频指标先在应用端缓存定时批量推送内存限制监控pushgateway_metrics_count指标防止内存溢出4.3 Prometheus集成配置在Prometheus的配置文件中添加Pushgateway抓取目标scrape_configs: - job_name: pushgateway honor_labels: true # 保留Pushgateway推送的原始标签 static_configs: - targets: [pushgateway:9091]关键参数说明honor_labels: true确保原始job名称不被覆盖metrics_path: /metrics默认值通常不需要修改5. 常见问题排查指南5.1 指标未出现在Prometheus中检查步骤直接访问Pushgateway的/metrics端点确认指标是否存在检查Prometheus的target页面确认Pushgateway的target状态为UP验证Prometheus配置中honor_labels是否设置为true检查指标时间戳是否过于陈旧Prometheus默认会丢弃5分钟前的数据5.2 内存占用过高解决方案设置定期清理旧指标的脚本# 清理24小时前的指标 find /data -name *.tmp -mtime 1 -delete限制指标保留时间--persistence.interval15m # 持久化间隔监控并告警process_resident_memory_bytes指标5.3 推送性能下降优化建议增加Pushgateway实例数使用负载均衡调整Go运行时参数--web.max-connections50 \ --web.read-timeout30s \ --web.write-timeout30s客户端实现退避重试机制6. 高级应用场景6.1 多租户隔离方案通过URL路径实现简单的多租户隔离/metrics/job/{job_name}/tenant/{tenant_id}然后在Prometheus中使用relabel_config进行过滤relabel_configs: - source_labels: [__meta_tenant] regex: tenant1.* action: keep6.2 指标预处理在Pushgateway前部署Nginx实现简单的指标过滤location /metrics/job/important_job { proxy_pass http://pushgateway:9091; # 只允许来自特定IP的请求 allow 10.0.0.0/8; deny all; }6.3 长期存储集成通过Remote Write将Pushgateway指标同步到长期存储remote_write: - url: http://thanos:10908/api/v1/receive queue_config: capacity: 10000 max_shards: 50 write_relabel_configs: - source_labels: [__name__] regex: important_.* action: keep

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑