一、申请钉钉账号,登录账号。 二、创建一个告警群组,添加一个自定义机器人

三,监控脚本配置(首先找到alertscripts目录) 在/usr/local/zabbix/share/zabbix/alertscripts目录下面创建脚本,名称为zabbix_dingding.py

脚本的内容如下: !/usr/bin/env python coding:utf-8

import requests,json,sys,os,datetime webhook="https://oapi.dingtalk.com/robot/send?access_token=" #说明:这里改为自己创建的机器人的webhook的值

user=sys.argv[1] text=sys.argv[3] data={ "msgtype": "text", "text": { "content": text }, "at": { "atMobiles": [ xxxxxx #指定@某人 ], "isAtAll": False #True @所有人 } } headers = {'Content-Type': 'application/json'} x=requests.post(url=webhook,data=json.dumps(data),headers=headers) if os.path.exists("/tmp/dingding.log"): f=open("/tmp/dingding.log","a+") else: f=open("/tmp/dingding.log","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()

四、执行测试: chmod +x zabbix_dingding.py # 加执行权限 python zabbix_dingding.py a b "测试"

五、zabbix配置 zabbix配置告警机制三步骤:添加告警媒介,添加用户,添加动作 (1)配置报警媒介类型: 配置---> 报警媒介类型,脚本参数如下: 名称:zabbix_dingding {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} 2)配置动作 配置--->动作--->创建动作,把dingding告警或者邮件告警的“操作”和恢复操作内容拷贝过来即可。 操作: 默认接收人:告警等级:{TRIGGER.SEVERITY} 主机:{HOSTNAME1} {TRIGGER.NAME}

默认信息: 告警主机:{HOSTNAME1} 告警信息:{TRIGGER.NAME} 告警等级:{TRIGGER.SEVERITY} 告警项目:{ITEM.NAME} 告警时间: {EVENT.DATE} {EVENT.TIME} 当前状态:故障 值={ITEM.VALUE1} 故障已持续{EVENT.AGE},请尽快处理 事件ID:{EVENT.ID} error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

恢复: 默认接收人:告警等级:故障恢复 主机:{HOSTNAME1} {TRIGGER.NAME} 默认信息:告警主机:{HOSTNAME1}

默认信息: 告警主机:{HOSTNAME1} 告警信息:{TRIGGER.NAME} 告警项目:{ITEM.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME} 恢复时间:{EVENT.RECOVERY.DATE}_{EVENT.RECOVERY.TIME} 当前状态:{TRIGGER.STATUS} 值={ITEM.VALUE1} 故障共持续{EVENT.AGE} 事件ID:{EVENT.ID} error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

更新操作: 服务器:{HOST.NAME}: 报警确认

{ 服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障! 确认人:{USER.FULLNAME} 时间:{ACK.DATE} {ACK.TIME} 确认信息如下: "{ACK.MESSAGE}" 问题服务器IP:{HOSTNAME1} 问题ID:{EVENT.ID} 当前的问题是: {TRIGGER.NAME} } error ----------》此为钉钉自定义关键词,匹配不到这个是不会发送告警信息

3)最后配置用户 配置--->用户---> 报警媒介,把钉钉加进来即可。 其中收件人要写自己的电话号码。

4)验证zabbix告警输出到钉钉群


邮件告警 1、安装邮件发送工具mailx yum install mailx 2、配置Zabbix服务端外部邮箱,打开文件vim /etc/mail.rc 如果mail.rc文件没有,就手动创建,然后添加如下内容: set sendcharsets=iso-8859-1,utf-8 set from=xxx@163.com set smtp=smtp.163.com #163邮箱要开启smtp授权 set smtp-auth-user=xxx@163.com #认证用户 set smtp-auth-password=xxx #认证密码(非登录密码,属单独的授权密码) 3、测试邮件发送 [root@zabbix~]# echo "zabbix test mail" | mail -s "zabbix" xxx@163.com 4、编写发送邮件脚本 #!/bin/bash message=$3 subject=$2 echo "$message"|mail -s "$subject" $1

5、给脚本添加权限,要不发生告警的时候邮件无法正常发送出去 chmod 755 mail.sh 6、管理-报警媒介类型-创建媒体类型 添加以下3个参数,分别对应sendmail.sh脚本需要的3个参数:收件人地址、主题、详细内容 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} 如果在3.0中不添加这三个参数会报错,因为在3.0以后zabbix允许自定义参数了,所以不会默认传递参数,在2.0的时候会默认传递三个参数,所以在3.0如果不写这三个参数会报错 7、给用户添加报警媒介 8、设置告警条件:配置-动作-创建动作 操作: 故障告警:{TRIGGER.STATUS}: {TRIGGER.NAME} 告警主机:{HOST.NAME} 主机地址:{HOST.IP} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 事件代码:{EVENT.ID}

解释:默认的步骤是1-1,也即是从1开始到1结束。一旦故障发生,就是执行sendEmail.sh脚本发生报警邮件给Admin用户和zabbix administrator组。假如故障持续了1个小时,它也只发送一次。如果改成1-0,0是表示不限制.无限发送 间隔就是默认持续时间60秒。那么一个小时,就会发送60封邮件。

恢复: 故障解除:{TRIGGER.STATUS}: {TRIGGER.NAME} 恢复主机:{HOST.NAME} 主机地址:{HOST.IP} 恢复时间:{EVENT.DATE} {EVENT.TIME} 恢复等级:{TRIGGER.SEVERITY} 恢复信息:{TRIGGER.NAME} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 事件代码:{EVENT.ID}

9、用户设置媒介

9、测试邮件告警 如果发送邮件有问题就重启服务端和zabbix-server 和httpd服务,客户端重启zabbix-agent服务

总结: 新版本新特性,涉及到钉钉机器人的content更新,以及python版本不同导致语法不同 等等细节要注意 多看开发手册 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script