前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zabbix实现钉钉告警通知,支持@多人功能

Zabbix实现钉钉告警通知,支持@多人功能

作者头像
子润先生
修改2021-07-07 10:29:15
3.7K0
修改2021-07-07 10:29:15
举报

需求:

Zabbix告警通知发送到钉钉群组

钉钉报警时基于zabbix,访问钉钉应用接口去推送的报警消息,所以我们需要一个在钉钉创建一个报警应用。

版本:

Zabbix:4.0.7

Python:2.7.5

一、钉钉配置

1、创建群组、添加告警机器人

钉钉的聊天界面,点击发起群聊:

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

钉钉要3个人才能建群,所以需要添加两个人即可。

2、点击群设置 → 智能群助手 → 添加更多 → 添加机器人 → 自定义 :

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

点击添加,输入机器人名字即可

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

生成了一个 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}

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

2、配置用户

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

3、创建动作:配置>>动作

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

操作:

默认标题:故障{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

Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能
Zabbix实现钉钉告警通知,支持@多人功能

至此,钉钉告警部署完成。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档