一般Prometheus监控系统告警都使用Alertmanager来进行告警的发送和管理,但Alertmanager自带对接到企业微信的告警发送需要管理员权限等,配置起来相对麻烦。这里就使用开源工具alertmanager-wechatrobot-webhook来接收Alertmanager的告警信息,并将其发送到企业微信群机器人

这里仅说明怎么将告警消息发送到企业微信群机器人,不再赘述Prometheus监控系统如何安装(默认已经安装好Prometheus跟Alertmanager)。

1.创建企业微信群机器人

在企业微信群,点击右上角的“...”,然后添加群机器人 1.png

添加新机器人 image.png 输入机器人名称,点击添加 image.png 复制生成的key,留作后面使用 image.png

2.安装alertmanager-wechatrobot-webhook

拉取docker镜像

docker pull huguoyong/alertmanager_wechatrobot_webhook:v1.0

启动alertmanager-wechatrobot-webhook服务

docker run --restart always --name alertmanager_wechatrobot_webhook -p 8999:8999 -d huguoyong/alertmanager_wechatrobot_webhook:v1.0

3.修改Alertmanager告警配置文件

编辑Alertmanager配置文件

vim alertmanager.yaml

定义告警接收器(receivers块),按照格式:

​​http://xxx.xxx.xxx.xxx:8999/webhook?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx​​

添加你的机器人信息,IP填刚部署的alertmanager-wechatrobot-webhook的连接地址,key用上面创建的机器人key image.png 然后在告警路由(route)添加默认路由: image.png 然后重启Alertmanager服务即可

4.修改Prometheus告警规则 这里展示一个采集器无法连接的告警规则:

groups:
- name: 采集器状态监控
  rules:
  - alert: 采集器状态
    expr: 'avg_over_time(up[5m]) == 0'
    for: 1m
    labels:
      alter_interval_time: "4h"
      severity: "灾难"
    annotations:
      summary: "{{$labels.instance}}:采集器不可用"
      description: |-
        告警描述:采集器存活检测超时5分钟
        检测值:{{ $value }}
        处理措施:1.手动验证采集器部署的服务器状态;2.查看该采集器状态

其中,必须配置的参数有“severity”、“summary”和“description”。 severity:表示告警级别;

summary:表示告警主题;

description:表示告警描述,其中告警描述可以根据需求自定义。

然后重启Prometheus,使配置文件生效。或者使用api进行热加载

curl -X POST 127.0.0.1:9999/-/reload

5.测试告警是否成功发送到企业微信群机器人

主动停止一个exporter采集器,看告警是否发送到企业微信群机器人 如图:告警成功发送 image.png 重新启动exporter采集器,看告警是否恢复: 如图:告警已恢复 image.png

6.自定义展示

上面展示的是采集器exporter采集器无法连接的告警,现在定义一个磁盘空间不足的告警: 告警配置文件:

groups:
- name: node_disk
  rules:
  - alert: disk_low_avail
    # 可用磁盘空间少于10% 并且少于10GB才正式告警通知
    expr: '(node_filesystem_avail_bytes / node_filesystem_size_bytes)*100 < 10 and node_filesystem_avail_bytes < 50*1024*1024*1024'
    # 可选的 for选项使 Prometheus 在第一次遇到新的表达式输出向量元素和将警报计数为触发该元素之间等待一定的时间。
    for: 1m
    labels:
      severity: "严重"
    annotations:
      summary: "主机的可用磁盘低于设定阈值"
      description: |-
        告警描述:可用磁盘空间少于10%,并且少于10GB
        剩余:{{ $value }}%
        挂载目录:{{$labels.mountpoint}}

触发的告警消息: image.png 恢复告警消息: image.png