【Prometheus】Alertmanager配置钉钉告警

👨‍🎓博主简介

🏅CSDN博客专家

🏅云计算领域优质创作者

🏅华为云开发者社区专家博主

🏅阿里云开发者社区专家博主

💊交流社区: 运维交流社区 欢迎大家的加入!

🐋 希望大家多多支持,我们一起进步!😄

🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 一、部署Alertmanager
  • 二、部署钉钉告警所需服务
    • [2.1 prometheus-webhook-dingtalk 安装包下载](#2.1 prometheus-webhook-dingtalk 安装包下载)
    • [2.2 上传并解压服务](#2.2 上传并解压服务)
    • [2.3 创建钉钉群聊并添加自定义机器人](#2.3 创建钉钉群聊并添加自定义机器人)
    • [2.4 配置 dingtalk 配置文件](#2.4 配置 dingtalk 配置文件)
    • [2.5 启动dingtalk服务并配置开机自启](#2.5 启动dingtalk服务并配置开机自启)
    • [2.6 测试配置是否成功](#2.6 测试配置是否成功)
  • [三、配置 Alertmanager 添加钉钉告警](#三、配置 Alertmanager 添加钉钉告警)
    • [3.1 验证 alertmanger 配置文件](#3.1 验证 alertmanger 配置文件)
    • [3.2 重载alertmanager和Prometheus的配置](#3.2 重载alertmanager和Prometheus的配置)
    • [3.3 通过Prometheus接口进行测试 - 模拟告警](#3.3 通过Prometheus接口进行测试 - 模拟告警)
    • [3.4 进行正常告警测试](#3.4 进行正常告警测试)
  • 四、钉钉告警模板的优化
    • [4.1 创建钉钉告警模板](#4.1 创建钉钉告警模板)
    • [4.2 修改dingtalk配置文件](#4.2 修改dingtalk配置文件)
    • [4.3 重启dingtalk](#4.3 重启dingtalk)
    • [4.4 测试模板是否可用](#4.4 测试模板是否可用)
    • [4.5 进行正常告警测试](#4.5 进行正常告警测试)
  • 五、钉钉多个群组配置
  • 六、多种通知方式同时触发

一、部署Alertmanager

  • 二进制部署Alertmanager

二进制部署Alertmanager可参考:Prometheus + Grafana + Alertmanager 实现邮件监控告警及配置告警信息

  • k8s部署Alertmanager

k8s部署Alertmanager可参考:k8s部署Prometheus + node_exporter + Grafana + Alertmanager

二、部署钉钉告警所需服务

2.1 prometheus-webhook-dingtalk 安装包下载

进入官方下载地址:prometheus-webhook-dingtalk,根据自己的平台及架构进行下载;

或直接使用wget命令进行下载(右击包名,复制链接地址);

bash 复制代码
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

2.2 上传并解压服务

  • 上传到服务器上
  • 解压到/usr/local/alertmanager/下,改名为:dingtalk(路径和名称自己可以自定义,这里放到我安装的alertmanager下)
bash 复制代码
# 解压服务包
tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz 

# 移动并重命名目录名为dingtalk到/usr/local/alertmanager/下
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 /usr/local/alertmanager/dingtalk

2.3 创建钉钉群聊并添加自定义机器人

创建群聊:手机、电脑都可以

创建自定义机器人:电脑(手机会提示需要进行安全配置,需使用电脑端)

  • 登录钉钉
  • 创建群聊
  • 选择好友,群归属可以选择自己的企业,也可以创建为普通群,这里我选择的是企业内部群,可根据自己需求选择
  • 创建新的群聊 --> 群设置,可以修改群聊名称及群头像,这里自选
  • 往下拉找到机器人
  • 添加机器人,找到自定义


  • 点击添加,可以给机器人添加名字(自定义)
  • 选择加签 --> 复制加签里的内容(需要用到)
  • 我已阅读并同意 --> 完成 --> 会出来一个Webhook,这个点击复制保存一下(需要用到) --> 点击完成
  • 完成之后就可以看到有一个机器人了

请记住加签Webhook的内容,忘记了也可以点击机器人进行查看,最好自己保存一份;

2.4 配置 dingtalk 配置文件

bash 复制代码
# 进入钉钉配置目录
cd /usr/local/alertmanager/dingtalk

# 复制一份配置文件
cp -ar config.example.yml config.yml
  • 编辑配置

也可以直接复制下面内容到config.yml中;

yaml 复制代码
# 全局超时配置
timeout: 5s

## 全局模板及模板路径配置
templates:
  - contrib/templates/legacy/template.tmpl
 
# 全局默认消息格式
default_message:
  title: '{{ template "legacy.title" . }}'
  text: '{{ template "legacy.content" . }}'
 
## 钉钉机器人目标配置(核心部分)
targets:
  webhook1:
    url: <粘贴Webhook的内容>
    secret: <粘贴加签的内容>

也可以配置多个webhook来区分,生产或者测试;

2.5 启动dingtalk服务并配置开机自启

  • 写systemd管理启动脚本
bash 复制代码
vim /usr/lib/systemd/system/dingtalk.service

具体dingtalk.service内容,路径根据自己的情况修改;

bash 复制代码
[Unit]
Description=Prometheus DingTalk Webhook
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/alertmanager/dingtalk
ExecStart=/usr/local/alertmanager/dingtalk/prometheus-webhook-dingtalk \
    --config.file=/usr/local/alertmanager/dingtalk/config.yml \
    --web.listen-address=:8060
Restart=always

[Install]
WantedBy=multi-user.target   
  • 启动dingtalk服务并配置开机自启
bash 复制代码
# 加载systemd配置
systemctl daemon-reload
# 配置开机自启并启动服务
systemctl enable --now dingtalk.service
# 确认服务是否启动正常
systemctl status dingtalk.service
  • 查看端口是否正常:默认监听8060端口

如需修改端口,可以再启动时的配置中修改--web.listen-address=:8060的端口;

bash 复制代码
netstat -anput | grep 8060

2.6 测试配置是否成功

bash 复制代码
curl -X POST http://localhost:8060/dingtalk/webhook1/send   -H "Content-Type: application/json"   -d '{"status":"firing","alerts":[{"labels":{"alertname":"Test","instance":"localhost"},"annotations":{"summary":"测试告警"}}]}'

出现OK并接收到消息就没问题;

如果有问题可通过journalctl -u dingtalk -f命令来查看服务日志是否有报错;

三、配置 Alertmanager 添加钉钉告警

这里是基于我二进制部署的alertmanager的路径,可根据自己实际情况进行修改

bash 复制代码
# 进入alertmanager目录
cd /usr/local/alertmanager

# 修改alertmanager配置文件
vim /usr/local/alertmanager/alertmanager.yml

alertmanager 具体配置文件

yaml 复制代码
global:   # 全局的配置
  resolve_timeout: 5m  # 解析的超时时间

route:    # 将告警具体怎么发送
  group_by: ['alertname']  # 根据标签进行分组
  group_wait: 10s          # 发送告警等待时间
  group_interval: 10s      # 发送告警邮件的间隔时间
  repeat_interval: 1h      # 重复的告警发送时间
  receiver: 'dingtalk'     # 接收者是谁,需和receivers中的name一致

receivers:                 # 将告警发送给谁
- name: 'dingtalk'
  webhook_configs:
    - url: 'http://172.16.11.230:8060/dingtalk/webhook1/send'
      send_resolved: true   # 开启恢复通知
inhibit_rules:   # 抑制告警
  - source_match:
      severity: 'critical'   # 当收到同一台机器发送的critical时候,屏蔽掉warning类型的告警
    target_match:
      severity: 'warning'
    equal: ['alertname', 'severity', 'instance']  # 根据这些标签来定义抑制

url中需注意:

url路由规则:http://<host>:<port>/dingtalk/<target_name>/sendtarget_name为dingtalk配置中的targets:webhook1(可自定义的);

3.1 验证 alertmanger 配置文件

bash 复制代码
cd /usr/local/alertmanager/
./amtool check-config alertmanager.yml

3.2 重载alertmanager和Prometheus的配置

  • 重载 alertmanager 配置
bash 复制代码
curl -lv -X POST http://localhost:9093/-/reload
  • 重载 Prometheus 配置
bash 复制代码
curl -X POST http://localhost:9090/-/reload

3.3 通过Prometheus接口进行测试 - 模拟告警

bash 复制代码
curl -X POST http://localhost:9093/api/v2/alerts \
  -H "Content-Type: application/json" \
  -d '[{
    "labels": {
      "alertname": "TestDingTalk",
      "severity": "critical",
      "instance": "test-server-01"
    },
    "annotations": {
      "summary": "测试钉钉告警",
      "description": "这是一条测试消息,用于验证钉钉告警是否正常工作"
    },
    "startsAt": "2024-01-01T00:00:00Z"
  }]'

如下,正常收到信息,没问题

3.4 进行正常告警测试

需提前配置好告警规则;

  • 告警测试
  • 恢复告警测试

四、钉钉告警模板的优化

4.1 创建钉钉告警模板

  • vim /usr/local/alertmanager/dingtalk/contrib/templates/legacy/dingtalk.tmpl

路径可以自定义

yaml 复制代码
{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}

{{ define "__alert_list" }}{{ range . }}
---
**告警主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }}

**告警级别**: {{ .Labels.severity }}

**告警主机**: {{ .Labels.instance }}

**告警信息**: {{ .Annotations.description }}

**触发时间**: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
{{ end }}{{ end }}

{{ define "__resolved_list" }}{{ range . }}
---
**恢复主题**: {{ .Annotations.summary }}

**告警类型**: {{ .Labels.alertname }}

**告警级别**: {{ .Labels.severity }}

**告警主机**: {{ .Labels.instance }}

**告警信息**: {{ .Annotations.description }}

**触发时间**: {{ .StartsAt.Format "2006-01-02 15:04:05" }}

**恢复时间**: {{ .EndsAt.Format "2006-01-02 15:04:05" }}
{{ end }}{{ end }}

{{ define "dingtalk.title" }}
{{ if eq .Status "firing" }}🔥【Prometheus告警】{{ .CommonLabels.alertname }}{{ else }}✅【Prometheus恢复】{{ .CommonLabels.alertname }}{{ end }}
{{ end }}

{{ define "dingtalk.content" }}
{{ if eq .Status "firing" }}🔥【Prometheus告警】{{ .CommonLabels.alertname }}{{ else }}✅【Prometheus恢复】{{ .CommonLabels.alertname }}{{ end }}
{{ if gt (len .Alerts.Firing) 0 }}
**==== 侦测到 {{ .Alerts.Firing | len }} 个故障 ====**
{{ template "__alert_list" .Alerts.Firing }}
{{ end }}

{{ if gt (len .Alerts.Resolved) 0 }}
**==== 已恢复 {{ .Alerts.Resolved | len }} 个故障 ====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}

{{ define "legacy.title" }}{{ template "dingtalk.title" . }}{{ end }}
{{ define "legacy.content" }}{{ template "dingtalk.content" . }}{{ end }}

4.2 修改dingtalk配置文件

  • vim /usr/local/alertmanager/dingtalk/config.yml
yaml 复制代码
# 全局超时配置
timeout: 5s

## 全局模板及模板路径配置
templates:
  - /usr/local/alertmanager/dingtalk/contrib/templates/legacy/dingtalk.tmpl

# 全局默认消息格式
default_message:
  title: '{{ template "legacy.title" . }}'
  text: '{{ template "legacy.content" . }}'

## 钉钉机器人目标配置(核心部分)
targets:
  webhook1:
    url: <粘贴Webhook的内容>
    secret: <粘贴加签的内容>

主要修改了 全局模板及模板路径配置

4.3 重启dingtalk

bash 复制代码
# 重启服务
systemctl restart dingtalk.service

# 确认服务是否启动正常
systemctl status dingtalk.service

4.4 测试模板是否可用

bash 复制代码
curl -X POST http://localhost:8060/dingtalk/webhook1/send \
  -H "Content-Type: application/json" \
  -d '{
    "receiver": "dingtalk",
    "status": "resolved",
    "alerts": [
      {
        "status": "resolved",
        "labels": {
          "alertname": "TestAlert",
          "severity": "critical",
          "instance": "192.168.1.100:9100"
        },
        "annotations": {
          "summary": "节点宕机超过1分钟",
          "description": "192.168.1.100 节点无法连接"
        },
        "startsAt": "2026-02-25T10:00:00.000Z",
        "endsAt": "2026-02-25T10:05:30.000Z"
      }
    ],
    "groupLabels": {
      "alertname": "TestAlert"
    },
    "commonLabels": {
      "alertname": "TestAlert",
      "severity": "critical",
      "instance": "192.168.1.100:9100"
    },
    "commonAnnotations": {
      "summary": "节点宕机超过1分钟"
    }
  }'

4.5 进行正常告警测试

需提前配置好告警规则;

  • 告警测试
  • 恢复告警测试

五、钉钉多个群组配置

targets中配置多个target_name,一个target_name代表的一个群聊机器人;

比如:我创建了两个群聊,一个运维,一个开发的群

那么这两个群都需要添加一个机器人,然后获取到对应群聊的Webhook加签的内容;

并在targets中配置两个target_name,将Webhook加签的内容填到对应的target_name中;

yaml 复制代码
targets:
  webhook1:
    url: <粘贴Webhook的内容>
    secret: <粘贴加签的内容>

  development:
    url: <粘贴Webhook的内容>
    secret: <粘贴加签的内容>

在Alertmanager配置中写URL为:
http://localhost:8060/dingtalk/webhook1/sendhttp://localhost:8060/dingtalk/development/send

六、多种通知方式同时触发

邮件+钉钉同时告警,主要注意的地方就是route的receiverreceivers的name要一致,一个receivers里可以有多个接收平台;

更多不同级别的告警分配不同人或平台进行告警请参考:Prometheus 之 Alertmanager配置说明及路由的使用

相关推荐
@PHARAOH2 小时前
HOW - Moleculer 微服务构建分布式服务系统
微服务·云原生·架构
wangqiaowq2 小时前
llama.cpp 启动命令优化
运维·服务器
merlin-mm2 小时前
GPU 间的通信方式
云原生·容器·kubernetes
double2li2 小时前
linux/unix 段错误捕获【续】
linux·运维·服务器·网络·unix
allway22 小时前
Linux / Unix last Command Examples
linux·运维·unix
dashizhi20153 小时前
禁止复制电脑文件、电脑机密数据禁止拷贝、禁止电脑文件复制到U盘和移动硬盘的方法
运维·网络·stm32·安全·电脑
嘿嘿嘿x33 小时前
MobaXterm 成功连接 Ubuntu 虚拟机
linux·运维·ubuntu
万能菜道人3 小时前
多次连接共享内存大小不一致在win和linux的区别
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志3 小时前
2.3.1 Linux 命令行介绍:Shell、PATH与第一个Hello程序
linux·运维·服务器