Pushgateway是一个独立服务,它在HTTP REST API上接收Prometheus指标。 Pushgateway位于发送指标的应用程序和Prometheus服务器之间。Pushgateway接收指标,然后作为目标被抓取,以将指标提供给Prometheus服务器。
Pushgateway本质上是一种用于监控Prometheus服务器无法抓取的资源的解决方案,使用Pushgateway采集指标是一种非常快速且灵活的方式,我们只需要编写脚本py/shell,即可将自定义的指标推送到普罗米修斯。且在工作中这种方式其实可以满足我们的大部分要求。
- 首先用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
- 采集并推送的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
- 然后我们可以通过crontab的方式把脚本做成定时任务自动获取指标:
crontab要实现一分钟以内的执行间隔可以通过sleep命令
* * * * * root sleep 10;/bin/bash /usr/local/pushgateway/netstat_wait.sh