需求:
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
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- """
- Author: Yangxz
- Email: 675583110@qq.com
- Time: 2019-9-8 21:23:21
- Describe:钉钉告警机器人,支持@多个用户, 传递参数$1为信息内容、$2表示要通知的钉钉用户
- Usage: python dingding.py Test测试 "138xxxx","135xxxx","132xxxx"
- """
- import requests
- import json
- import sys
- import os
- import datetime
- # 告警通知用户列表, 多个用户以逗号分隔. 此规则为固定列表、不支持zabbix自定义通知用户
- Alarm_User_List = '132xxxx'
- headers = {'Content-Type': 'application/json;charset=utf-8'}
- # 个人群组:监控报警
- api_url = 'https://oapi.dingtalk.com/robot/send?access_token=ce29eaaeab4498e20ac67d4df65b71fa5ad25798ecbd47b0b5f7d20f0790fd76'
- 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("/var/log/dingding.log"):
- f=open("/var/log/dingding.log","a+")
- else:
- f=open("/var/log/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
至此,钉钉告警部署完成。