Prometheus使用企业钉钉接收告警通知

一、环境介绍

主机名 IP地址 系统 说明
localhost 192.168.224.11 Centos7.6 docker方式安装的prometheus

二、获取钉钉的webhook地址

1、注册企业钉钉

a、注册企业钉钉

浏览器打开钉钉注册页面 填入手机号码,填入获取到的验证码,点注册

p9a0Y6O.png

填入企业资料并注册

p9a0BtI.png

注册成功后,扫描二维码下载钉钉,如下图:

p9a06c8.png

b、添加机器人

因为机器人添加,只能是钉钉电脑版(手机版钉钉不能添加机器人)。“测试钉钉报警“ 这个企业只有我一个人,所以我就把报警消息发到默认的 ”测试钉钉报警 全员群“ 里面。实际使用时,请创建个运维群–添加对应的人员进来。

电脑钉钉登陆成功后—-点击左下角的。。。—然后再点管理后台,如下图:

p9aRbJe.png

点击之前创建的企业名

p9asaxP.png

点通讯录–组织架构–添加子部门

p9asrVg.png

刷新后,把接收告警的员工调整到刚刚添加的部门

p9aWgTf.png

勾选部门

p9aWffg.png

添加成功后,电脑钉钉消息窗口–会弹出一个测试告警的群–点击这个群—群设置–机器人

p9aWzc9.png

添加机器人

p9afAhD.png

添加机器人

p9ahEV0.png

点自定义

p9afYcj.png

机器人名字:随意

勾选ip:填入alertmanager外网ip

如果在自己电脑上测试钉钉告警,获取Alertmanager外网ip地址的方法为浏览器打开http://ip138.com 您的iP地址是:[xxx.xx.xx.xx]得到自己外网ip地址。

p9afdH0.png

c、复制机器人webhook地址

p9afy34.png

复制webhook的地址,例如:

1
https://oapi.dingtalk.com/robot/send?access_token=b840b125fbf67480b84244a520c8854fa6cf533a75e798afa1397ff9ea457d28

我们真实需要的是access_token=后面的,如下:

1
b840b125fbf67480b84244a520c8854fa6cf533a75e798afa1397ff9ea457d28

三、使用prometheus-webhook-dingtalk实现钉钉告警

github地址,获取最新的安装包

1、二进制安装(和docker安装二选一)

1
2
3
4
5
6
7
8
9
10
#安装二进制安装包
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

#解压
tar vzxf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz

ls -l

#移动并改名
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 /usr/local/Prometheus/prometheus-webhook-dingtalk

创建配置文件

1
2
3
4
5
6
cat > /usr/local/Prometheus/prometheus-webhook-dingtalk/config.yml <<"EOF"
targets:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=修改为自己的TOKEN
secret: SEC000000000000000000000
EOF

创建一个prometheus用户:

1
useradd -M -s /usr/sbin/nologin prometheus

更改prometheus-webhook-dingtalk用户的文件夹权限:

1
chown prometheus:prometheus -R /usr/local/Prometheus/prometheus-webhook-dingtalk

创建 systemd 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat > /etc/systemd/system/prometheus-webhook-dingtalk.service << "EOF"
[Unit]
Description=prometheus-webhook-dingtalk
Documentation=https://github.com/timonwong/prometheus-webhook-dingtalk

[Service]
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/usr/local/Prometheus/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk \
--config.file=/usr/local/Prometheus/prometheus-webhook-dingtalk/config.yml

[Install]
WantedBy=multi-user.target
EOF

启动 prometheus-webhook-dingtalk

1
2
systemctl daemon-reload
systemctl start prometheus-webhook-dingtalk.service

加入到开机自启动

1
systemctl enable prometheus-webhook-dingtalk.service

检查

1
systemctl status prometheus-webhook-dingtalk.service

查看 prometheus-webhook-dingtalk的日志以进行故障排除:

1
journalctl -u prometheus-webhook-dingtalk.service -f

2、docker安装(和二进制安装二选一,推荐)

创建配置文件config.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#创建数据目录
mkdir /data/docker-prometheus/prometheus-webhook-dingtalk/ -p

cat > /data/docker-prometheus/prometheus-webhook-dingtalk/config.yml <<"EOF"

#templates:
# - /etc/prometheus-webhook-dingtalk/templates/default.tmpl

targets:
webhook1:
url: https://oapi.dingtalk.com/robot/send?access_token=之前复制的TOKEN
secret: SEC000000000000000000000
#message:
# text: '{{ template "default.content" . }}'
EOF

docker-compose.yaml文件

注:我把prometheus-webhook-dingtalk安装在prometheus服务器上,如果安装在其他机器上也是可以的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd /data/docker-prometheus/prometheus-webhook-dingtalk/

cat > docker-compose.yaml << "EOF"
version: '3.3'
services:
webhook:
image: timonwong/prometheus-webhook-dingtalk:v2.1.0
container_name: prometheus-webhook-dingtalk
restart: "always"
ports:
- 8060:8060
command:
- '--config.file=/etc/prometheus-webhook-dingtalk/config.yml'
volumes:
- ./config.yml:/etc/prometheus-webhook-dingtalk/config.yml
- /etc/localtime:/etc/localtime:ro
EOF

启动

1
docker-compose up -d

检查

1
2
3
docker ps
或:
docker logs -f prometheus-webhook-dingtalk

3、访问地址

应用 访问地址 备注
prometheus-webhook-dingtalk http://192.168.224.11:8060 无用户和密码

4、alertmanager配置

alertmanager/config.yml增加如下配置:

1
2
3
4
5
6
7
8
route:
receiver: 'dingtalk'

receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'http://192.168.224.11:8060/dingtalk/webhook1/send'
send_resolved: true

p9dEGPx.png

检查配置

1
2
3
4
5
#docker安装方式,检查
docker exec -it alertmanager amtool check-config /etc/alertmanager/config.yml

#二进制安装方式,检查
/usr/local/Prometheus/alertmanager/alertmanager amtool check-config /etc/alertmanager/config.yml

重载alertmanager配置

1
curl -X POST http://localhost:9093/-/reload

5、配置触发器

已配置,查看现有触发器

访问告警模块的web页面

1
http://192.168.224.11:9090/alerts
  • INACTIVE:活跃中,即表示正常无告警产生。
  • PENDING:待触发,表示已经达到预设的阈值,但没达到预设的时间。
  • FIRING:表示达到预设的阈值并超过预设的时间触发告警

6、测试

关闭node-exporter

1
2
3
4
5
#docker环境
docker stop node-exporter

#二进制安装环境
systemctl stop node_exporter
1
2
3
查看prometheus的alerts: http://192.168.224.11:9090/alerts

查看alertmanager的alerts:http://192.168.224.11:9093/#/alerts

如果没收到钉钉消息,排查

1
docker logs -f alertmanager

钉钉正常收到报警信息如下图:

p9afcv9.png

7、碰到的问题

由于配置名称错误导致不能发送报警信息给钉钉,如下图:

p9afRD1.png

解决:

修改名称,使其配置正确

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...