Pushgateway是一个独立服务,它在HTTP REST API上接收Prometheus指标。 Pushgateway位于发送指标的应用程序和Prometheus服务器之间。Pushgateway接收指标,然后作为目标被抓取,以将指标提供给Prometheus服务器。
Pushgateway本质上是一种用于监控Prometheus服务器无法抓取的资源的解决方案,使用Pushgateway采集指标是一种非常快速且灵活的方式,我们只需要编写脚本py/shell,即可将自定义的指标推送到普罗米修斯。且在工作中这种方式其实可以满足我们的大部分要求。

  1. 首先用docker compose部署一个alertmanager:
version: '3'
services:
  pushgateway:
    image: prom/pushgateway
    container_name: pushgateway
    hostname: pushgateway
    restart: always
    ports:
      - 9091:9091
    command:
      - '--persistence.file="/data/pushgateway_persist"'
    volumes:
      - ./data:/data/pushgateway_persist
  1. 采集并推送的shell脚本:
    此脚本是通过netstat命令来筛选到wait状态连接这个指标
#!/bin/bash

instance_name=`hostname -f | cut -d'.' -f1`
#本机机器名变量于之后的标签

if [ $instance_name == "localhost" ];then
#要求机器名不能是localhost不然标签就没有区分了 
echo "Must FQDN hostname"
exit 1
fi

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://localhost:9091/metrics/job/pushgateway/instance/$instance_name
#这一条是简化不指定指标TYPE,pushgateway是自定义的job名

cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/pushgateway/instance/$instance_name
# HELP $label num of netstat wait.
# TYPE $label gauge
$label $count_netstat_wait_connections
EOF

#指标的TYPE以及帮助信息写在指标之上,构建好一起发送给api
  1. 然后我们可以通过crontab的方式把脚本做成定时任务自动获取指标:
    crontab要实现一分钟以内的执行间隔可以通过sleep命令
* * * * * root sleep 10;/bin/bash /usr/local/pushgateway/netstat_wait.sh