pushgateway的介绍

被动的数据采集方式,获取监控数据资源的prometheus插件。可以单独运行再任何节点的插件。用户开发自定义脚本把数据发送给pushgateway,pushgateway提供给prometheus服务器。

pushgateway的安装、运行、配置

安装和prometheus和node_exporter一样解压后直接运行pushgateway --web.listen-address 0.0.0.0:9092。
pushgateway的配置主要值得是针对prometheus的配置。
在prometheus.yml配置文件中,单独定义一个job,然后targets执行pushgateway localhost:9092。这里可以开启多个pushgateway,放入到targets数组中。

自定义脚本配合pushgateway

pushgateway本身没有抓取监控数据的功能,只能被动等待数据的推送。下面用一个shell编写的抓取tcp waiting connect 瞬时数量为例:

!/bin/bash

instance_name=hostname -f | cut -d'.' -f1 #本机机器名 变量 用于之后的 标签
if [ instance_name == "localhost" ];then # 要求机器名 不能是 localhost 不然标签就没有区分了
echo "Must FQDN hostname"
exit 1
fi
# For waitting connections
label="count_netstat_wait_connections" # 定一个新的 key count_netstat_wait_connections=netstat -an | grep -i wait | wc -l #定义一个新的数值 netstat中 wait 的数量
echo "label : count_netstat_wait_connections"
echo "label count_netstat_wait_connections" | curl --data- binary @- http://prometheus.server.com:9091/metrics/job/ pushgateway/instance/instance_name

url地址分为几部分:
metrics/:主url
job/pushgateway : 对应的是第一个标签,也就是prometheus定义的job name
instance:第二个标签,即为hostname
这两个标签会自动在最终的数据中添加两个标签:exported_instance,exported_job。
而在prometheus定义的jobname 就是job标签。不过建议instance和job、对应于exported命名的时候,尽量对应起来。

--data-binary post请求的一种,后面的http链接就是pushgateway
如果想一分钟之内发送多分数据到pushgateway,可以在crontab上这样设置

          • sleep 10;sh 脚本.sh
          • sleep 20;sh 脚本.sh
          • sleep 30;sh 脚本.sh
          • sleep 40;sh 脚本.sh

使用pushgateway的优缺点

这种采集方式灵活、巧妙、快速,不受什么约束。各类的exporters虽然很多,但是企业运用中,只需要node 和db的两个exporter即可,其他的建议用pushgateway进行采集。
当然也有客观缺点:

  1. 单点故障
  2. 不能只能的判断采集到的的数据。

pushgateway的使用总结:

pushgateway是一个中转站,将被推送过来的数据存储一份,记录一下数据值、推送的最后一个事件,如果重复推送,pushgateway会覆盖这份数据。至于prometheus server 获取到的metrics是哪一个数据,完全取决于prometheus 到pushgateway拉取数据的时间点。
对于性能问题,只要能保证服务器不宕机,pushgateway运行基本上是稳定的,即使偶尔因为多个连接造成接受速度变慢,但是便不会造成数据丢失。但是exporter往往因为复杂性,会出现各种问题。
对于第二个确定,其实就要靠自己写的脚本以及脚本运行环境了。
prometheus-pushgateway.jpeg

文章目录