首页 > 其他分享 >prometheus+alertmanager告警消息对接企业微信、飞书、钉钉

prometheus+alertmanager告警消息对接企业微信、飞书、钉钉

时间:2024-01-30 23:23:09浏览次数:28  
标签:alertmanager 微信 配置 redis webhook prometheus 告警

前言

  很多公司都在使用prometheus作为监控,并使用alertmanager发送告警消息,然而有的公司内部通讯软件使用的是企业微信,或者是飞书,或者是钉钉,那么如何让监控告警消息发送到这些通讯软件呢。
  本文主要通过讲解自己开发的工具alertmanager-webhook来实现该功能,该工具已经支持目前主流的通讯软件。同时本工具不仅仅支持接收alertmanager告警消息,也支持接收自研告警平台发送的消息,只需先将告警消息转换成类似alertmanager的json格式即可。

1. 实现思路

  我们知道alertmanager支持直接对接webhook,所以我们只要将alertmanager的告警消息解析成企业微信、飞书、钉钉能够识别的消息,那么再通过官方的api接口就可以发送告警消息了。
alertmanager消息示例

"alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "机器宕机监测",
        "instance": "10.180.48.2",
        "job": "node_exporter",
        "serverity": "warning"
      },
      "annotations": {
        "description": "机器:10.180.48.2 所属 job:node_exporter 宕机超过1分钟,请检查!",
        "summary": "机器发生宕机"
      },
      "startsAt": "2023-10-11T11:59:09.775Z",
      "endsAt": "0001-01-01T00:00:00Z",
      "fingerprint": "02f13394997e5211"
    }
  ]

  这是一个常见alertmanager告警消息,可以看到是一个json的格式,其中labels和annotations里面的字段都是我们配置prometheus时设置的,其他字段是prometheus触发告警时自动生成的,那么我们只需要将这个json字符串解析为各个通讯软件能够识别的格式,就OK了。目前对接企业微信是使用的企业微信所支持的markdown格式,对接飞书是使用的飞书所支持的card格式,对接钉钉是使用的钉钉所支持的markdown格式。具体格式要求,可以到各平台的官网进行查看。

2. 工具使用

本文分别介绍使用二进制安装和使用docker安装,该工具依赖redis,所以需要提前安装好redis。

2.1 使用二进制部署

redis如何使用二进制安装,本文就不介绍了,直接介绍工具的安装。
下载地址:https://github.com/Rainbowhhy/alertmanager-webhook/releases/download/v1.0/alertmanager-webhook-v1.0-linux-amd64.tar.gz

2.1.1 下载二进制安装包并解压

wget https://github.com/Rainbowhhy/alertmanager-webhook/releases/download/v1.0/alertmanager-webhook-v1.0-linux-amd64.tar.gz
tar -xf alertmanager-webhook-v1.0-linux-amd64.tar.gz
cd alertmanager-webhook-v1.0-linux-amd64

2.1.2 目录结构

tree alertmanager-webhook-v1.0-linux-amd64
alertmanager-webhook-v1.0-linux-amd64
├── alertmanager-webhook
├── alertmanager-webhook.yaml
├── example
│   ├── default.tmpl
│   ├── dingding.tmpl
│   ├── feishu.tmpl
│   └── qywechat.tmpl
└── template
    └── alert.tmpl

解压后的目录结构:
alertmanager-webhook:二进制启动命令
alertmanager-webhook.yaml:工具配置文件
example:模板目录,包含各个通讯工具的告警模板
template:告警目录,发送消息时实际使用的模板

2.1.3 修改配置文件

vim alertmanager-webhook.yaml

# 企业微信机器人key
# 使用企业微信时必须配置,不使用则留空
qywechatKey:

# 飞书机器人key
# 使用飞书时必须配置,不使用则留空
feishuKey:

# 钉钉机器人key
# 使用钉钉时必须配置,不使用则留
dingdingKey:

# Redis配置
redisServer: 127.0.0.1  # 必须配置
redisPort:  # 可选项,为空默认为6379
redisPassword: wecloudsre@2023 # redis未设置密码则留空,如果设置了密码登陆则必须配置

# 日志配置
logFileDir:   # 可选项,为空则为程序运行目录
logFilePath: alertmanager-webhook.log # 必须配置

# 服务监听配置
port: 9095 # 可选项,为空则默认为9095
host: 0.0.0.0 # 可选项,为空默认监听 127.0.0.1

大家需要使用什么通讯工具,就配置上对应机器人的key;reidsServer需要配置成redis服务器的ip地址,redisPassword配置成redis的登陆密码;其他配置保持默认即可。

