环境
主机名 服务器IP 系统 说明
Ubuntu -1 192.168.1.144 Ubuntu.20.04 docker安装Prometheus
docker 192.168.1.140 centos7
1、pushgateway简介
pushgateway是Prometheus生态中一个重要工具,使用他的原因主要是:
- Prometheus采用pull模式,可能由于不在一个子网或者防火墙原因导致Prometheus无法直接拉取各个target数据。
- 在监控业务数据的时候,需要将不同数据汇总,由Prometheus统一收集。
- 当exporter不能满足需要时,也可以通过自定义(python、shell、Java)监控我们想要的数据。
由于以上原因,不得不使用pushgateway,但在使用之前,有必要了解一下它的一些弊端:
- 将多个节点数据汇总到pushgateway,如果pushgateway挂了,受影响比多个target大。
- Prometheus拉取状态up只针对pushgateway,无法做到对每个节点有效。
- pushgateway可以持久化推送给它的所有监控数据。
因此,即使你的监控已经下线,Prometheus还会拉取到旧的监控数据,需要手动清理pushgateway不要的数据。
2、docker方式安装pushgateway
我是在Prometheus服务器端安装的
docker run -d -p 9091:9091 --name pushgateway prom/pushgateway
3、在浏览器查看
访问本机IP加9091端口
4、对Prometheus配置文件进行添加内容
在Prometheus服务器端打开配置文件添加以下配置
vim prometheus/prometheus.yml
- job_name: pushgateway
honor_labels: true #加上此配置exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖。
static_configs:
- targets: ['192.168.1.144:9091']
labels:
instance: pushgateway
5、重新加载配置文件
curl -X POST http://localhost:9090/-/reload
在浏览器访问Prometheus服务器的IP加9090端口然后选择status然后选择targets查看
6、curl方式向pushgateway推送监控数据
使用curl:
正常情况我们会使用Client推送数据到pushgateway但是我们还可以curl调用API来管理,例如:
向{job="some_job"}添加单条数据:
echo "some_metric 3.14" | curl --data-binary @- http://192.168.1.144:9091/metrics/job/some_job
添加更多更复杂数据,通常数据会带上instance(some_instance为instance名)表示来源位置:
cat <<EOF | curl --data-binary @- http://192.168.1.144:9091/metrics/job/some_job/some_job/instance/some_instance
TYPE some_metric counter
some_metric{label="val1"} 42
TYPE another_metric gauge
HELP another_metric just an example.
another_metric 2398.283
EOF
删除某个组下的某实例的所有数据:
curl -X DELETE http://192.168.1.144:9091/metrics/job/some_job/instance/some_instance
删除某个组下的所有数据:
curl -X DELETE http://192.168.1.144:9091/metrics/job/some_job
命令解释: echo "some_metric 3.14" | curl --data-binary @- http://192.168.1.144:9091/metrics/job/some_job
-
echo "some_metric 3.14"
:这部分命令使用echo
命令创建一个包含指标数据的字符串。在这个例子中,指标名称是some_metric
,其值是3.14
。 -
|
:这是一个Linux命令中的管道符号,它将前一个命令的输出作为后一个命令的输入。 -
curl --data-binary @- http://192.168.1.144:9091/metrics/job/some_job
:这部分命令使用curl
命令将数据发送到指定的URL。 -
--data-binary @-
选项告诉curl
命令从标准输入中读取数据,并将其作为二进制数据发送。@-
表示读取标准输入。 -
http://192.168.1.144:9091/metrics/job/some_job
是目标URL,其中包含Prometheus服务器的地址和端口以及要存储指标数据的job名称。
推送完数据后在浏览器刷新可以看的我们推送的数据
7、python方式向pushgateway推送监控数据我在140机器安装配置的
注:可以在Prometheus服务器配置也可以在被监控端配置
安装Prometheus_client模块
安装pip
yum install -y python3-pip #centos安装
apt install -y python3-pip #ubunt安装
通过pip安装Prometheus_client
pip3 install -y prometheus_client
创建一个python脚本加入以下内容
vim py.py
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
registry = CollectorRegistry()
g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
g.set_to_current_time()
push_to_gateway('http://192.168.1.144:9091', job='batchA', registry=registry)
注:如果是本机将http://192.168.1.144:9091改为localhost:9091
加载脚本文件
在浏览器查看
8、监控data数据目录下的文件数量
注:我是配置在140服务器上的centos系统
shell 脚本:
cat >>/opt/file_num.sh<<"EOF"
#!/bin/sh
FILENUM=`ls -l /data |sed 1d| wc -l`
echo "data_file_num ${FILENUM}" | curl --data-binary @- http://192.168.1.144:9091/metrics/job/test_job/instance/test
EOF
解释:
- 使用 ls -l /data 命令列出 /data 目录下的文件信息。
- 使用 sed 1d 命令删除列表中的第一行(即目录总计)。
- 使用 wc -l 命令统计剩余行数,即文件数量。
- 将输出结果与字符串 "data_file_num " 拼接,形成指标 "data_file_num 文件数量"。
- 使用 curl 命令将指标数据发送到 http://192.168.1.144:9091/metrics/job/test_job/instance/test。
配置定时任务:
crontab -e
*/1 * * * * /bin/sh /opt/file_num.sh >/dev/null 2>&1
如果是Ubuntu系统按下面的
9、配置告警规则(在Prometheus端配置)
例如:当data目录下的文件数量超过9,报警出来
因为之前我在Prometheus.yaml文件中加了一个触发器文件
所以在rules文件中添加一个mongodb的触发器文件即可
在Prometheus端创建一个mongodb的yml文件添加输入以下触发器内容
vim pushgateway.yml
groups:
- name: pushigateway
rules:
- alert: DataFileNum
expr: data_file_num > 9
for: 0m
labels:
severity: warning
annotations:
summary: 'data数据目录文件过多'
description: "data数据目录文件数>9,当前数量:{{ $value }}"
10、检查更新
检查配置
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml
重新加载配置
curl -X POST http://localhost:9090/-/reload
在浏览器输入Prometheus端的IP加9090端口选择Alerts查看
11、添加到grafana图形化
进入grafana页面 在左上角选择 Starred 然后在右上角选择New 然后选择New dashboard 会出现下面的页面
完成