通过pushgateway 推送的一批机器的nodeexporter,怎么判断这批机器是否有宕机的,已解决

上回说到,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。
但是这样并不符合我们监控的预期,尤其是对于pushgateway获取的机器如果宕机的话,就会收不到告警,本文针对此问题做一个处理

给node-exporter增加一个告警项,unix时间戳,这里采用node-exporter的文件扩展方式,详情参考:
https://www.cnblogs.com/jasmine456/p/18305866
这里不再赘述,
node-exporter --collector.textfile.directory=/host/data/exporter/key/

1. 定义unix时间戳监控项,test_pwd_node_exporter_up

cat /opt/workerdir/node_exporter/key/test_runner

#!/bin/bash

echo test_pwd_node_exporter_up `date +%s`

2. 定义一个定时任务,每分钟执行一次

echo "* * * * * /bin/bash /opt/workerdir/node_exporter/key/test_runner > /opt/workerdir/node_exporter/key/test.prom" >> /var/spool/cron/crontabs/root

3. 查询node-exporter是否拿到该数据

curl -s 127.0.0.1:9100/metrics| grep test

node_textfile_mtime_seconds{file="/host/opt/workerdir/node_exporter/key/test.prom"} 1.721370181e+09
# HELP test_pwd_node_exporter_up Metric read from /host/opt/workerdir/node_exporter/key/test.prom
# TYPE test_pwd_node_exporter_up untyped
test_pwd_node_exporter_up 1.721370181e+09

确定拿到之后,可以去prometheus去验证下,

4. 再rule配置告警rule文件

表达式:
time() - test_pwd_node_exporter_up > 300 or up ==0
获取到时间戳大于5min,告警或者 prometheus自定义的up函数 为0,告警

groups:
- name: 实例存活报警
  rules:
  - alert: 服务器宕机报警
    #    expr: up == 0
    expr: time() - test_pwd_node_exporter_up > 300 or up ==0 
    for: 1m
    labels:
      severity: emergency
      level: critical 
    annotations:
      # description: '服务器 {{ $labels.instance }}宕机'
      summary: "Node {{ $labels.instance }} down"
      description: "Node {{ $labels.instance }} has been down for more than 5 minutes."

5. 重载prometheus配置

curl -X POST http://10.20.6.115:9090/-/reload

收到告警,至此解决了pushgateway 推送后端的nodeexporter,不能监控宕机的问题。
之前一直在纠结不能使用up函数,官方其实也知道这个问题,但是搜了一圈没有好的解决方案,
官方讨论链接:https://github.com/prometheus/pushgateway/discussions/543
有兴趣的小伙伴可以参与讨论下

posted @ 2024-07-19 14:29  jasmine456  阅读(6)  评论(0编辑  收藏  举报