2.1.4 配置模板

默认模板内容

 cat template/alert.tmpl
{{- if eq .Status `firing` -}}
{{- /*  自定义触发告警时的内容格式  */ -}}
告警主题: {{.Annotations.summary}}
告警级别: {{.Labels.serverity}}
告警次数: {{.Count}}
告警主机: {{.Labels.instance}}
告警详情: {{.Annotations.description}}
触发时间: {{.StartTime}}

{{- else if eq .Status `resolved` -}}
{{- /*  自定义告警恢复时的内容格式  */ -}}
告警主题: {{.Annotations.summary}}
告警主机: {{.Labels.instance}}
开始时间: {{.StartTime}}
恢复时间: {{.EndTime}}

(1).Annotations.summary、.Annotations.description 是prometheus中annotations的字段,.Labels.serverity、.Labels.instance是prometheus中labels的字段,可以根据实际的prometheus中所包含的字段来进行修改。
(2).Count、.StartTime、.EndTime 是固定字段,名称不可修改,可以按照实际需求,需要就加上,不需要就删除。
(3)注意.Annotations和.Labels中配置的字段必须是实际在prometheus中存在的,如果不存在,接收到的告警消息可能不全或者是非意料之中的。
(4)example目录中包含了各个通讯平台的模板实例,实际使用时可以先拷贝到template中进行修改,注意拷贝到template时,文件名称不能变,必须是template/alert.tmpl

2.1.5 启动alertmanager-webhook

chmod +x alertmanager-webhook
./alertmanager-webhook -c alertmanager-webhook.yaml

2.1.6 配置alertmanager

工具启动后,还需要在alertmanager中配置webhook

# alertmanager.yml
......

receivers:
  name: webhook
  webhook_configs:
  # 配置企业微信接口
  - url: 'http://127.0.0.1:9095/qywechat'
  # 配置飞书接口
  - url: 'http://127.0.0.1:9095/feishu'
  # 配置钉钉接口
  - url: 'http://127.0.0.1:9095/dingding'

......

实际工作中需要使用哪个通讯工具,就配置哪个工具对应的webhook接口即可。

2.2 使用docker部署

2.2.1 修改配置

alertmanager-webhook.yaml配置、模板配置、alertmanager.yml配置同上面的二进制文件部署

2.2.2 docker启动

docker部署比较简单,两条命令即可。

docker run -d --name redis -v /root/redis.conf:/etc/redis/redis.conf -p 0.0.0.0:6379:6379 redis:5.0.0 redis-server /etc/redis/redis.conf
docker run -d --name alertmanager-webhook -p 0.0.0.0:9095:9095 -v /root/alertmanager-webhook.yaml:/etc/alertmanager-webhook/alertmanager-webhook.yaml rainbowhhy/alertmanager-webhook:v1.0

2.2.3 docker-compose启动

也可以使用docker-compose部署
vim docker-compose.yml

version: '3'
services:
  redis:
    image: redis:5.0.0
    hostname: redis
    restart: unless-stopped
    container_name: redis
    privileged: true
    ports:
      - 0.0.0.0:6379:6379
    volumes:
      - /data/redis/redis.conf:/etc/redis/redis.conf
      - /data/redis/data:/data
    command: ["redis-server", "/etc/redis/redis.conf"]

  alertmanager-webhook:
    image: alertmanager-webhook:v1.2
    hostname: alertmanager-webhook
    restart: unless-stopped
    container_name: alertmanager-webhook
    privileged: true
    ports:
      - 0.0.0.0:9095:9095
    volumes:
      - /data/alertmanager-webhook/alertmanager-webhook.yaml:/etc/alertmanager-webhook/alertmanager-webhook.yaml
    command: ["./alertmanager-webhook", "-c", "/etc/alertmanager-webhook/alertmanager-webhook.yaml"]

3. 测试示例

我们可以使用curl命令来模拟alertmanager往alertmanager-webhook发送消息:
以发送至企业微信为例
触发告警

curl -X POST -H "Content-Type: application/json" -d '
{"alerts": [
    {
      "status": "firing",
      "labels": {
        "alertname": "机器宕机监测",
        "instance": "10.180.48.2",
        "job": "node_exporter",
        "serverity": "warning"
      },
      "annotations": {
        "description": "机器:10.180.48.2 所属 job:node_exporter 宕机超过1分钟,请检查!",
        "summary": "机器发生宕机"
      },
      "startsAt": "2024-01-10T11:59:09.775Z",
      "endsAt": "2024-01-10T13:00:00Z",
      "fingerprint": "02f13394997e5211"
    }
  ]
}' 127.0.0.1:9095/qywechat

