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
scrape_configs:
- job_name: "pushgateway"
static_configs:
- targets: ["ip:9091"]
可通过向Pushgateway发put 或 post 请求进行数据推送。例:
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
:
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