Zabbix进阶7--接入DeepSeek分析问题并提供解决方案
背景
由于现在AI的爆火,怎么有效使用AI来提高我们的工作成了很关键的一点,用好了,工作都能少做很多,所以我们尝试在Zabbix中接入DeepSeek来获取报警的相关知识
参考文章: https://blog.zabbix.com/creating-a-personal-assistant-in-zabbix-with-artificial-intelligence/29596/
文章中使用了Gemini,而我们这回选择改成Deepseek,看能不能实现相同的功能
步骤
创建script
Alert -> Script
创建一个手动执行的script,也就是说只有当你手动选择执行script的时候才能够运行该脚本
修改timeout
timeout参数必须修改,尤其是推理模型的时候,因为可能网络问题或者性能问题,默认的30s timeout时间是不够的,所以咱们尽可能改大一点,60s最大
修改Parameters参数
在Parameters中输入以下两个参数:
- alert_subject, {TRIGGER.NAME}, 即alert的名称,用来分析报错原因,所以alert的名称需要设置的正确
- api_key: API token, sk-xxxxx
- model: 模型名称
编辑脚本内容
在Script中输入以下内容
值得一说的是,这个是接入了阿里云的deepseep,如果你接入的是其他的平台,记得修改API地址以及接口格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| var DeepSeek = { params: {}, setParams: function (params) { if (typeof params !== 'object') { return; } DeepSeek.params = params; if (typeof DeepSeek.params.api_key !== 'string' || DeepSeek.params.api_key === '') { throw 'API key for DeepSeek is required.'; } DeepSeek.params.url = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions'; }, request: function (data) { if (!DeepSeek.params.api_key) { throw 'API key is missing.'; } var request = new HttpRequest(); request.addHeader('Content-Type: application/json'); request.addHeader('Authorization: Bearer ' + DeepSeek.params.api_key); var response = request.post(DeepSeek.params.url, JSON.stringify(data));
if (request.getStatus() < 200 || request.getStatus() >= 300) { throw 'DeepSeek API request failed with status code ' + request.getStatus() + '.'; }
try { response = JSON.parse(response); } catch (error) { Zabbix.log(4, '[ DeepSeek Webhook ] Failed to parse response.'); response = null; } return response; } };
try { var params = JSON.parse(value), data = {}, result = "", required_params = ['alert_subject'];
Object.keys(params).forEach(function (key) { if (required_params.indexOf(key) !== -1 && params[key] === '') { throw 'Parameter "' + key + '" cannot be empty.'; } });
data = { "model": "deepseek-v3", // 指定模型 "messages": [ { "role": "user", "content": "Alert : " + params.alert_subject + " occurred on Zabbix. " + "Suggest possible causes and solutions to resolve this issue. " + "Provide concise points (10 lines max) including root causes, debug commands, and mitigation steps." } ] };
DeepSeek.setParams({api_key: params.api_key}); Zabbix.log(3, '[ DeepSeek debug ] ' + data); var response = DeepSeek.request(data);
if (response && response.choices && response.choices.length > 0) { result = response.choices[0].message.content.trim(); } else { throw 'No valid response from DeepSeek.'; }
return result;
} catch (error) { Zabbix.log(3, '[ DeepSeek Webhook ] ERROR: ' + error); throw 'Sending failed: ' + error; }
|
测试脚本是否工作
Monitoring -> Problems中,随便找一个问题,点击问题,会出现刚刚创建的script选项
总结
这个个人感觉只是一个初阶版,只能根据该问题的title进行分析并给出对应的建议,无法结合其他信息进一步分析
而且,由于网络问题,API很容易超时,导致无法展示结果,因此对API的性能和网络有较高要求
前Android/Vue开发,现Infra从业人员,主营监控/AWS