Zabbix结合AI告警推送—飞书机器人

Zabbix调用AI模型接口实现智能告警,提供修复建议

目录

Zabbix调用AI模型接口实现智能告警,提供修复建议

1、飞书群添加群机器人,保存Webhook 地址

2、zabbix服务器创建脚本(AI分析+告警推送)

3、zabbix 新建报警媒介

4、zabbix用户关联报警媒介

5、zabbix创建动作故障告警

6、飞书告警消息推送

 PS:以上已经完成zabbix结合AI告警,接下来我们优化飞书告警格式


1、飞书群添加群机器人,保存Webhook 地址

2、zabbix服务器创建脚本(AI分析+告警推送)

在 Zabbix 服务器的脚本目录 alertscripts 下创建一个 Python 脚本,例如 feishu.py

默认路径为 /usr/lib/zabbix/alertscripts/,具体路径可通过查看 Zabbix 配置文件 /etc/zabbix/zabbix_server.conf 中的 AlertScriptsPath 变量确认。

#!/usr/bin/env python3        
import sys
import requests
import json

# 飞书 Webhook 地址
FEISHU_WEBHOOK_URL = "填你的飞书Webhook地址"

# AI模型API接口配置,这里我用的kimi,有免费额度
API_KEY = "填你的API 密钥"
BASE_URL = "https://api.moonshot.cn/v1"  # 指定你的base URL

#发送飞书告警
def send_to_feishu(message):
    headers = {'Content-Type': 'application/json'}
    payload = {
        "msg_type": "text",
        "content": {
            "text": message
        }
    }
    response = requests.post(FEISHU_WEBHOOK_URL, headers=headers, data=json.dumps(payload))
    return response.status_code == 200


#告警发送AI分析返回建议
def get_ai_recommendation(alert_data):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    messages = [
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},    #默认设定,自行修改
        {"role": "user", "content": f"zabbix告警详情:{alert_data['alert_msg']},这是 Zabbix 告警,请提供修复建议,建议请简短,最好总结小于等于5点概括。"}         #防止告警建议条目太多,这里指定AI总结5点
    ]

    data = {
        "model": "moonshot-v1-8k",    # 指定 Moonshot 的模型,自行指定
        "messages": messages,
        "temperature": 0.3
    }

    response = requests.post(f"{BASE_URL}/chat/completions", headers=headers, json=data)
    if response.status_code == 200:
        result = response.json()
        return result.get("choices", [{}])[0].get("message", {}).get("content", "AI 系统无法提供建议")
    else:
        return f"请求失败,状态码: {response.status_code}"

if __name__ == "__main__":

    #传入zabbix告警
    alert_data = {
        "alert_msg": sys.argv[1]
    }

    # 记录收到的参数,可检查zabbix是否正常传参。不用可注销
    with open("/tmp/feishu_debug.log", "a") as log:
        log.write(f"Received arguments: {sys.argv}\n")


    ai_recommendation = get_ai_recommendation(alert_data)
    message = (
        f"IT监控预警事件通知:\n{alert_data['alert_msg']}\n"
        f"AI 修复建议:\n{ai_recommendation}"
    )
    if send_to_feishu(message):
        print("告警信息已成功发送到飞书。")
    else:
        print("告警信息发送到飞书失败。")

3、zabbix 新建报警媒介

  • 新建报警媒介,脚本参数填入:{ALERT.MESSAGE}

  • 配置告警模版

告警设备:{HOST.NAME}
告警IP:{HOST.HOST}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警级别:{EVENT.SEVERITY}{EVENT.NSEVERITY}
告警名称:{EVENT.NAME}
告警详情:{EVENT.OPDATA}

4、zabbix用户关联报警媒介

5、zabbix创建动作故障告警

  • 配置告警条件

  • 关联用户和报警媒介

6、飞书告警消息推送

配置完成测试告警推送

 PS:以上已经完成zabbix结合AI告警,接下来我们优化飞书告警格式

  • 默认使用简单文本格式,我们可以选择卡片格式美化告警(配置卡片标题颜色区分告警与恢复)
def send_to_feishu(message):
    headers = {'Content-Type': 'application/json'}
    payload = {
            "msg_type": "interactive",
            "card": {
                "schema": "2.0",
                "config": {
                    "style": {
                        "text_size": {
                            "normal_v2": {
                                "default": "normal",
                                "pc": "normal",
                                "mobile": "heading"
                            }
                        }
                    }
                },
                "body": {
                    "direction": "vertical",
                    "padding": "12px 12px 12px 12px",
                    "elements": [
                        {
                            "tag": "markdown",
                            "content": message,         #推送告警信息内容
                            "text_align": "left",
                            "text_size": "normal_v2",
                            "margin": "0px 0px 0px 0px"
                        },

                    ]
                },
                "header": {
                    "title": {
                        "tag": "plain_text",
                        "content": "网络监控预警通知:"   #主标题内容
                    },
                    "subtitle": {
                        "tag": "plain_text",
                        "content": ""                   #副标题内容,自己编辑
                    },
                    "template": "red",                  #卡片标题颜色
                    "padding": "12px 12px 12px 12px"
                }
            }
    }
    response = requests.post(FEISHU_WEBHOOK_URL, headers=headers, data=json.dumps(payload))
    return response.status_code == 200
  • 飞书卡片告警推送

推送格式根据个人喜好设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值