Zabbix 添加企业微信告警,并记录告警持续时长。(本文主要针对设备离线进行监控)

 准备工作:

首先使用企微账户创建企微群(友情提醒:创建的企微群内只可以邀请企微账户,邀请微信账户后,后续告警无法接收,因为机器人会失效)

 

一、添加企微群机器人
打开企微群聊天框,点击右上角功能选项,选择→消息推送→添加→自定义机器人名称,添加完成后,机器人会随机分配一个webhook 链接地址。如下图所示

image

image

 

 

 二、服务器后端配置:

 1. 登陆Zabbix服务器后端:进入脚步存放目录

cd /usr/lib/zabbix/alertscripts/      #Zabbix 动作脚本默认存放目录


2. 新建脚本:添加一个Python的脚本文件

vim /usr/lib/zabbix/alertscripts/your_script.py               #编辑脚本

 

3. 脚本内容:可以直接复制以下代码到文件内,并保存退出。

#!/usr/bin/python
#-*- coding: utf-8 -*-
import requests
import json
import sys
import os
 
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = ""   #这个是企业微信机器人生成的webhook地址,修改为你的即可。
 
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text,
            "mentioned_mobile_list":["17777777777","17666666666","15555555555"]     #这个是企业微信机器人自动艾特群里成员,修改为群成员手机号即可。
        },
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
 
if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)

 脚本验证测试:

python wechat_alert_user.py "设备离线告警测试,谢谢!!!"

  

三. Zabbix 前端配置: 

1. 添加新的用户:新建用户和组,也可以使用现有账户(用户必须有监控设备 监控项的读权限,用于接收告警通知)

2. 添加报警媒介:管理→媒介

image

 

3. 用户配置:将用户告警媒介与创建的脚本关联,这里将用户的报警媒介选择刚刚创建的媒介名称。

image

 

4. 添加动作,用于调用脚本执行脚本内容;可以根据自己的监控内容进行添加监控条件。

image

 动作操作编辑:

用户组:选择用户所在组,没有组直接选择用户。
仅发到:选择之前添加的媒介
自定义内容:勾选
主题:{HOSTNAME1}设备离线告警!

消息:填写以下信息

告警通知:{HOSTNAME1}设备离线告警!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级: 灾难
告警项目: {TRIGGER.NAME}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
确认信息:请确认下设备的运行状态(电源、链路)

 告警恢复操作编辑:

用户组:选择用户所在组,没有组直接选择用户。
仅发到:选择之前添加的媒介
自定义内容:勾选
主题:恢复通知:{HOSTNAME1}离线状态已恢复!

消息:填写以下信息

恢复通知:{HOSTNAME1}离线状态已恢复!
恢复主机:{HOSTNAME1}
恢复时间:{EVENT.RECOVERY.TIME}
持续时间:{EVENT.AGE}
恢复项目: {TRIGGER.NAME}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

 

 四、可以自行针对监控设备进行手动触发告警,查看企微群是否可以接收告警。

企微消息收到样子如下:

image

 

 有错误的地方欢迎指出,有疑问欢迎留言!
共同进步,互相学习!

祝君顺利!

posted @ 2025-10-20 17:32  Hope·  阅读(41)  评论(0)    收藏  举报
分享到:
target: function(trigger) { var pre = trigger.parentElement; var code = pre.querySelector('code'); return code ? code.innerText.trim() : pre.innerText.trim(); }