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

小柒助手 Zabbix评论116,3665字数 756阅读2分31秒阅读模式

需求:

Zabbix告警通知发送到钉钉群组
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

钉钉报警时基于zabbix,访问钉钉应用接口去推送的报警消息,所以我们需要一个在钉钉创建一个报警应用。
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

版本: Zabbix-4.0.7、Python-2.7.5
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

一、钉钉配置
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

1、创建群组、添加告警机器人
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

钉钉的聊天界面,点击发起群聊:
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

文章源自小柒网-https://www.yangxingzhen.cn/5952.html

文章源自小柒网-https://www.yangxingzhen.cn/5952.html

钉钉要3个人才能建群,所以需要添加两个人即可。
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

2、点击群设置 → 智能群助手 → 添加更多 → 添加机器人 → 自定义 :
文章源自小柒网-https://www.yangxingzhen.cn/5952.html

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

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

三、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

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

若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!

继续阅读
Wechat
微信扫一扫,加我!
weinxin
我的微信
微信号已复制
微信公众号
微信扫一扫,关注我!
weinxin
我的公众号
公众号已复制
Zabbix最后更新:2022-11-23
小柒助手
  • 本文由 小柒助手 发表于 2019年9月8日 21:47:19
  • 声明:本站所有文章,如无特殊说明或标注,本站文章均为原创。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。转载请务必保留本文链接:https://www.yangxingzhen.cn/5952.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证