Prometheus 使用 PushGateway 进行数据上报
简介
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
docker pull prom/pushgateway
docker run -d --name pushgateway -p 9091:9091 --restart=always prom/pushgateway
2、访问9091端口(http://pushgatewayIP:9091)
pushgateway.png
3、在prometheus中添加pushgateway节点
打开prometheus的配置文件
- job_name: 'pushgateway'
static_configs:
- targets: ['pushgatewayIP:9091']
labels:
instance: pushgateway
honor_labels: true
作用:如果没有设置instance标签,Prometheus服务器也会附加标签,否则instance标签值会为空
重启prometheus后,登陆web UI,查看prometheus的targets
image.png
4、API 方式 Push 数据到 PushGateway
接下来,我们要 Push 数据到 PushGateway 中,可以通过其提供的 API 标准接口来添加,默认 URL 地址为:http://<ip>:9091/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>},其中 <JOBNAME> 是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/<INSTANCE_NAME> 实例名称标签,来方便区分各个指标。
#!/bin/bash
allname=`docker ps --format "{{.Names}}"`
function dockerrunning(){
containerName=$1
exist=`docker inspect --format '{{.State.Status}}' ${containerName}`
if [ "${exist}" != "running" ]; then
echo 0
else
echo 1
fi
}
echo "# TYPE dockerrunning counter" > a
for i in ${allname}
do
t=`dockerrunning $i`
echo "dockerrunning{name=\"$i\"} $t" >> a
done
curl --data-binary "@a" http://192.168.11.120:9091/metrics/job/docker/instance/dockerrunning
rm a
image.png
image.png
image.png
image.png