Zabbix4.2-qwen大模型 + 企业微信智能告警分析部署文档
目录
1.方案概述
1.1实现原理
- 调用qwen API进行智能分析(获取根因分析和处理建议)
- 将原始告警信息和qwen分析结果合并
- 通过企业微信机器人Webhook推送到指定群聊
1.2整体架构
Zabbix 4.2 Server (触发告警)
→ 外部Python脚本 (位于AlertScriptsPath)
→ qwen API (获取分析结果)
→ 企业微信机器人 (推送消息)
1.3前置条件
- 已部署的Zabbix 4.2 Server
- 企业微信已创建群聊机器人(获取Webhook URL)
- qwen API Key(可通过官方平台申请)
- Python 3.6+环境(Zabbix Server上)
1.4测试环境
|
主机名 |
IP地址 |
操作系统 |
角色 |
|
zabbix4 |
10.9.254.70 |
Centos7.9 |
zabbix-server |
|
agent |
10.9.254.71 |
Centos7.9 |
zabbix-agent |
2.qwen大模型环境准备
使用阿里云千问,申请API Key

3.企业微信机器人配置
3.1创建机器人
在企业微信中,进入需要接收告警的群聊
点击右上角"..." → "群机器人" → "添加机器人"
设置机器人名称(如"Zabbix智能告警")
获取Webhook地址,格式如:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx




3.2保存webhook地址
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4.zabbix4.2外部脚本配置
4.1确定脚本目录
在Zabbix Server上查看配置的脚本存放路径:
|
[root@zabbix4 ~]# grep -E '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf |
|
AlertScriptsPath=/usr/lib/zabbix/alertscripts |
4.2创建Python脚本
|
[root@zabbix4 ~]# cd /usr/lib/zabbix/alertscripts/ [root@zabbix4 /usr/lib/zabbix/alertscripts]# vim zabbix_qwen_wechat.py |
|
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 文件名:zabbix_qwen_wechat.py # 功能:Zabbix告警 → 阿里云通义千问(Qwen)分析 → 企业微信推送 # 部署路径:/usr/lib/zabbix/alertscripts/ # 权限:chmod +x /usr/lib/zabbix/alertscripts/zabbix_qwen_wechat.py import sys import json import requests import time import urllib3 # 禁用 SSL 警告(仅当使用 verify=False 时需要,此处保留为可选) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # ===================== 配置区(请务必修改)===================== # 阿里云百炼 API 配置(开通服务后获取 API Key) ALIYUN_API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 替换为你的真实 API Key ALIYUN_MODEL = "qwen-plus" # 可选 qwen-plus / qwen-max / qwen-turbo # 使用 OpenAI 兼容接口(推荐) ALIYUN_API_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions" # 企业微信机器人 Webhook WECHAT_WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxxxxxxx" # AI 提示词模板 PROMPT_TEMPLATE = """你是一个资深运维工程师,请分析以下告警: **发送给**: {who} **告警主题**: {subject} (告警信息: {message}) **时间**: {time} 请用**不超过300字**说明: 1. 最可能的故障原因 2. 立即处理步骤 3. 预防建议 """ # ===================== 参数解析 ===================== try: who = sys.argv[1] subject = sys.argv[2] message = sys.argv[3] event_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) except IndexError: print("ERROR: 参数缺失!请按顺序传入:主机名 告警名称 严重等级") sys.exit(1) # ===================== Qwen 分析函数(OpenAI兼容模式)===================== def analyze_with_qwen(): """调用阿里云通义千问(OpenAI兼容接口)进行告警分析""" headers = { "Authorization": f"Bearer {ALIYUN_API_KEY}", "Content-Type": "application/json" } prompt = PROMPT_TEMPLATE.format( who=who, subject=subject, message=message, time=event_time ) payload = { "model": ALIYUN_MODEL, "messages": [{"role": "user", "content": prompt}], "temperature": 0.2, "max_tokens": 300 } try: # 发送请求(可临时添加 verify=False 测试 SSL 问题) response = requests.post(ALIYUN_API_URL, headers=headers, json=payload, timeout=15) # 打印调试信息(正式使用时请注释或删除) print(f"DEBUG: HTTP状态码 = {response.status_code}") print(f"DEBUG: 响应头 = {response.headers}") print(f"DEBUG: 响应内容预览 = {response.text[:200]}") # 尝试解析 JSON result = response.json() # OpenAI 兼容格式返回结构 if 'choices' in result and len(result['choices']) > 0: return result['choices'][0]['message']['content'] else: return f"AI解析失败:响应缺少choices字段,完整响应:{json.dumps(result, ensure_ascii=False)[:200]}" except requests.exceptions.Timeout: return "AI服务超时:请求超过15秒未响应" except requests.exceptions.ConnectionError as e: return f"网络连接错误:无法连接到阿里云API - {str(e)}" except requests.exceptions.RequestException as e: return f"网络请求异常:{str(e)}" except ValueError as e: # JSON 解析错误 if 'response' in locals(): return f"API返回非JSON格式 (HTTP {response.status_code}): {response.text[:200]}" else: return f"JSON解析异常:{str(e)}" except Exception as e: return f"未知错误:{str(e)}" # ===================== 企业微信推送 ===================== def send_to_wechat(ai_analysis): """推送 Markdown 消息到企业微信群""" markdown_content = f""" ### Zabbix告警通知 **发送給**: {who} **告警主题**: {subject} **告警信息**: {message} **时间**: {event_time} ### AI智能分析 {ai_analysis} """ payload = { "msgtype": "markdown", "markdown": { "content": markdown_content } } try: resp = requests.post(WECHAT_WEBHOOK, json=payload, timeout=10) resp_json = resp.json() if resp_json.get('errcode') == 0: return True else: print(f"企业微信返回错误: {resp_json}") return False except Exception as e: print(f"企业微信推送异常: {str(e)}") return False # ===================== 主程序 ===================== if __name__ == "__main__": analysis_result = analyze_with_qwen() if send_to_wechat(analysis_result): print(f"SUCCESS: 告警已推送 | AI分析摘要: {analysis_result[:50]}...") else: print("ERROR: 企业微信推送失败,请检查 Webhook 配置") sys.exit(2) |
4.3脚本配置与权限
|
[root@zabbix4 ~]# pip3 install requests |
|
Collecting requests Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB) |████████████████████████████████| 63 kB 562 kB/s Collecting charset-normalizer~=2.0.0 Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB) Collecting idna=2.5 Downloading idna-3.10-py3-none-any.whl (70 kB) |████████████████████████████████| 70 kB 1.8 MB/s Collecting urllib3=1.21.1 Downloading urllib3-1.26.20-py2.py3-none-any.whl (144 kB) |████████████████████████████████| 144 kB 3.1 MB/s Collecting certifi>=2017.4.17 Downloading certifi-2025.4.26-py3-none-any.whl (159 kB) |████████████████████████████████| 159 kB 3.5 MB/s Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests Successfully installed certifi-2025.4.26 charset-normalizer-2.0.12 idna-3.10 requests-2.27.1 urllib3-1.26.20 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv |
|
[root@zabbix4 ~]# chmod +x /usr/lib/zabbix/alertscripts/zabbix_qwen_wechat.py [root@zabbix4 ~]# mkdir -p /var/log/zabbix [root@zabbix4 ~]# chown zabbix:zabbix /var/log/zabbix [root@zabbix4 ~]# chmod 755 /var/log/zabbix [root@zabbix4 ~]# python3 /usr/lib/zabbix/alertscripts/zabbix_qwen_wechat.py "admin" "测试告警" "CPU负载超过90%" |

