本文基于zabbix5.0.2版本结合钉钉配置告警功能,理论适用于其他版本,配置前首先对zabbix使用熟悉,了解邮件告警原理,熟悉配置动作报警媒介。
吴昊之前也写过zabbix邮件报警设置,原理与钉钉告警功能差不多,如有需要请查看:
想要实现zabbix通过钉钉告警,我们首先创建一个钉钉告警群,在钉钉告警群中添加钉钉机器人,因为报警是通过钉钉机器人来实现的。
1、创建钉钉群,添加钉钉机器人,获取Webhook
2、配置告警脚本
登录zabbix-server服务器,安装python-pip,配置py脚本
yum install python-pip
|---|------------------------| | 1 | yum install python-pip |
pip install requests
|---|----------------------| | 1 | pip install requests |
mkdir /etc/zabbix/alertscripts
|---|--------------------------------| | 1 | mkdir /etc/zabbix/alertscripts |
修改/etc/zabbix/zabbix_server.conf配置文件
vi /etc/zabbix/zabbix_server.conf AlertScriptsPath=/etc/zabbix/alertscripts
|-----|-----------------------------------------------------------------------------| | 1 2 | vi /etc/zabbix/zabbix_server.conf AlertScriptsPath=/etc/zabbix/alertscripts |
cd /etc/zabbix/alertscripts
|---|-----------------------------| | 1 | cd /etc/zabbix/alertscripts |
vi dingding.py 此py脚本来源于网络,我这里做了部分修改,脚本内容如下 #!/usr/bin/env python #coding:utf-8 #zabbix钉钉报警 import requests,json,sys,os,datetime webhook="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxx" log_file="/var/log/zabbix/dingding.log" user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ user ], "isAtAll": False #此处如果改成True则在报警的时候@所有人 } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists(log_file): f=open(log_file,'a+') else: f=open(log_file,'w+') f.write("\n"+"--"*30) if x.json()["errcode"] == 0: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text)) f.close() else: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送失败"+"\n"+str(text)) f.close()
|-------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | vi dingding.py 此py脚本来源于网络,我这里做了部分修改,脚本内容如下 #!/usr/bin/env python #coding:utf-8 #zabbix钉钉报警 import requests,json,sys,os,datetime webhook="https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxx" log_file="/var/log/zabbix/dingding.log" user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ user ], "isAtAll": False #此处如果改成True则在报警的时候@所有人 } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists(log_file): f=open(log_file,'a+') else: f=open(log_file,'w+') f.write("\n"+"--"*30) if x.json()["errcode"] == 0: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送成功"+"\n"+str(text)) f.close() else: f.write("\n"+str(datetime.datetime.now())+" "+str(user)+" "+"发送失败"+"\n"+str(text)) f.close() |
3、脚本授权
chown zabbix:zabbix /etc/zabbix/alertscripts/dingding.py chmod 755 /etc/zabbix/alertscripts/dingding.py
|-----|---------------------------------------------------------------------------------------------------------| | 1 2 | chown zabbix:zabbix /etc/zabbix/alertscripts/dingding.py chmod 755 /etc/zabbix/alertscripts/dingding.py |
4、报警功能测试
这里的a和b是两个任意关键字,whsir是钉钉自定义的关键词
./dingding.py a b "whsir:测试报警功能"
|---|----------------------------------| | 1 | ./dingding.py a b "whsir:测试报警功能" |
5、刷新日志权限
touch /var/log/zabbix/dingding.log chown zabbix:zabbix /var/log/zabbix/dingding.log
|-----|-------------------------------------------------------------------------------------| | 1 2 | touch /var/log/zabbix/dingding.log chown zabbix:zabbix /var/log/zabbix/dingding.log |
6、设置报警媒介类型
在zabbix仪表盘中,选择管理→报警媒介类型→创建媒体类型
选择脚本类型,脚本名称就是前面创建好的dingding.py文件,脚本参数配置如下
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
7、给用户设置报警媒介
在zabbix仪表盘中,选择管理→用户→Admin(我这里以Admin用户为例)→报警媒介→添加钉钉告警
注意:收件人这里,可以填写任意内容,也可以填写钉钉的手机号码,例:我的钉钉绑定的手机号是18800000000,那么此处收件人也填写18800000000,在报警时就会@我了。
如果想在报警的时候@所有人,需要在dingding.py里修改"isAtAll": False为"isAtAll": True,如果修改为True了,那么收件人这里随便填就好了。
8、动作配置
在zabbix仪表盘中,选择配置→动作→创建新的动作
计算方式默认即可,条件选择需要报警的主机群组(我这里以主机群组为例,可结合自身需求更改)
主题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
消息:在消息首行添加关键词,此关键词和钉钉上的关键词需保持一致,可以使用中文名称,告警消息内容可结合自身使用情况进行更改。
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
如果想显示"可见的名称",告警可见的名称,就增加一条"{HOST.NAME}"
恢复操作也同理,在消息的首行添加钉钉的关键词,可以使用中文
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
因为我这里之前配置过Email报警方式,所以在这里可以看到,同时支持钉钉和邮件两种方式告警