Zabbix+Deepseek实现AI告警分析(非本地部署大模型版)

前言

最近手伤了,更新频率下降……

近期在Zabbix社区看到了一篇文章:张世宏老师分享的《Zabbix告警分析新纪元:本地DeepSeek大模型实现智能化告警分析》,感觉很有意思,该文章分享了如何通过ollama本地部署的Deepseek实现Zabbix告警分析。

鉴于很多人都没有GPU服务器去本地部署大模型,又想测试Zabbix+AI的能力。本文通过硅基流动DeepSeek API来和Zabbix联动,实现AI智能分析告警的功能。

特别注意:本实验仅可用于测试环境,务必不要将生产与敏感数据放至公网而导致信息泄露!!!

技术架构

Zabbix Server -> Webhook触发器 -> 硅基流动API -> DeepSeek-r1模型 -> 分析结果

DeepSeek API获取

DeekSeek API服务官网已开放。但使用硅基流动可以使用注册赠送的tokens实现免费测试

1. 注册账号

https://cloud.siliconflow.cn/i/2JxLU9Cg

可以自行硅基流动官网直接注册,也可以点上面的链接进行注册。我的邀请码:2JxLU9Cg
在这里插入图片描述

2. 申请API-Key

注册登录后,点击API密钥->新建API密钥。填写该密钥的用途(描述)
在这里插入图片描述
新建好key之后,复制好这一段密钥,后续用于Scripts中。

Zabbix告警AI分析 实现

不赘述如何安装Zabbix
本文Zabbix为7.0lts,

1. 创建Scripts

登录Zabbix页面,点击“Alerts”->“Scripts”,点击"Create script"按钮。
在这里插入图片描述
填写以下内容:

Name: 自定义
Scope: Manual event action
Menu path: 选填,自定义
Type: Webhook
Parameters:  
   name:detail value: {
    
    EVENT.NAME},
   name: host value: {
    
    HOST.HOST}

在这里插入图片描述
Script中黏贴下述代码:

// 配置信息
var siliconflow_URL = 'https://api.siliconflow.cn/v1/chat/completions'  //硅基流动API URL,不变
var MODEL_NAME = 'deepseek-ai/DeepSeek-V3' //模型名,根据需求修改

/**
 * 生成告警消息
 * @param {Object} params - Zabbix 告警参数
 */
function generateAlertMessage(params) {
    
    
 return [
  '当前服务器告警,主机: ' + params.host,
  '详情: ' + params.detail,
  '请执行:1. 根本原因分析(概率排序)2. 提供修复命令3. 关联知识文档',
 ].join('\n')
}

/**
 * 发送消息到 Siliconflow Chat API
 * @param {string} message - 要发送的消息
 */
function sendToSiliconflow(message) {
    
    
 try {
    
    
  // 准备请求数据
  var payload = JSON.stringify({
    
    
   model: MODEL_NAME,
   messages: [
    {
    
    
     role: 'user',
     content: message,
    },
   ],
   stream: false,
  })

  // 记录请求日志
  Zabbix.Log(4, '[Siliconflow Webhook] 发送请求: ' + payload)

  // 发送请求
  var response = new HttpRequest()
  response.addHeader('Content-Type: application/json')
  response.addHeader('Authorization: Bearer [api-key]') //复制前文创建的api-key
  var responseData = response.post(siliconflow_URL, payload)

  // 检查响应
  if (response.getStatus() != 200) {
    
    
   throw new Error('API 请求失败,状态码: ' + response.getStatus())
  }
  // 记录成功日志
  Zabbix.Log(4, '[Siliconflow Webhook] 发送成功: ' + responseData)

  try {
    
    
   var result = JSON.parse(responseData)
   // chat API 返回的是 message 对象
   return result.choices[0].message.content || '成功发送到 Siliconflow'
  } catch (e) {
    
    
   return '成功发送到 Siliconflow(响应解析失败): ' + e.message
  }
 } catch (error) {
    
    
  // 记录错误日志
  Zabbix.Log(3, '[Siliconflow Webhook] 错误: ' + error.message)
  throw error
 }
}

