需求:
Zabbix告警通知发送到钉钉群组
钉钉报警时基于zabbix,访问钉钉应用接口去推送的报警消息,所以我们需要一个在钉钉创建一个报警应用。
版本:
Zabbix:4.0.7
Python:2.7.5
一、钉钉配置
1、创建群组、添加告警机器人
钉钉的聊天界面,点击发起群聊:
钉钉要3个人才能建群,所以需要添加两个人即可。
2、点击群设置 → 智能群助手 → 添加更多 → 添加机器人 → 自定义 :
点击添加,输入机器人名字即可
生成了一个 webhook ,先复制,后面会用到。
二、zabbix配置
1、创建脚本
[root@localhost ~]# vim /usr/local/zabbix/alertscripts/dingding.py
代码语言:javascript复制#!/usr/bin/env python# -*- coding: UTF-8 -*- """Author: YangxzEmail: 675583110@qq.comTime: 2019-9-8 21:23:21Describe:钉钉告警机器人,支持@多个用户, 传递参数$1为信息内容、$2表示要通知的钉钉用户Usage: python dingding.py Test测试 "138xxxx","135xxxx","132xxxx"""" import requestsimport jsonimport sysimport osimport datetime# 告警通知用户列表, 多个用户以逗号分隔. 此规则为固定列表、不支持zabbix自定义通知用户Alarm_User_List = '132xxx' headers = {'Content-Type': 'application/json;charset=utf-8'} # 个人群组: 监控报警# Token修改为自己的api_url = 'https://oapi.dingtalk.com/robot/send?access_token=xxx' def msg(text): json_text = { "msgtype": "text", "at": { "atMobiles": at_user, "isAtAll": False #为True表示@所有人 }, "text": { "content": text } } notice = requests.post(api_url, json.dumps(json_text), headers=headers).content print json.loads(notice) # 增加日志打点功能 if os.path.exists("/tmp/dingding.log"): f=open("/tmp/dingding.log","a ") else: f=open("/tmp/dingding.log","w ") f.write("n" "--"*60) if json.loads(notice)["errcode"] == 0: f.write("n" str(datetime.datetime.now()) " " str(at_user) " " "发送成功" "n" str(text) "n" "--"*60) f.close() else: f.write("n" str(datetime.datetime.now()) " " str(at_user) " " "发送失败" "n" str(text) "n" "--"*60) f.close() if __name__ == '__main__': text = sys.argv[1]# 固定列表通知用户选项# try:# at_user = (Alarm_User_List).split(',')# except IndexError as e:# at_user = [] # 此处支持zabbix自定义脚本参数, $1 {ALERT.MESSAGE}, $2 {ALERT.SENDTO} try: at_user = sys.argv[2].split(',') except IndexError as e: at_user = [] msg(text)
三、Zabbix web界面设置
1、添加报警脚本到zabbix:管理>>报警媒介类型
脚本参数如下:
{ALERT.MESSAGE}
{ALERT.SENDTO}
2、配置用户
3、创建动作:配置>>动作
操作:
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME} 故障!
消息内容:
告警主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
恢复操作:
默认标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME} 已恢复!
消息内容:
告警主机: {HOSTNAME1}
主机地址: {HOST.IP}
告警等级: {TRIGGER.SEVERITY}
监控项目: {TRIGGER.KEY1}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}: {ITEM.VALUE1}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
事件ID: {EVENT.ID}
4、进行钉钉报警测试
[root@JDCloud_Server alertscripts]# python dingding.py Test测试 132xxxx
至此,钉钉告警部署完成。