需求:
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 = '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)
<br />
三、Zabbix web界面设置
1、添加报警脚本到zabbix:管理>>报警媒介类型
脚本参数如下:
{ALERT.MESSAGE}
{ALERT.SENDTO}
2、配置用户
3、创建动作:配置>>动作
操作:
默认标题:故障{TRIGGER.STATUS},服务器:{HOST.NAME},发生: {TRIGGER.NAME}故障!
消息内容:
告警状态:【{TRIGGER.STATUS}】
告警主机:【{HOST.NAME}】
主机地址:【{HOST.IP}】
告警时间:【{EVENT.DATE} {EVENT.TIME}】
告警等级:【{TRIGGER.SEVERITY}】
告警名称:【{TRIGGER.NAME}】
告警项目:【{TRIGGER.KEY1}】
当前状态:【{ITEM.NAME}:{ITEM.KEY}={ITEM.VALUE}】
事件代码:【{EVENT.ID}】
恢复操作:
默认标题:恢复{TRIGGER.STATUS}, 服务器:{HOST.NAME}:{TRIGGER.NAME}已恢复!
消息内容:
告警状态:【{TRIGGER.STATUS}】
告警主机:【{HOST.NAME}】
主机地址:【{HOST.IP}】
恢复时间:【{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}】
告警等级:【{TRIGGER.SEVERITY}】
告警名称:【{TRIGGER.NAME}】
告警项目:【{TRIGGER.KEY1}】
当前状态:【{ITEM.NAME}:{ITEM.KEY}={ITEM.VALUE}】
事件代码:【{EVENT.ID}】
4、进行钉钉报警测试
[root@JDCloud_Server alertscripts]# python dingding.py Test测试 132xxxx
至此,钉钉告警部署完成。
继续阅读
历史上的今天
9 月
8
- 2020Linux环境Kubernetes自动化安装脚本
- 2018Liunx系统初始化脚本 Zabbix最后更新:2024-1-24