/**
 * Webhook 主函数
 */
try {
    
    
 // 验证必要的输入参数
 if (!value) {
    
    
  throw new Error('未收到告警信息')
 }

 Zabbix.Log(4, '[Siliconflow Webhook] 收到告警信息: ' + value)

 // 构造告警消息
 var params
 try {
    
    
  params = JSON.parse(value)
 } catch (e) {
    
    
  throw new Error('告警信息格式无效: ' + e.message)
 }

 // 生成并发送告警消息
 var alertMessage = generateAlertMessage(params)
 var response = sendToSiliconflow(alertMessage)

 // 返回处理结果
 return '模型分析结果:\n' + response
} catch (error) {
    
    
 // 返回错误信息
 return '处理告警时出错: ' + error.message
}

2. Scripts关键参数说明

脚本根据《Zabbix告警分析新纪元:本地DeepSeek大模型实现智能化告警分析》修改,原文为ollama,这里改为硅基流动api

  1. siliconflow_URL:硅基流动的API URL,不用修改,保持默认
  2. MODEL_NAME: 模型名,根据需求更改。可用的如下:

Available options: deepseek-ai/DeepSeek-R1, Pro/deepseek-ai/DeepSeek-R1, deepseek-ai/DeepSeek-V3, Pro/deepseek-ai/DeepSeek-V3, deepseek-ai/DeepSeek-R1-Distill-Qwen-32B, deepseek-ai/DeepSeek-R1-Distill-Qwen-14B, deepseek-ai/DeepSeek-R1-Distill-Qwen-7B, deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B, Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B, Pro/deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B, deepseek-ai/DeepSeek-V2.5, Qwen/Qwen2.5-72B-Instruct-128K, Qwen/Qwen2.5-72B-Instruct, Qwen/Qwen2.5-32B-Instruct, Qwen/Qwen2.5-14B-Instruct, Qwen/Qwen2.5-7B-Instruct, Qwen/Qwen2.5-Coder-32B-Instruct, Qwen/Qwen2.5-Coder-7B-Instruct, Qwen/Qwen2-7B-Instruct, Qwen/Qwen2-1.5B-Instruct, Qwen/QwQ-32B-Preview, TeleAI/TeleChat2, THUDM/glm-4-9b-chat, Vendor-A/Qwen/Qwen2.5-72B-Instruct, internlm/internlm2_5-7b-chat, internlm/internlm2_5-20b-chat, Pro/Qwen/Qwen2.5-7B-Instruct, Pro/Qwen/Qwen2-7B-Instruct, Pro/Qwen/Qwen2-1.5B-Instruct, Pro/THUDM/chatglm3-6b, Pro/THUDM/glm-4-9b-chat

  1. Authorization: Bearer [api-key]:这里填写之前创建的API-Key。填写例子如下:
response.addHeader('Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyy')
  1. {EVENT.NAME}:Zabbix Problem的详情
  2. {HOST.HOST}:发生Problem的主机名

3. 需要注意

  1. 如果使用推理模型如DeepSeek-R1,推理+输出耗时会超过Zabbix 全局超时时间Zabbix Scripts超时时间,需要修改Zabbix配置文件以及数据表Scripts中对应Script的超时时间;
  2. Zabbix控制台输出不支持markdown,比较丑;

测试

在 Zabbix控制台 点击需要询问AI的Problem,选择刚刚定义的Script。
在这里插入图片描述
等待片刻,AI回复:
在这里插入图片描述

至此,试验完成。

参考链接

Zabbix告警分析新纪元:本地DeepSeek大模型实现智能化告警分析

硅基流动 API 文档

DeepSeek API 文档

猜你喜欢

转载自blog.csdn.net/Tassel_YUE/article/details/146047819
今日推荐