Prometheus之Pushgateway使用

Pushgateway属于整个架构图的这一部分

The Pushgateway is an intermediary service which allows you to push metrics from jobs which cannot be scraped. The Prometheus Pushgateway exists to allow ephemeral and batch jobs to expose their metrics to Prometheus. Since these kinds of jobs may not exist long enough to be scraped, they can instead push their metrics to a Pushgateway. The Pushgateway then exposes these metrics to Prometheus.

官方解释,Pushgateway是一个"中间人"服务,你可以把短期job的metrics push到Pushgateway,然后Prometheus从Pushgateway那里pull。

想象一下,如果没有Pushgateway,你为了监控short-lived jobs,就得把它们放到Prometheus的targets中,这样target越来越多,而且因为它是短期作业,这个target将长时间处于down的状态,这样确实不太优雅。

短期作业最好是 service-level(不包含特定的机器或实例标签)而不是 machine-level,以便将特定机器或实例的生命周期与推送的指标脱钩。

Pushgateway的另一个应用场景是,在网络不通的环境下充当一个中间人。比如因为网络原因,Prometheus不能直接从被监控对象pull数据,但是可以从Pushgateway那里pull,并且Pushgateway和被监控对象之间网络也是通的。这个场景虽然理论上可行,但是,官方更推荐使用PushProx( which allows Prometheus to traverse a firewall or NAT)

安装使用

到github https://github.com/prometheus/pushgateway 的release下载二进制包,解压后直接运行,默认端口是 9091

修改Prometheus配置文件,将Pushgateway添加为target,然后启动Prometheus

yaml 复制代码
scrape_configs:
  - job_name: "pushgateway"
    static_configs:
      - targets: ["ip:9091"]

可通过向Pushgateway发put 或 post 请求进行数据推送。例:

shell 复制代码
echo "some_metric 3.14" | curl --data-binary @- http://pushgateway_ip:9091/metrics/job/some_job

去Prometheus就能查到刚刚推送的数据:

需要说明的是,因为Pushgateway是作为一个target写在Prometheus配置文件中的,所以Prometheus自动加了job="pushgateway"**instance**="192.168.243.99:9091"的标签,而自己加的job=some_job标签,因为和默认标签重名,被重命名成了exported_job。要想自定义的标签覆盖默认标签的修改Prometheus配置文件,增加honor_labels: true :

yaml 复制代码
scrape_configs:
  - job_name: "pushgateway"
    honor_labels: true
    static_configs:
      - targets: ["ip:9091"]

将数据清空,再次向Pushgateway推送数据,查看发现自定义标签已经覆盖了默认标签:

使用Pushgateway需要注意的是:向Pushgateway推送的数据,Pushgateway会一直保存着,下次Prometheus来pull数据时,Pushgateway又会把之前保存的数据交给Prometheus(见上图,查5分钟内的数据,尽管我只向Pushgateway推了一次数据),除非手动调用删除接口:curl -X DELETE http://127.0.0.1:9091/metrics/job/some_job

原文:The Pushgateway never forgets series pushed to it and will expose them to Prometheus forever unless those series are manually deleted via the Pushgateway's API

Prometheus还支持多种语言的客户端(如java/go/python 等)向Pushgateway推送数据,可参考官方文档各语言的示例

更多详细文档,参考github Pushgateway

相关推荐
凤山老林2 天前
可观测性落地:Spring Boot 3.x + Actuator + Prometheus + Grafana 监控体系搭建
spring boot·grafana·prometheus
企鹅郁金香4 天前
部署搭建 Prometheus 和 Grafana教程
eureka·grafana·prometheus
云边有个稻草人4 天前
Ubuntu部署Prometheus与Alertmanager:服务接入和远程监控
数据库·ubuntu·prometheus
雨辰AI6 天前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
lee_curry6 天前
RuoYi Cloud:Gateway、Auth、System 接入 Prometheus JVM 监控,并练习多副本、滚动升级和故障恢复
jvm·gateway·prometheus
晨陌y7 天前
redis_exporter + Prometheus监控Redis: 指标采集、告警与远程抓取
redis·bootstrap·prometheus
lee_curry11 天前
kube-prometheus-stack 87.21.0 部署
prometheus
扶疏52512 天前
Prometheus+Prometheus Adapter+metrics-server+Ingress实现k8s水平自动扩缩容(HPA)
容器·kubernetes·prometheus
奔跑中的小象12 天前
UOS V2500 沐曦mx-exporter监控加速卡(非K8S)
grafana·prometheus·uos·vllm·沐曦
Wang's Blog13 天前
Go-Zero 项目开发45: Prometheus + Grafana 安装部署与服务监控实战
golang·grafana·prometheus