Prometheus 使用 PushGateway 进行数据上报采集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus 使用 PushGateway 进行数据上报采集相关的知识,希望对你有一定的参考价值。
参考技术A Pushgateway是prometheus的一个重要组件,利用该组件可以实现自动以监控指标,从字面意思来看,该部件不是将数据push到prometheus,而是作为一个中间组件收集外部push来的数据指标,prometheus会定时从pushgateway上pull数据。【注意】如果client一直没有推送新的指标到pushgateway,那么Prometheus获取到的数据是client最后一次push的数据,直到指标消失(默认5分钟)。
Prometheus本身是不会存储指标的,但是为了防止pushgateway意外重启、工作异常等情况的发送,在pushgateway处允许指标暂存,参数--persistence.interval=5m,默认保存5分钟,5分钟后,本地存储的指标会删除。
使用pushgateway的理由:
1、prometheus默认采用pull模式,由于不在一个网络或者防火墙的问题,导致prometheus 无法拉取各个节点的数据。
2、监控业务数据时,需要将不同数据汇总,然后由prometheus统一收集
pushgateway的缺陷:
1、多个节点的数据汇总到pushgateway,当它宕机后影响很大
2、pushgateway可以持续化推送所有的监控数据,即使监控已经下线,还会获取旧的监控数据。需手动清理不需要的数据
3、重启后数据丢失
1、docker 启动pushgateway
2、访问9091端口( http://pushgatewayIP:9091 )
3、在prometheus中添加pushgateway节点
打开prometheus的配置文件
作用:如果没有设置instance标签,Prometheus服务器也会附加标签,否则instance标签值会为空
重启prometheus后,登陆web UI,查看prometheus的targets
4、API 方式 Push 数据到 PushGateway
接下来,我们要 Push 数据到 PushGateway 中,可以通过其提供的 API 标准接口来添加,默认 URL 地址为:http://<ip>:9091/metrics/job/<JOBNAME>/<LABEL_NAME>/<LABEL_VALUE>,其中 <JOBNAME> 是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/<INSTANCE_NAME> 实例名称标签,来方便区分各个指标。
Prometheus监控运维实战十一:Pushgateway
一. Pushgateway简介
Pushgateway为Prometheus整体监控方案的功能组件之一,并做于一个独立的工具存在。它主要用于Prometheus无法直接拿到监控指标的场景,如监控源位于防火墙之后,Prometheus无法穿透防火墙;目标服务没有可抓取监控数据的端点等多种情况。
在类似场景中,可通过部署Pushgateway的方式解决问题。当部署该组件后,监控源通过主动发送监控数据到Pushgateway,再由Prometheus定时获取信息,实现资源的状态监控。
工作流程:
a. 监控源通过Post方式,发送数据到Pushgateway,路径为/metrics。
b. Prometheus服务端设置任务,定时获取Pushgateway上面的监控指标。
c. Prometheus拿到监控指标后,根据配置的告警规则,如果匹配将触发告警到Alertmanager;同时,Grafana可配置数据源调用Prometheus数据,做为数据展示。
d. Alertmanager收到告警后,根据规则转发到对应接收人及接收介质;Grafana方面,用户可登录并根据数据源的监控指标,配置相关的图表展示 。
二. 安装部署
1、二进制安装
下载安装包
$ wget https://github.com/prometheus/pushgateway/releases/download/v1.4.1/pushgateway-1.4.1.linux-amd64.tar.gz
解压并安装
$ tar -xvf pushgateway-1.4.1.linux-amd64.tar.gz
$ cd pushgateway-1.4.1.linux-amd64
$ sudo cp pushgateway /usr/local/bin/
查看版本号验证是否正常
$ pushgateway --version
pushgateway, version 1.4.1 (branch: HEAD, revision: 6fa509bbf4f082ab8455057aafbb5403bd6e37a5)
build user: root@da864be5f3f0
build date: 20210528-14:30:10
go version: go1.16.4
platform: linux/amd64
启动服务,默认端口为9091,可通过--web.listen-address更改监听端口
pushgateway &
2、docker安装
$ docker pull prom/pushgateway
$ docker run -d --name=pushgateway -p 9091:9091 prom/pushgateway
部署完成后,在浏览器输入 http://$IP:9091 即可看到程序界面
三. 数据推送Pushgateway
pushgateway的数据推送支持两种方式,Prometheus Client SDK推送和API推送。
1、Client SDK推送
Prometheus本身提供了支持多种语言的SDK,可通过SDK的方式,生成相关的数据,并推送到pushgateway,这也是官方推荐的方案。目前的SDK覆盖语言有官方的
- Go
- Java or Scala
- Python
- Ruby
也有许多第三方的,详情可参见此链接:https://prometheus.io/docs/instrumenting/clientlibs/
示例:
本示例以python为例,讲解SDK的使用
from prometheus_client import Counter,Gauge,push_to_gateway
from prometheus_client.core import CollectorRegistry
registry = CollectorRegistry()
data1 = Gauge(\'gauge_test_metric\',\'This is a gauge-test-metric\',[\'method\',\'path\',\'instance\'],registry=registry)
data1.labels(method=\'get\',path=\'/aaa\',instance=\'instance1\').inc(3)
push_to_gateway(\'10.12.61.3:9091\', job=\'alex-job\',registry=registry)
注解:
第一、二行代码:引入相关的Prometheus SDK;
第五行代码:创建相关的指标,类型为Gauge。其中“gauge_test_metric”为指标名称,\'This is a gauge-test-metric\'为指标注释,[\'method\',\'path\',\'instance\'] 为指标相关的label。
第六行代码:添加相关的label信息和指标value 值。
第六行代码:push数据到pushgateway,\'10.12.61.3:9091\'为发送地址,job指定该任务名称。
以上代码产生的指标数据等同如下 :
# HELP gauge_test_metric This is a gauge-test-metric
# TYPE gauge_test_metric gauge
gauge_test_metric{instance="instance1",method="get",path="/aaa"} 3.0
2、 API推送
通过调用pushgateway API的方式实现数据的推送。
请求格式:
/metrics/job/<jobname>{/instance/instance_name}
<jobname>将用作Job标签的值,然后是其他指定的标签。
示例:
本例中定义了两个标签 job=alex-job和instance=instance1,并推送了指标 http_request_total 及其value值,10.12.61.1 为pushgateway地址。
echo \'http_request_total 12\' | http://10.12.61.3:9091/metrics/job/alex-job/instance/instance1
复杂数据发送:
$ cat <<EOF | curl --data-binary @- http://10.12.61.3:9091/metrics/job/alex-job/instance/10.2.10.1
# TYPE http_request_total counter
http_request_total{code="200",path="/aaa"} 46
http_request_total{code="200",path="/bbb"} 15
EOF
数据推送完成后,可登录pushgateay地址查看指标情况
假如需要删除pushgateway上面存储的指标信息,可通过如下方式操作:
删除某个组下某个实例的所有数据
curl -X DELETE http://10.12.61.3:9091/metrics/job/alex-job/instance/10.2.10.1
删除某个job下所有的数据
curl -X DELETE http://10.12.61.3:9091/metrics/job/alex-job
四. prometheus抓取数据
Pushgateway只是指标的临时存放点,最终我们需要通过Prometheus将其存放到时间序列数据库里。对此,我们需要在Prometheus上面创建一个job
- job_name: \'pushgateway\'
honor_labels: true
static_configs:
- targets:
- \'10.12.61.3:9091\'
目标任务正常启动后,可在prometheus查看到相关的指标数据
五. 注意事项
- 通过Pushgateway方式,Prometheus无法直接检测到监控源服务的状态,故此种方式不适用于监控服务的存活状态等场景。
- Pushgateway属于静态代理,它接收的指标不存在过期时间,故会一直保留直到该指标被更新或删除。此种情况下,不再使用的指标可能存在于网关中。
- 如上所言,Pushgateway并不算是完美的解决方案,在监控中更多做为辅助方案存在,用于解决Prometheus无法直接获取数据的场景。
以上是关于Prometheus 使用 PushGateway 进行数据上报采集的主要内容,如果未能解决你的问题,请参考以下文章
6.prometheus数据上报方式-pushgateway