# alertfusion-demo **Repository Path**: root-pu/alertfusion-demo ## Basic Information - **Project Name**: alertfusion-demo - **Description**: 运维告警集成平台(AlertFusion)兼容 Prometheus 和 Zabbix 两大监控系统,实现统一的告警接收、告警实时预览、标准化处理、消息推送和历史告警管理功能。支持通过 企业微信机器人、钉钉机器人 和 飞书 Webhook 等方式发送通知,并提供告警可视化看板。系统还集成了AI辅助分析功能,为告警提供智能诊断建议。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2025-09-02 - **Last Updated**: 2026-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 运维告警集成平台(AlertFusion) 运维告警集成平台(AlertFusion)兼容 **Prometheus** 和 **Zabbix** 两大监控系统,实现统一的告警接收、告警实时预览、标准化处理、消息推送和历史告警管理功能。支持通过 **企业微信机器人**、**钉钉机器人** 和 **飞书 Webhook** 等方式发送通知,并提供告警可视化看板。系统还集成了AI辅助分析功能,为告警提供智能诊断建议。 ## 📬 联系作者 * 微信:`pzl960504` * 邮箱:`2925006354@qq.com` ## 🛠️ 技术栈 ![Python](https://img.shields.io/badge/Python-3.9%2B-blue?logo=python) ![Flask](https://img.shields.io/badge/Flask-2.0.1-green?logo=flask) ![License](https://img.shields.io/github/license/yourname/prometheus-webhook) ## 🌟 核心功能 | 模块 | 功能说明 | |----------|--------------------------------------------------------------------------| | **告警接收** | ✅ 支持 Prometheus Webhook
✅ 支持 Zabbix 脚本集成
✅ 告警状态追踪(firing/resolved) | | **消息推送** | 💬 企业微信机器人
📌 钉钉机器人
📩 飞书 Webhook | | **数据管理** | 📊 实时告警可视化看板
🔍 历史告警查询
📁 告警日志导出
📈 告警统计分析
📅 时间范围筛选 | | **监控大屏** | 📺 Grafana面板集成
📁 目录树管理
📊 面板分类组织
⚙️ 面板配置管理
🎯 快速面板切换 | | **用户登录** | 👤 用户注册与登录
🔐 用户信息管理 | | **AI辅助** | 🤖 告警智能分析
💡 问题解决建议
⚙️ AI配置管理 | | **告警处理** | ✏️ 告警编辑功能
🗑️ 告警删除功能
🔄 告警状态更新 | ![输入图片说明](static/img/%E9%BB%98%E8%AE%A4%E4%B8%BB%E9%A2%98.png) ![输入图片说明](static/img/%E7%BA%A2%E8%89%B2%E4%B8%BB%E9%A2%98.png) ![输入图片说明](static/img/%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90.png) ![输入图片说明](static/img/%E4%B8%8D%E7%99%BB%E5%BD%95-AI.png) ![输入图片说明](static/img/%E4%B8%8D%E7%99%BB%E5%BD%95-%E5%8E%86%E5%8F%B2%E5%91%8A%E8%AD%A6.png) ![输入图片说明](static/img/%E7%AE%A1%E7%90%86%E5%91%98-%E5%A4%A7%E5%B1%8F.png) ![输入图片说明](static/img/%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90.png) ![输入图片说明](static/img/%E4%B8%8D%E7%99%BB%E5%BD%95-%E5%A4%A7%E5%B1%8F.png) ## 🚀 快速部署 ### 服务器环境要求 - 建议部署在监控服务器上 - 能连接互联网(至少需要能连企业微信、飞书、钉钉webhook机器人及AI大模型api) ## 📋 系统对接步骤 ### 1. 配置监控系统 - 按照下方教程配置Zabbix或Prometheus,确保告警能正确发送到AlertFusion ### 2. 设置AI分析功能 - 在AI+告警界面设置大模型信息,启用智能分析功能 ### 3. 添加通知渠道 - 在系统中添加机器人webhook地址,支持企业微信、钉钉和飞书 ### 4. 用户注册与管理 - 使用有效的注册码进行用户注册(注册码格式为Base64编码的日期,如:MjAyNS0wNS0yNQ==,解码后为2025-05-25) - 注册码有效期验证:系统会检查解码后的日期是否已过期 ### 5. 配置Grafana监控大屏 - **创建目录结构**:在监控大屏页面左侧,点击"创建目录"按钮,建立层级化的目录结构来组织面板 - **添加监控面板**:在目录中添加Grafana面板,支持设置面板名称、URL地址和描述信息 - **目录管理**:支持目录的创建、编辑、删除和层级管理,便于面板分类组织 - **面板切换**:通过左侧目录树快速切换不同的Grafana面板,实现一站式监控查看 - **自动刷新**:支持配置面板自动刷新间隔,确保监控数据实时更新 ### 🐳 Docker 部署(容器内置mysql) ```bash docker volume create alertfusion-db docker run -d -p 10085:10085 -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro \ --name AlertFusion \ -v alertfusion-db:/var/lib/mysql \ --privileged=true --restart=always \ registry.cn-chengdu.aliyuncs.com/pzl_devops/alertfusion_private:latest ``` ## 📦 对接prometheus教程
alertmanager 配置说明 ```yaml route: receiver: 'AlertFusion' group_wait: 30s group_interval: 5m receivers: - name: 'AlertFusion' webhook_configs: - url: 'http://127.0.0.1:10085/bot_notify' #需修改为你实际部署服务器ip(若部署在监控服务器上,则无需修改) send_resolved: true ```
告警规则配置说明 ```yaml 规则中告警等级只能使用以下六种: 'Warning', 'Information','Disaster','High','Average','Not classified' ```
消息模板alertfusion.tmp ```gohtml {{ define "alertfusion.message" }} {{- if eq .Status "firing" -}} 🚨 [告警触发] {{ .CommonLabels.alertname }} {{- else -}} ✅ [告警恢复] {{ .CommonLabels.alertname }} {{- end }} 🔹 实例: {{ .CommonLabels.instance }} 🔹 级别: {{ .CommonLabels.severity | toUpper }} 🔹 时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} (UTC+8) {{ range .Alerts }} 📌 {{ .Annotations.summary }} 📝 {{ .Annotations.description }} 🔗 [详情]({{ .GeneratorURL }}) {{ end }} 🛠️ 当前触发告警: {{ len .Alerts.Firing }} 条 👍 已恢复告警: {{ len .Alerts.Resolved }} 条 {{ end }} ```
--- ## 📦 对接Zabbix教程 ### 1. 修改 `zabbix_server.conf` ```bash AllowRoot=1 ``` ### 2. 添加媒介 #### ✅第一步: 告警脚本示例:zabbix_to_AlertFusion.py放入 /usr/lib/zabbix/alertscripts 目录。 ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import requests import sys WEBHOOK_URL = "http://127.0.0.1:10085/bot_notify" # ← 修改为你的实际接口地址 LOG_FILE = "resp.txt" # 保存日志的文件 def log_to_file(content): """将内容追加到文件""" with open(LOG_FILE, "a", encoding="utf-8") as f: f.write(content + "\n") # 每次写入后换行 def send_alert(alert_json_str): try: alert_obj = json.loads(alert_json_str) # 将字符串转为 dict payload = {"alerts": [alert_obj]} # 符合 Flask 接口结构 # 格式化请求体并打印到文件 request_content = f"请求体: {json.dumps(payload, indent=2)}" print(request_content) log_to_file(request_content) # 保存到文件 headers = {"Content-Type": "application/json"} response = requests.post(WEBHOOK_URL, json=payload, headers=headers, timeout=5) # 打印响应状态码和内容,并保存到文件 response_content = f"状态: {response.status_code}\n响应: {response.text}" print(response_content) log_to_file(response_content) # 保存到文件 except Exception as e: error_message = f"发送告警失败: {e}" print(error_message) log_to_file(error_message) # 保存到文件 if __name__ == "__main__": if len(sys.argv) < 2: print("缺少 JSON 输入参数") sys.exit(1) json_input = sys.argv[1] send_alert(json_input) ``` #### ✅第二步: 添加告警媒介