告警恢复

curl -X POST -H "Content-Type: application/json" -d '
{"alerts": [
    {
      "status": "resolved",
      "labels": {
        "alertname": "机器宕机监测",
        "instance": "10.180.48.2",
        "job": "node_exporter",
        "serverity": "warning"
      },
      "annotations": {
        "description": "机器:10.180.48.2 所属 job:node_exporter 宕机超过1分钟,请检查!",
        "summary": "机器发生宕机"
      },
      "startsAt": "2024-01-10T11:59:09.775Z",
      "endsAt": "2024-01-10T13:00:00Z",
      "fingerprint": "02f13394997e5211"
    }
  ]
}' 127.0.0.1:9095/qywechat

4. 实现效果

alertmanager-webhook工具实现的告警效果
企业微信告警效果

飞书告警效果

钉钉告警效果

5. 源码分享

https://github.com/Rainbowhhy/alertmanager-webhook
本工具拿来即可用,欢迎大家提出优化建议。

标签:alertmanager,微信,配置,redis,webhook,prometheus,告警
From: https://www.cnblogs.com/technology178/p/17998200

相关文章

  • 调用微信退款时退款原因填写为空的问题
    问题输入源“/body/reason”映射到值字段“退款原因”字符串规则校验失败,字符数0,小于最小值1在调用微信退款时,遇到以上的问题,具体原因为:文档上退款原因为选填,我们可以填null,但不能是空字符串。参考微信官方文档-申请退款......
  • 利用pyautogui调用微信ocr
    importpyautoguiimporttimedefocrweixin(filename):#鼠标点击,默认左键#移至sheet页pyautogui.click(1386,33)#点击地址框pyautogui.click(1364,94)pyautogui.hotkey('ctrl','a')time.sleep(0.5)pyautogui.typewrite(......
  • 在企业微信中如何获取unionId?
    1.概念科普微信开放和公众平台的定位微信开放平台是为了让第三方应用投入微信的怀抱而设计的,比如第三方的移动应用(Android/IOS)、网站等;微信为了开疆拓土,扩大自己的影响力。微信公众平台是为了让程序员利用微信生态技术开发公众号、小程序而建立的,是一个技术提供平台;这才是......
  • 微信小程序: 传递对象数据
    一、传递参数的页面wxml<viewclass="right"><viewclass="status"style="color:{{item.color}}">{{item.status}}</view>......
  • 微信小程序:滚动tab栏
    1、wxml<view><scroll-viewscroll-x="true"class="tab-h"scroll-left="{{scrollLeft}}"><viewwx:for="{{tabs}}"wx:for-index="index"wx:key="id"class="tab-item{{c......
  • Python调用微信OCR识别文字和坐标
    python的ocr识别最方便的最准确的方法就是直接调微信的ocr注意:调用的时候先把微信关掉。importosimportjsonimporttimefromwechat_ocr.ocr_managerimportOcrManager,OCR_MAX_TASK_IDwechat_ocr_dir=r"C:\Users\mydell\AppData\Roaming\Tencent\WeChat\XPlugin\P......
  • prometheus 配置文件汇总
    prometheusprometheus.yaml#myglobalconfigglobal:scrape_interval:15s#Setthescrapeintervaltoevery15seconds.Defaultisevery1minute.evaluation_interval:15s#Evaluaterulesevery15seconds.Thedefaultisevery1minute.#scrape_......
  • 批量检测微信小程序是否封禁
    `<?php//要检测的appid列表$appids=array('appid1','appid2','appid3');//使用实际的appid//循环调用接口检测小程序状态foreach($appidsas$appid){//构造接口URL,将appid作为参数传递$url='https://yan.changxunwangluo.cn/xcx/check_mini_pro......
  • 微信小程序排行榜
     好看的排行榜界面wxml<!--ranklist.wxml--><view class="container">  <scroll-view class="list" scroll-y bindscrolltolower="{{hasReachBottom}}">    <view wx:for="{{key}}" wx:key="item" wx:f......
  • 微信开发者工具快捷键汇总
     打开快捷键面板F1打开/关闭工具栏Ctrl+Shift+T打开/关闭模拟器Ctrl+Shift+D打开/关闭调试器Ctrl+Shift+M格式化文件Shift+Alt+F编译Ctrl+B刷新Ctrl+R删除行Ctrl+Shift+K向上复制行Shift+Alt+↑向上移动行Alt+↑向下复制行Shift+Alt+↓向下移动行Alt+↓更改所有匹......