Zabbix对接Deepseek,实现对报警信息的自动分析
时间:2025-2-28 16:17 作者:Anglei 分类: 自动化运维
目的
在zabbix通过webhook推送告警信息到企业微信时,添加处理建议。
效果
zabbix报警媒介设置deepSeekApiKey 填写我们刚刚创建的api key
脚本
try {
// 从 Zabbix 获取传递的参数
var params = JSON.parse(value),
req = new HttpRequest();
// 获取 DeepSeek 故障处理建议(请求中直接要求答复不超过200字)
var suggestion = getDeepSeekAdvice(params.Subject, params.Message, params.deepSeekApiKey);
// 生成告警信息,并追加故障处理建议
var alertMessage = generateMessage(params.Subject, params.Message);
var finalMessage = alertMessage + "\n\n**deepseek**:" + suggestion;
// 构造企业微信推送消息体
var msg = {
"msgtype": "markdown",
"markdown": {
"content": finalMessage
}
};
// 判断是否需要配置 HTTP 代理
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
}
// 添加 header 头变量
req.addHeader('Content-Type', 'application/json');
// 发送 HTTP POST 请求到企业微信
var resp = req.post(params.To, JSON.stringify(msg));
// 判断 HTTP 请求返回的状态码,非 200 则抛出异常
if (req.getStatus() != 200) {
Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'Response code: ' + req.getStatus());
throw 'Response code: ' + req.getStatus();
}
// 返回响应结果
resp = JSON.parse(resp);
return JSON.stringify(resp);
} catch (error) {
Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'Failed with error: ' + error);
throw 'Failed with error: ' + error;
}
// 用于生成告警消息的函数
function generateMessage(Subject, Message) {
// 当前时间,调整为北京时间
var currentDate = new Date();
var currentTimeInUTC = currentDate.getTime();
var currentTimeInBeijing = new Date(currentTimeInUTC + 8 * 60 * 60 * 1000);
var formattedCurrentTime = currentTimeInBeijing
.toISOString()
.replace('T', ' ')
.replace('Z', '')
.slice(0, -4)
.replace(/-/g, '.');
var message = Subject + "\n" + Message + "\n**当前时间**:" + formattedCurrentTime;
message = message.replace('Not classified', '未分类')
.replace('Information', '信息')
.replace('Warning', '警告')
.replace('Average', '一般严重')
.replace('High', '严重')
.replace('Disaster', '灾难');
return message;
}
// 调用 DeepSeek API 获取故障处理建议(要求返回不超过200字),添加了10秒超时设置
function getDeepSeekAdvice(subject, message, deepSeekApiKey) {
var deepSeekApiUrl = 'https://api.deepseek.com/v1/chat/completions'; // 确保使用正确的 API 地址
try {
var req = new HttpRequest();
// req.setTimeout(50000); // 设置10秒超时时间
req.addHeader('Content-Type: application/json'); // 修复语法错误
req.addHeader('Authorization: Bearer ' + deepSeekApiKey);
var requestBody = {
"model": "deepseek-chat", // 确保模型名称正确
"messages": [
{
"role": "system",
"content": "你是一个专业的运维工程师,精通linux、windows等各类操作系统的运维、网络设备运维、各类中间件运维,可以通过zabbix的告警信息,给出专业的处理意见。"},
{
"role": "user",
"content": "以下是一条告警信息,请提供不超过100字的处理建议:\n主题:" + subject + "\n内容:" + message
}
],
"max_tokens": 100, // 限制返回的 token 数量
"temperature": 0.7
};
var response = req.post(deepSeekApiUrl, JSON.stringify(requestBody));
if (req.getStatus() != 200) {
return req.getStatus() + response
Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'DeepSeek API error: ' + req.getStatus());
return "无法获取 DeepSeek 建议,请检查 API 状态。";
}
var responseData = JSON.parse(response);
return responseData.choices[0].message.content.trim();
} catch (error) {
// 判断错误信息中是否包含超时提示
if (error && error.toString().toLowerCase().indexOf("timeout") !== -1) {
return '接口调用超时!' + error.toString().toLowerCase();
}
Zabbix.log(Zabbix.LOG_LEVEL_ERROR, 'Failed to call DeepSeek API: ' + error);
return "调用 DeepSeek 接口失败,请检查日志。" + error.toString().toLowerCase();
}
}

推荐阅读:
![]() 路过(0) |
![]() 雷人(0) |
![]() 握手(1) |
![]() 鲜花(0) |
![]() 鸡蛋(0) |