邮件报警

报警媒介,发送报警信息的

图片走丢了,请联系管理员

用户报警媒介,接收报警信息的

图片走丢了,请联系管理员

图片走丢了,请联系管理员

动作,触发发送报警信息

图片走丢了,请联系管理员

图片走丢了,请联系管理员

图片走丢了,请联系管理员

钉钉报警

创建群聊并添加钉钉机器人

选人建群或内部群都可以

图片走丢了,请联系管理员

图片走丢了,请联系管理员

图片走丢了,请联系管理员

图片走丢了,请联系管理员

安全设置,至少要选择一种

图片走丢了,请联系管理员

图片走丢了,请联系管理员

钉钉机器人加签设置官方文档入口

测试脚本:

脚本参考链接:

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&timestamp=$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。消息模板,已经有一些默认的,没特殊要求可以不用修改。

图片走丢了,请联系管理员

图片走丢了,请联系管理员

图片走丢了,请联系管理员

编写脚本

自定义报警脚本官方文档入口

安装curlopensslperl,我的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&timestamp=$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后,收到的恢复信息

图片走丢了,请联系管理员