Push Gateway:短期存储指标数据。主要用于临时性的任务,各个目标主机可以上报数据到pushgateway,,然后prometheus server统一从pushgateway拉取数据
1.Pushgateway简介
Pushgateway是prometheus的一个组件,prometheus server默认是通过exporter主动获取数据(默认采取pull拉取数据),pushgateway则是通过被动方式推送数据到prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给pushgateway, 然后pushgateway再把数据发送给Prometheus server
总结就是pushgateway是普罗米修斯的一个组件,是通过被动的方式将数据上传至普罗米修斯。这个可以解决不在一个网段的问题。
2.Pushgateway优点
- Prometheus 默认采用定时pull 模式拉取targets数据,但是如果不在一个子网或者防火墙,prometheus就拉取不到targets数据(普罗米修斯和target不在一个网段,那么是拉取不到的),所以可以采用各个target往pushgateway上push数据,然后prometheus去pushgateway上定时pull数据
- 在监控业务数据的时候,需要将不同数据汇总, 汇总之后的数据可以由pushgateway统一收集,然后由 Prometheus 统一拉取。
解决不在同一网段的问题,pushgateway就相当于一个中间网关。相当于pushgateway要和target可以通同时和普罗米修斯也可以通。
3.pushgateway缺点
- Prometheus拉取状态只针对 pushgateway, 不能对每个节点都有效;
- Pushgateway出现问题,整个采集到的数据都会出现问题
- 监控下线,prometheus还会拉取到旧的监控数据,需要手动清理 pushgateway不要的数据。
4.安装pushgateway,在k8s-node节点操作
在k8s-node节点操作
docker pull prom/pushgatewaydocker run -d --name pushgateway -p 9091:9091 prom/pushgateway
在浏览器访问node ip :9091出现如下ui界面
5.修改prometheus-cfg.yaml文件,在k8s-master节点操作
添加如下job
- job_name: 'pushgateway'scrape_interval: 5sstatic_configs:- targets: ['192.168.100.6:9091']honor_labels: true
6.推送指定的数据格式到pushgateway
现在普罗米修斯还采集不到任何和pushgateway相关的数据,因为我们需要将数据上报到pushgateway,普罗米修斯才可以采集到,所以现在需要将数据推送到pushgateway。
metric指标名 3.6指标值 test_job这个是job的名字 这些都是固定的格式
[root@node1 ~]# echo " metric 3.6" | curl --data-binary @- http://192.168.100.6:9091/metrics/job/test_job
注:--data-binary 表示发送二进制数据,注意:它是使用POST方式发送的!
添加复杂数据
[root@node1 ~]# cat <<EOF | curl --data-binary @- http://192.168.100.6:9091/metrics/job/test_job/instance/test_instance
> #TYPE node_memory_usage gauge
> node_memory_usage 36
> # TYPE memory_total gauge
> node_memory_total 36000
> EOF
删除某个组下某个实例的所有数据
curl -X DELETE http://192.168.124.26:9091/metrics/job/test_job/instance/test_instance
删除某个组下的所有数据:
curl -X DELETE http://192.168.124.26:9091/metrics/job/test_job
6.把数据上报到pushgateway
在被监控服务所在的机器配置数据上报,这个脚本是采集内存信息的
[root@node1 ~]# cat push.sh
node_memory_usages=$(free -m | grep Mem | awk '{print $3/$2*100}')
job_name="memory"
instance_name="192.168.100.6"cat <<EOF | curl --data-binary @- http://192.168.100.6:9091/metrics/job/$job_name/instance/$instance_name
#TYPE node_memory_usages gauge
node_memory_usages $node_memory_usages
EOF
打开pushgateway web ui界面,可看到如下:
打开prometheus ui界面,可看到如下memory_usage的metrics指标
设置计划任务,每分钟定时上报数据
crontab -e*/1 * * * * /root/push.sh
注意:从上面配置可以看到,我们上传到pushgateway中的数据有job也有instance,而prometheus配置pushgateway这个job_name中也有job和instance,这个job和instance是指pushgateway实例本身,添加 honor_labels: true 参数, 可以避免promethues的targets列表中的job_name是pushgateway的 job 、instance 和上报到pushgateway数据的job和instance冲突。