邮件报警
报警媒介,发送报警信息的
用户报警媒介,接收报警信息的
动作,触发发送报警信息
钉钉报警
创建群聊并添加钉钉机器人
选人建群或内部群都可以
安全设置,至少要选择一种
钉钉机器人加签设置官方文档入口
测试脚本:
脚本参考链接:
https://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/
https://stackoverflow.com/questions/296536/how-to-urlencode-data-for-curl-command?page=1&tab=scoredesc#tab-top
1
2
3
4
5
6
7
8
9
| #!/bin/bash
TIMESTAMP=$(date '+%s%3N')
SECRET=SECc0b6df347adee0a6375ead7ff58c661d7ec2b9c96b872abc5c71f99e325c50c2
SIGN=$(echo -en "$TIMESTAMP\n$SECRET" | openssl dgst -sha256 -hmac $SECRET -binary | base64 -w 0 | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg')
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=c8b429f7be7f75015a14d57d76cd2675878969964384e2013994134af42ebf2b×tamp=$TIMESTAMP&sign=$SIGN"
curl $WEBHOOK \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"我就是我, 是不一样的烟火"}}'
|
测试结果:
报警媒介,发送报警信息的
添加媒介
可以从媒介Email
复制一个,名称可根据喜好取名比如钉钉
,类型为脚本
,脚本名称需与下一步编写的脚本名一致即可dingding.sh
,脚本参数{ALERT.SENDTO}
和{ALERT.MESSAGE}
,{ALERT.SENDTO}
对应脚本中的$1
,{ALERT.MESSAGE}
对应脚本中的$2
。消息模板,已经有一些默认的,没特殊要求可以不用修改。
编写脚本
自定义报警脚本官方文档入口
安装curl
,openssl
,perl
,我的zabbix以容器方式安装的(Docker容器三分钟安装Zabbix),apline镜像中的date命令(BusyBox date)不支持 date +%N
,安装coreutils
即可,参考这里
1
2
3
4
| sudo docker exec -u root zabbix-server-mysql apk add curl
sudo docker exec -u root zabbix-server-mysql apk add openssl
sudo docker exec -u root zabbix-server-mysql apk add perl
sudo docker exec -u root zabbix-server-mysql apk add coreutils
|
自定义脚本默认放在这个目录:/usr/local/share/zabbix/alertscripts
我容器安装时映射到本机的目录为:/data/zabbix/alertscripts
给脚本执行权限
1
| sudo chmod +x /data/zabbix/alertscripts/dingding.sh
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #!/bin/bash
to=$1
body=$2
TIMESTAMP=$(date '+%s%3N')
SECRET=SECc0b6df347adee0a6375ead7ff58c661d7ec2b9c96b872abc5c71f99e325c50c2
SIGN=$(echo -en "$TIMESTAMP\n$SECRET" | openssl dgst -sha256 -hmac $SECRET -binary | base64 -w 0 | perl -p -e 's/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg')
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=c8b429f7be7f75015a14d57d76cd2675878969964384e2013994134af42ebf2b×tamp=$TIMESTAMP&sign=$SIGN"
curl $WEBHOOK \
-H 'Content-Type: application/json' \
-d '
{
"at": {
"atMobiles":[
"'"$to"'"
],
"isAtAll": false
},
"text": {
"content":"'"$body"'"
},
"msgtype":"text"
}'
|
测试报警脚本
直接运行报警脚本也可以测试
用户报警媒介,接收报警信息的
收件人
填写钉钉手机号码,不填手机号的话收到的就消息不会@收件人。收件人
就是{ALERT.SENDTO}
也就是对应脚本中的$1
动作,触发发送报警信息
邮件报警中已设置,略…
模拟一次故障,比如停掉被监控机器的zabbix agent,看看如何报警的
重新启动zabbix agent后,收到的恢复信息