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
  • 飞书卡片告警推送

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

### 配置 Zabbix 使用飞书告警机器人发送通知 #### 创建飞书告警群 为了实现通过Zabbix飞书发送告警信息,首先需要创建一个专门用于接收这些告警飞书聊天群组。 #### 添加群机器人 接着,在上述建立起来的飞书群里加入一个新的自定义应用作为机器人类型成员。这一步骤允许外部服务(即Zabbix)能够以自动化的方式向该群聊推送消息[^1]。 #### 获取WebHook地址 完成上一环节之后,应当能看到新添入的应用具有唯一的WebHook URL链接;此链接需被妥善保存下来以便稍后配置至Zabbix环境中去。具体操作是在飞书后台管理界面找到对应应用详情页中的“交互方式”,从中复制HTTP POST接口形式的WebHook地址[^3]。 #### 设置Zabbix告警媒介类型 进入Zabbix Web控制台,导航到“配置”-> “媒体类型”。点击右上方的“创建媒体类型”,输入名称如“Feishu webhook”。对于脚本内容部分,则应采用如下Python代码片段来构建请求体并向指定的目标URL发起POST请求: ```python import requests, json def send_feishu_msg(webhook_url,message): headers = {'Content-Type': 'application/json'} data = { "msg_type": "text", "content": {"text": message} } response = requests.post(url=webhook_url,headers=headers,data=json.dumps(data)) return response.status_code == 200 ``` 注意:这里的`message`变量代表由Zabbix传递过来的具体告警文本描述,而`webhook_url`则是之前从飞书中获取的那个独一无二的网络钩子路径。 #### 测试与验证 最后但同样重要的是要确保一切设置无误——可以通过手动触发一次测试级别的警告事件来看看是否能成功接收到预期的消息提醒于对应的飞书频道内。如果整个流程顺利的话,那么今后每当监测指标超出预设阈值时,相关人员就能即时获知异常状况了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值