目录
- 前言
- 技术架构
- [DeepSeek API获取](#DeepSeek API获取)
-
- [1. 注册账号](#1. 注册账号)
- [2. 申请API-Key](#2. 申请API-Key)
- [Zabbix告警AI分析 实现](#Zabbix告警AI分析 实现)
-
- [1. 创建Scripts](#1. 创建Scripts)
- [2. Scripts关键参数说明](#2. Scripts关键参数说明)
- [3. 需要注意](#3. 需要注意)
- 测试
- 参考链接
前言
最近手伤了,更新频率下降......
近期在Zabbix社区看到了一篇文章:张世宏老师分享的《Zabbix告警分析新纪元:本地DeepSeek大模型实现智能化告警分析》,感觉很有意思,该文章分享了如何通过ollama本地部署的Deepseek实现Zabbix告警分析。
鉴于很多人都没有GPU服务器去本地部署大模型,又想测试Zabbix+AI的能力。本文通过硅基流动
的DeepSeek API
来和Zabbix联动
,实现AI智能分析告警的功能。
特别注意:本实验仅可用于测试环境,务必不要将生产与敏感数据放至公网而导致信息泄露!!!
技术架构
shell
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"按钮。
填写以下内容:
json
Name: 自定义
Scope: Manual event action
Menu path: 选填,自定义
Type: Webhook
Parameters:
name:detail value: {EVENT.NAME},
name: host value: {HOST.HOST}

在Script
中黏贴下述代码:
javascript
// 配置信息
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
- siliconflow_URL:硅基流动的API URL,不用修改,保持默认
- 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
- Authorization: Bearer [api-key]:这里填写之前创建的API-Key。填写例子如下:
shell
response.addHeader('Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyy')
- {EVENT.NAME}:Zabbix Problem的详情
- {HOST.HOST}:发生Problem的主机名
3. 需要注意
- 如果使用推理模型如
DeepSeek-R1
,推理+输出耗时会超过Zabbix 全局超时时间
和Zabbix Scripts超时时间
,需要修改Zabbix配置文件以及数据表Scripts中对应Script的超时时间; - Zabbix控制台输出不支持markdown,比较丑;
测试
在 Zabbix控制台 点击需要询问AI的Problem,选择刚刚定义的Script。
等待片刻,AI回复:
至此,试验完成。