prometheus学习笔记之PushGateway
一、pushgateway 简介
pushgateway 是采用被动推送的方式,而不是类似于 prometheus server 主动连接 exporter 获取监控数据。
pushgateway 可以单独运行在一个节点, 然后需要自定义监控脚本把需要监控的主动推送给 pushgateway的 API 接口, 然后 pushgateway 再等待 prometheus server 抓取数据, 即 pushgateway 本身没有任何抓
取监控数据的功能, 目前 pushgateway 只是被动的等待数据从客户端推送过来。
#常用选项
--persistence.file="" #数据保存的文件, 默认只保存在内存中
--persistence.interval=5m #数据持久化的间隔时间
二、部署 pushgateway
二进制、容器、k8s都可以部署,这里为了方便直接使用二进制部署
wget https://github.com/prometheus/pushgateway/releases/download/v1.6.0/pushgateway-1.6.0.linux-amd64.tar.gz
tar xf pushgateway-1.6.0.linux-amd64.tar.gz
mv pushgateway-1.6.0.linux-amd64 /usr/local/pushgateway
cd /usr/local/pushgateway
./pushgateway -h
nohup ./pushgateway & #没有配置文件,主要通过命令行传参
netstat -tnlp #默认监控9091端口
三、配置prometheus抓取pushgateway
vim prometheus.yml
- job_name: "pushgateway-monitor-metrics"
static_configs:
- targets: ["192.168.100.133:9091"] #pushgateway 地址和端口
honor_labels: true #保留源标签
curl -X POST http://127.0.0.1:9090/-/reload
四、客户端手动推送数据
1.推送单条数据
要 Push 数据到 PushGateway 中, 可以通过其提供的 API 标准接口来添加, 默认 URL 地址为:
http://<ip>:9091/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>},
其中<JOBNAME>是必填项, 为 job 标签值, 后边可以跟任意数量的标签对, 一般我们会添加一个 instance/<INSTANCE_NAME>实例名称标签, 来方便区分各个指标。
#推送一个 job 名称为 mytest_job, key 为 mytest_metric 值为 2024
echo "mytest_metric 2024" | curl --data-binary @- http://192.168.100.133:9091/metrics/job/mytest_job
访问pushgateway
mytest_metric 命令行创建的job名称,实际通prometheus中的job一样
push_time_seconds 自动生成,记录指标数据的失败上传时间
push_failure_time_seconds 自动生成,记录指标数据的成功上传时间
prometheus验证数据
可以看到已经成功抓取到了
2.推送多条数据
cat <<EOF | curl --data-binary @- http://192.168.100.133:9091/metrics/job/test_job/instance/172.31.0.100
#TYPE node_memory_usage gauge
node_memory_usage 4311744512
# TYPE memory_total gauge
node_memory_total 103481868288
EOF
查看pushgateway的metric
prometheus查看写入的数据
3.简易推送数据脚本样例
# cat mem_monitor.sh
#!/bin/bash
total_memory=$(free |awk '/Mem/{print $2}')
used_memory=$(free |awk '/Mem/{print $3}')
job_name="custom_memory_monitor"
instance_name=`ifconfig eth0 | grep -w inet | awk '{print $2}'`
pushgateway_server="http://172.30.7.111:9091/metrics/job"
cat <<EOF | curl --data-binary @- ${pushgateway_server}/${job_name}/instance/${instance_name} #可以写多个标签,格式为 key/value,如果新增一个zone标签,可以写成为 /instance/${instance_name}/zone/ShangHai ,后面可以一直加
#TYPE custom_memory_total gauge
custom_memory_total $total_memory
#TYPE custom_memory_used gauge
custom_memory_used $used_memory
EOF
五、删除数据
1.命令行
#根据job及标签删除对应的数据
curl -X DELETE http://192.168.100.133:9091/metrics/job/test_job/instance/172.31.0.100
2.web界面
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少