AI生成运维告警通知,故障信息格式化推送

传统运维告警往往只推一段原始日志,值班人员需要手动翻看上下文才能判断严重程度。
本文介绍如何用AI将原始告警格式化成结构清晰的通知,并通过Webhook推送到钉钉或企业微信。
适合刚接触自动化运维、希望减少告警噪音的零基础读者。

整体思路与前置准备

核心流程分三步:监控系统触发Webhook,中间脚本调用大模型API整理告警内容,最后将格式化结果推送到IM工具。

你需要准备:

  • 一台能访问外网的Linux服务器(Ubuntu 20.04+或CentOS 7+)。
  • Python 3.8以上环境,安装requests库:pip3 install requests。
  • 一个大模型API Key(如OpenAI、通义千问、DeepSeek等,以官方文档为准)。
  • 一个钉钉或企业微信群机器人Webhook地址。
  • 监控系统告警Webhook配置权限(如Prometheus Alertmanager、Zabbix)。

验证点:在服务器上执行python3 -c "import requests; print(requests.__version__)",能输出版本号即可。

编写告警格式化脚本

在/opt/ai-alert/目录下创建format_alert.py,核心逻辑是接收告警JSON,拼接提示词,调用大模型API,再推送。

import json, requests, sys

LLM_API_KEY = "你的API_KEY"
LLM_URL = "https://api.example.com/v1/chat/completions"  # 以实际服务商为准
DINGTALK_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=你的token"

def format_with_ai(raw_alert):
    prompt = f"""请将以下运维告警整理成简洁通知,包含:故障级别、影响服务、发生时间、可能原因、建议操作。用中文输出,不超过150字。
告警原文:{raw_alert}"""
    headers = {"Authorization": f"Bearer {LLM_API_KEY}", "Content-Type": "application/json"}
    data = {"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": prompt}], "temperature": 0.3}
    resp = requests.post(LLM_URL, headers=headers, json=data, timeout=15)
    return resp.json()["choices"][0]["message"]["content"]

def send_to_dingtalk(text):
    payload = {"msgtype": "text", "text": {"content": text}}
    requests.post(DINGTALK_WEBHOOK, json=payload, timeout=10)

if __name__ == "__main__":
    raw = sys.stdin.read()
    formatted = format_with_ai(raw)
    send_to_dingtalk(formatted)

关键点:LLM_URL和model字段需替换为你实际使用的服务商参数,temperature设为0.3可让输出更稳定。

接入监控系统并测试推送

以Prometheus Alertmanager为例,编辑alertmanager.yml,添加Webhook接收器:

receivers:
- name: 'ai-webhook'
  webhook_configs:
  - url: 'http://你的服务器IP:5000/alert'
    send_resolved: true

然后写一个Flask接收端receiver.py:

from flask import Flask, request
import subprocess

app = Flask(__name__)

@app.route('/alert', methods=['POST'])
def alert():
    raw = request.get_data(as_text=True)
    subprocess.run(['python3', '/opt/ai-alert/format_alert.py'], input=raw, text=True)
    return 'ok', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

启动接收端:nohup python3 receiver.py &。
手动触发一条告警测试,观察钉钉群是否收到整理后的消息。

验证方式:
在Alertmanager界面点击“Silence”创建一个测试告警,
或直接curl -X POST -d '{"alert":
"CPU过高"}' http:
//localhost:
5000/alert
。

避坑与稳定性建议

  • 大模型API超时:设置timeout=15,并在脚本中加try...except,超时后降级为推送原始告警,避免告警丢失。
  • 敏感信息泄露:告警原文可能包含IP、密码,调用外部API前建议先脱敏,或使用私有化部署模型。
  • 频率限制:大模型API通常有QPS限制,可在脚本中加time.sleep(1)或使用队列缓冲。
  • 推送失败重试:钉钉机器人有频率限制,建议捕获异常后记录日志,不要无限重试。
  • 提示词稳定性:不同模型对同一提示词输出差异较大,建议固定模型版本,并保存几次输出做对比。

效果检查与后续优化

完成配置后,人为制造一次真实告警(如停掉一个测试服务),确认钉钉收到格式统一的通知,字段包含级别、服务名、时间、原因和建议。
如果输出内容过长,可调整提示词中的字数限制;
如果分类不准,可在提示词中给出示例。

常见疑问

问:没有公网服务器能跑吗?
答:可以,只要服务器能访问大模型API和钉钉Webhook即可,内网机器需配置代理。

问:必须用Python吗?
答:不是,Shell、Go都可以,核心是HTTP请求和JSON处理。

问:大模型API收费吗?
答:多数服务商有免费额度或按量计费,具体以官方定价为准。

这套方案的价值在于把零散告警变成可读通知,减少值班人员判断成本。
建议先在测试环境跑通,再逐步接入生产告警。

分享到:
上一篇
AI Agent自动备份网站,定时打包上传云端存储
下一篇
AI解析Nginx访问日志,统计访客与爬虫报表
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意