Zabbix监控系统系列之十九 :基于Markdown的钉钉告警

背景信息

在之前的系列文章中,我介绍两种不同的告警方式,大家可以参考如下传送门:
Zabbix监控系统系列之六:EMAIL警告配置
Zabbix监控系统系列之十六:企业微信告警

EMAIL方式与企业微信都有一定局限性,比如企业邮箱没法通过手机查收(我们公司就是如此),企业微信告警信息过於单调等。阿里钉钉灵活度比起前两者会更具备优势一些。

在这里插入图片描述

钉钉配置

1. 钉钉机器人配置

在钉钉客户端针对一个群组增加自定义机器人获得webhook字符串:
在这里插入图片描述

2. 钉钉脚本配置[此步骤在Zabbix Server配置]

cd /usr/lib/zabbix/alertscripts
vi dingding.py
---dingding.py脚本开始---
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json
import sys
import os
import time

headers = {'Content-Type': 'application/json;charset=utf-8'}
time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


log_file = "/var/log/dingding.log"
api_url = "https://oapi.dingtalk.com/robot/send access_token=09191748ebe131055fae62f154ea5399a256ccc80a05bb22d8d4ef8f90b557b8"      #说明:这里改为自己创建的机器人的webhook的值

def log(info):
    #注意权限,否则写不进去日志
    if os.path.isfile(log_file) == False:
               f = open(log_file, 'a+')

    f = open(log_file,'a+')
    f.write(info)
    f.close()

def msg(text,user):
    json_text= {
     "msgtype": "markdown",
        "markdown": {
            "title":"zabbix monitor",
            "text": text
        },
        "at": {
            "atMobiles": [
                user
            ],
            "isAtAll": True
        }
    }

    r=requests.post(api_url,data=json.dumps(json_text),headers=headers).json()
    code = r["errcode"]
    if code == 0:
        log(time + ":消息发送成功 返回码:" + str(code) + "\n")
    else:
        log(time + ":消息发送失败 返回码:" + str(code) + "\n")
        exit(3)

if __name__ == '__main__':
    text = sys.argv[3]
    user = sys.argv[1]
    msg(text,user)
---dingding.py脚本结束---

# 脚本授权配置
chmod +x dingding.py
touch /var/log/dingding.log
chmod 777 /var/log/dingding.log

3. Zabbix告警媒介配置

名称:Dingding
类型:脚本
脚本名称:dingding.py
脚本参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
在这里插入图片描述

4. Zabbix用户报警媒介配置

类型:Dingding
收件人:(随意的,脚本不关心此字段)
当启用时:设置时间窗
如果存在严重性则使用:设置告警级别
在这里插入图片描述

5. Zabbix告警动作设置

针对钉钉告警设置专门的告警动作,其中告警操作与恢复操作可以参考如下:

<font color=#FF0000 size=6 face="黑体">监控告警通知</font>
------
**主机名称:** {HOSTNAME1}  
**告警名称:** {TRIGGER.NAME}  
**告警级别:** {TRIGGER.SEVERITY}  
**告警时间:** {EVENT.DATE} {EVENT.TIME}  
**检查项:** {TRIGGER.KEY1}  
**当前值:** {ITEM.LASTVALUE}  
**IP地址:** {HOST.IP}   
**事件ID:** {EVENT.ID}

<font color=#006400 size=6 face="黑体">监控恢复通知</font>
------
**主机名称:** {HOSTNAME1}  
**告警名称:** {TRIGGER.NAME}  
**告警级别:** {TRIGGER.SEVERITY}  
**告警时间:** {EVENT.DATE} {EVENT.TIME}  
**恢复时间:** {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}   
**故障时长:** {EVENT.AGE}  
**检查项:** {TRIGGER.KEY1}  
**当前值:** {EVENT.RECOVERY.VALUE}  
**IP地址:** {HOST.IP}   
**事件ID:** {EVENT.ID}

在这里插入图片描述

常见问题

  1. 如果出现1条钉钉告警信息重复出现多次时,请检查脚本关联的日志文件是否授权正确。
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章