说明:脚本部分也使用参考Zabbix配置企业微信告警 - ZhaoqBlog| 低头学习时,请不要忘记抬头看路!
其它配置 无论是邮件告警还是微信告警,配置方式基本没变化。
方式一
1、企业微信机器人准备
登录企业微信群中,找到右上角的三个点,点击展开,点击添加群机器人

建议告警机器人单独创建一个,不要复用。选择新建一个机器人

创建完成后,需要将Webhook地址复制下来保存好

2、准备Python脚本
将下面的python脚本保存到/usr/lib/zabbix/alertscripts 路径下并给脚本起名为wechat.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers={'Content-Type': 'application/json;charset=utf-8'}
api_url="此处粘贴Webhook链接"
defmsg(text):
json_text={
"msgtype": "text",
"text": {
"content": text
}
}
requests.post(api_url,json.dumps(json_text),headers=headers)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)执行命令为刚创建的脚本添加执行权限
chomod +x wechat.py由于脚本引用了requests库,通常需要单独安装一下,此处可以根据你实际运行的情况选择。
# 使用 dnf 软件包管理器以管理员权限安装 Python 3 的 pip 工具
sudo dnf install python3-pip
# 使用管理员权限通过 pip3 将 pip 升级到最新版本
sudo pip3 install --upgrade pip
# 使用管理员权限通过 Python 3 的包管理工具 pip3 安装名为 “requests” 的库
sudo pip3 install requests脚本测试
./wechat.py "脚本测试"
当我们执行完成后,可以在企业微信的群中看到机器人发送的消息 脚本测试

3、配置报警媒介
登录Zabbix 管理页面上,点击 告警、媒介、创建媒介类型

创建报警媒介,填写下面的内容后,点击 消息模版
名称: WeChat
类型: 选择 脚本
脚本名称: 填写 wechat.py 这个名称要和我们刚才保存的python脚本名字一致。
脚本参数: 输入 {ALERT.MESSAGE}

点击消息模版、添加

消息模版中的内容可以根据你的实际需求进行个性化配置,本文我们使用默认的消息模版添加 问题、问题恢复 两个消息模版,点击更新

消息类型:问题
模版内容:
主题:Problem: {EVENT.NAME}
消息:
Problem started at {EVENT.TIME} on {EVENT.DATE}
Problem name: {EVENT.NAME}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}
Operational data: {EVENT.OPDATA}
Original problem ID: {EVENT.ID}
{TRIGGER.URL}消息类型:问题恢复
模版内容:
主题:Resolved in {EVENT.DURATION}: {EVENT.NAME}
消息:
Problem has been resolved at {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
Problem name: {EVENT.NAME}
Problem duration: {EVENT.DURATION}
Host: {HOST.NAME}
Severity: {EVENT.SEVERITY}
Original problem ID: {EVENT.ID}
{TRIGGER.URL}点击测试 动作进行测试。测试正常的话会提示测试成功,同时企业微信群里面也会有对应的消息。

4、创建告警动作
点击告警、动作、触发器动作、创建动作 进行触发器动作创建。

触发器动作设置,名称为了更好的识别,可以使用wechat也可以根据你的需求随意填写。
条件根据你的实际需求进行设置。

点击操作 、添加 进行触发器动作配置,填写完成后点击更新
发送给用户组: 根据你的实际场景进行设置,默认组是zabbix administrator
发送给用户: 根据你的实际场景进行设置,默认演示使用admin用户
Send to media type: 选择我们刚才创建的媒介Wechat

重复上面的操作,完成 恢复操作的动作配置后,点击更新

5、配置用户报警媒介

点击报警媒介、添加

配置报警媒介,类型选择WeChat、收件人建议使用微信群名称。点击更新

方式二
1、企业微信机器人
和方式一一样 ,新建机器人,保存好 机器人url
2、准备python脚本
在 AlertScriptsPath 目录下创建一个文件,例如 wecom_alert.py。
# vim /usr/lib/zabbix/alertscripts/wecom_alert.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import sys
import json
import datetime
def send_wecom_message(webhook_url, subject, message):
"""
发送企业微信机器人消息
"""
# 解析 Zabbix 传入的消息,通常是 "Problem: Trigger name"
# 我们这里简单处理,提取告警状态
status_icon = "" if "Problem" in subject else ""
# 将 Zabbix 宏换行符 (\n) 替换为 Markdown 换行符 (\n)
# Zabbix 的消息内容已经包含了换行,这里无需额外处理
# 构造 Markdown 格式的消息体
# Zabbix 7.0 建议在动作配置中定义好完整的消息模板
# 这里 message 参数会接收到 Zabbix 动作中定义好的内容
formatted_message = f"### {status_icon} {subject}\n\n{message}"
# 企业微信机器人 Markdown 消息体
data = {
"msgtype": "markdown",
"markdown": {
"content": formatted_message
}
}
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(webhook_url, data=json.dumps(data), headers=headers, timeout=10)
response.raise_for_status() # 如果请求失败 (非2xx状态码),则抛出异常
# 解析返回的JSON,检查errcode
result = response.json()
if result.get("errcode") == 0:
print("Successfully sent message to WeChat Work.")
else:
print(f"Failed to send message. Error: {result.get('errmsg')}")
except requests.exceptions.RequestException as e:
print(f"Error sending request to WeChat Work: {e}")
except json.JSONDecodeError:
print(f"Error decoding response JSON. Response text: {response.text}")
if __name__ == "__main__":
if len(sys.argv) != 4:
print("Usage: python3 wecom_alert.py <webhook_url> <subject> <message>")
sys.exit(1)
webhook = sys.argv[1] # Zabbix 的 {ALERT.SENDTO}
subject = sys.argv[2] # Zabbix 的 {ALERT.SUBJECT}
message = sys.argv[3] # Zabbix 的 {ALERT.MESSAGE}
send_wecom_message(webhook, subject, message)3、给脚本赋权
# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/wecom_alert.py
# chmod +x /usr/lib/zabbix/alertscripts/wecom_alert.py
4、测试脚本
# 替换成你的 Webhook URL
WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx"
# 执行测试
/usr/lib/zabbix/alertscripts/wecom_alert.py "$WEBHOOK_URL" "测试告警:服务器宕机" "告警主机:Test Server\n告警级别:Disaster\n告警时间date '+%Y-%m-%d %H:%M:%S'\n问题详情:服务不可达"
5、配置告警媒介
告警——媒介——创建媒介类型
注意脚本名称要和前面配置的脚本名一致,同时要保证脚本位置也要正确

消息模板
消息类型:问题
主题{告警通知}
主机名称: {HOST.NAME}
主机地址: {HOST.IP}
故障日期: {EVENT.DATE}
故障时间: {EVENT.TIME}
问题事件: {EVENT.NAME}{EVENT.OPDATA}
事件编号: {EVENT.ID}
{TRIGGER.URL}消息类型:问题恢复
主题{恢复通知}
主机名称: {HOST.NAME}
主机地址: {HOST.IP}
恢复日期: {EVENT.RECOVERY.DATE}
恢复时间: {EVENT.RECOVERY.TIME}
持续时间: {EVENT.DURATION}
事件描述: {EVENT.NAME}{EVENT.OPDATA}
事件编号: {EVENT.ID}
{TRIGGER.URL}创建关联用户
用户——用户——Admin(可以自己新建用户,管理那不同的媒介类型)——报警媒介,点击添加
类型选择 前面创建的媒介,收件人企业微信机器人的url

触发动作
告警——动作——触发器动作——创建动作
名称根据自己告警定义,条件选择想要触发告警的条件
操作——
