pushgateway 是另一种采用被动推送的方式(而不是 exporter
主动获取)获取监控数据的 prometheus 插件;

它是可以单独运行在任何节点上的插件(并不一定要在被监控客户端),然后通过用户自定义开发脚本 把需要监控的数据发送给pushgateway,然后 pushgateway 再把数据推送给 prometheus server

安装运行

pushgatewayprometheusexporter 一样,下载,解压,直接运行;

1
2
3
/data/pushgateway/pushgateway

/data/pushgateway/pushgateway --web.listen-address 0.0.0.0:9092

配置

关于 pushgateway 的配置 主要指的是在 prometheus sever 端的配置

1
2
3
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091', 'localhost:9092']

prometheus.yml 配置文件中,单独定义一个 job 然后 target 指向到 pushgateway 运行所在的机器名和 pushgateway 运行的端口即可

自定义脚本

示例,使用 shell 编写的 pushgateway 脚本,用于抓取 TCP waiting_connection 瞬时数量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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/ pushgateway1/instance/$instance_name

最后将脚本结合 crontab 来执行;

crontab 默认只能最短一分钟的间隔,如果希望小于一分钟的间隔 15s,使用如下的方法
sleep 10
sleep 20

优缺点

优点:

pushgateway 这种自定义的 采集方式 非常的快速 而且极其灵活 几乎不收到任何约束

缺点:

  1. pushgateway 会形成一个单点瓶颈,假如好多个脚本同时发送给 一个 pushgateway 的进程 如果这个进程没了,那么监控数据也就没了
  2. pushgateway 并不能对发送过来的 脚本采集数据 进行更智能的判断 假如脚本中间采集出问题了,那么有问题的数据 pushgateway 一样照单全收 发送给 prometheus