5.zabbix4.2前端配置
5.1创建告警媒介类型


5.2为用户添加媒介

5.3配置告警动作


标题:
故障{TRIGGER.STATUS}, 服务器: {HOST.NAME} 发生: {TRIGGER.NAME} 故障
内容:
故障{TRIGGER.STATUS}
服务器: {HOST.NAME}
发生: {TRIGGER.NAME} 故障
-----------------------------------------------------------------------
告警主机: {HOST.NAME}
告警地址: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
主机组名: {TRIGGER.HOSTGROUP.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE}
事件ID: {EVENT.ID}


标题:
故障恢复{TRIGGER.STATUS}, 服务器: {HOST.NAME} 发生: {TRIGGER.NAME} 已恢复
内容:
故障恢复{TRIGGER.STATUS}
服务器: {HOST.NAME}
发生: {TRIGGER.NAME} 已恢复
------------------------------------------------------------------------------------------------
恢复告警主机: {HOST.NAME}
告警地址: {HOST.IP}
告警时间: {EVENT.DATE} {EVENT.TIME}
恢复时间: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
持续时间: {EVENT.AGE}
主机组名: {TRIGGER.HOSTGROUP.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目: {TRIGGER.KEY}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE}
事件ID: {EVENT.ID}


6.测试验证
6.1手动触发测试告警
在被监控主机上停止agent服务,触发"Agent不可用"告警
|
[root@agent ~]# systemctl stop zabbix-agent [root@agent ~]# systemctl status zabbix-agent |
|
● zabbix-agent.service - Zabbix Agent Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: disabled) Active: inactive (dead) |

6.2查看zabbix报表

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)