将以下内容保存为 `.json` 文件(根据自己的zabbix版本修改版本号),通过 Zabbix 前端导入媒介类型: ```json { "zabbix_export": { "version": "7.2", "media_types": [ { "name": "IT资源告警中心(AlertFusion)", "type": "SCRIPT", "script_name": "zabbix_to_AlertFusion.py", "parameters": [ { "sortorder": "0", "value": "{ALERT.MESSAGE}" } ], "message_templates": [ { "event_source": "TRIGGERS", "operation_mode": "PROBLEM", "subject": "Problem: {EVENT.NAME}", "message": "{ \"type\": \"zabbix\", \"status\": \"firing\", \"startsAt\": \"{EVENT.DATE} {EVENT.TIME}\", \"host\": \"{HOST.NAME}\", \"alertname\": \"{TRIGGER.NAME}\", \"severity\": \"{TRIGGER.SEVERITY}\", \"description\": \"{HOST.IP} - {TRIGGER.NAME}\", \"current_value\": \"{ITEM.LASTVALUE}\", \"fingerprint\": \"{EVENT.ID}\" }" }, { "event_source": "TRIGGERS", "operation_mode": "RECOVERY", "subject": "Resolved: {EVENT.NAME}", "message": "{ \"type\": \"zabbix\", \"status\": \"resolved\", \"endsAt\": \"{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}\", \"host\": \"{HOST.NAME}\", \"alertname\": \"{TRIGGER.NAME}\", \"severity\": \"{TRIGGER.SEVERITY}\", \"description\": \"{HOST.IP} - {TRIGGER.NAME}\", \"current_value\": \"{ITEM.LASTVALUE}\", \"fingerprint\": \"{EVENT.ID}\" }" } ] } ] } } ``` ✅ 其中:消息模板配置如下 - 告警消息: ``` { "type": "zabbix", "status": "firing", "startsAt": "{EVENT.DATE} {EVENT.TIME}", "host": "{HOST.NAME}", "alertname": "{TRIGGER.NAME}", "severity": "{TRIGGER.SEVERITY}", "description": "{HOST.IP} - {TRIGGER.NAME}", "current_value": "{ITEM.LASTVALUE}", "fingerprint": "{EVENT.ID}" } ``` - 恢复消息: ``` { "type": "zabbix", "status": "resolved", "endsAt": "{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}", "host": "{HOST.NAME}", "alertname": "{TRIGGER.NAME}", "severity": "{TRIGGER.SEVERITY}", "description": "{HOST.IP} - {TRIGGER.NAME}", "current_value": "{ITEM.LASTVALUE}", "fingerprint": "{EVENT.ID}" } ``` ![img_list.png](static%2Fimg%2Fimg_list.png) #### ✅第三步: 给管理员账号添加媒介权限 ![alert_admin.png](static%2Fimg%2Falert_admin.png) ### 3.创建动作 ![add-action.png](static%2Fimg%2Fadd-action.png) ![add_action_edit.png](static%2Fimg%2Fadd_action_edit.png) ## 📦 对接Grafana教程 ### 1. 配置 Grafana 服务器 #### ✅第一步:允许匿名访问 ```bash vim /etc/grafana/grafana.ini # 修改如下配置: [auth.anonymous] enabled = true org_name = Main Org. # 默认,需要和你的后台进行对比,确保一致 org_role = Viewer ``` #### ✅第二步:允许被 iframe 嵌入 ```bash vim /etc/grafana/grafana.ini # 修改如下配置: [security] allow_embedding = true ``` #### ✅第三步:重启 Grafana 服务 ```bash systemctl restart grafana-server ``` ### 2. 创建共享面板 #### ✅第一步:在 Grafana 中创建或选择要共享的仪表盘 #### ✅第二步:点击仪表盘右上角的"分享"按钮 #### ✅第三步:选择"链接"选项卡,复制生成的链接 链接格式示例: ``` `https://your-grafana-server/d/xxx/dashboard?orgId=1` ``` ### 3. 在 AlertFusion 中配置 Grafana 面板 #### ✅第一步:访问监控大屏页面 在 AlertFusion 导航栏中点击"监控大屏"菜单,进入监控大屏管理页面。 #### ✅第二步:创建目录结构 在页面左侧点击"创建目录"按钮,建立层级化的目录结构来组织不同类型的监控面板。 #### ✅第三步:添加 Grafana 面板 在目录中点击"添加面板"按钮,在弹出的模态框中填写以下信息: - **面板名称**:为面板设置一个易于识别的名称 - **面板URL**:粘贴 Grafana 共享链接 - **描述信息**:添加面板的详细说明(可选) #### ✅第四步:管理面板和目录 - **编辑面板**:点击面板右侧的编辑按钮可修改面板信息 - **删除面板**:点击删除按钮可移除不需要的面板 - **目录管理**:支持目录的重命名、删除和层级调整 #### ✅第五步:使用监控大屏 - 通过左侧目录树快速切换不同的 Grafana 面板 - 右侧区域实时显示选中的监控面板内容 - 支持全屏查看和自动刷新功能 ## 📁 项目结构 #### 权限说明 **未登录用户权限:** - ✅ 查看告警统计数据和图表 - ✅ 查看历史告警记录 - ✅ 查看监控大屏(Grafana面板) - ❌ 无法配置AI分析设置(API密钥和地址被隐藏) - ❌ 无法配置告警通道设置 - ❌ 无法编辑或删除告警信息 - ❌ 无法添加或管理Grafana面板 **已登录用户权限:** - ✅ 拥有所有未登录用户的查看权限 - ✅ 配置AI分析设置(设置API密钥、地址等敏感信息) - ✅ 配置告警通道设置(企业微信、钉钉、飞书等) - ✅ 编辑和删除告警信息 - ✅ 添加、编辑和管理Grafana面板 - ✅ 管理个人信息(修改密码、更新个人资料等) 这种权限设计确保了系统的安全性,敏感配置信息只对已认证用户开放,同时保持了对访客用户的基本功能可用性。 ### ✅ AI辅助分析 系统集成了AI辅助分析功能,可以对告警信息进行智能分析,提供可能的问题原因和解决建议。管理员可以在系统中配置AI分析的相关参数,包括启用/禁用AI分析、设置分析模型等。 --- ## 🔮 未来开发计划 ### 1. 企业微信扫码登录 - 对接企业微信开放平台API - 实现扫码登录功能 - 支持企业微信身份认证 - 自动关联企业微信用户信息 ### 2. 增强用户管理功能 - 完善用户角色权限系统 - 添加用户组管理 - 支持批量导入用户 - 用户操作日志记录 ### 3. 告警分级通知 - 根据告警严重等级通知不同用户 - 支持自定义告警通知规则 - 告警升级机制 - 值班表与轮班通知 ### 4. 工单系统集成 - 告警自动创建工单 - 工单跟踪与管理 - 工单处理流程自定义 - 工单统计与报表 --- 如需进一步拓展支持的监控系统或个性化模板,欢迎提交 issue 或 PR!