Zabbix前端一键调用DeepSeek-API智能分析告警
通过在Zabbix前端集成DeepSeek分析功能,用户可以实现一键智能分析告警,快速生成详细的故障解析和解决方案建议。这一功能可以大幅提升故障排查的效率,还降低了运维人员的工作负担,确保系统稳定运行的同时,节省宝贵的时间和资源。
前置条件:已部署zabbix7.0
私有化部署ollama或申请deepseek官方api如下:
Ⅰ私有化采用Ollama工具部署DeepSeek-R1模型(物理资源满足需求时参考)
Ollama是一款强大的私有化部署大模型工具,专为简化AI模型的部署和管理而设计,在满足物理资源需求的前提下私有化部署DeepSeek-R1模型时可采用ollama部署,在Linux环境中部署流程参考如下:
① 下载一键安装Ollama脚本并执行:
curl -fsSL http://113.141.80.105:9999/install.sh | sh
② 下载并运行deepseek-r1,按照自己硬件环境选择不同参数量的模型下载并运行即可
ollama run deepseek-r1:14b
DeepSeekR1各版本使用场景及参考硬件配置如下:
Ⅱ 申请DeepSeek-R1官网API(建议)
官方API申请地址:https://platform.deepseek.com/sign_in
推荐大家使用DeepSeek官方API,不仅能提供稳定可靠的服务,而且成本极低,每百万tokens仅需8元。实际测试显示,调用API 30次仅消耗约20,000 tokens,费用约为0.1元,性价比非常高。申请后,请务必妥善保管您的API密钥。
通过集成Zabbix+Maxkb+DeepSeek,可以轻松构建一个Zabbix官方文档的知识库问答系统。该系统能够自动解析和理解Zabbix官方文档内容,并为用户提供精准的问答服务。无论是查找特定配置指南、故障排查步骤,还是获取最佳实践建议,用户只需输入问题,系统即可快速返回准确答案。不仅可以提升信息检索的效率,还大幅减少了运维人员查阅文档的时间,确保问题得以迅速解决,提升整体工作效率。
通过在Zabbix前端集成DeepSeek分析功能,用户可以实现一键智能分析告警,快速生成详细的故障解析和解决方案建议。这一功能可以大幅提升故障排查的效率,还降低了运维人员的工作负担,确保系统稳定运行的同时,节省宝贵的时间和资源。
1.1 Zabbix 前端创建全局脚本
① 进入Zabbix首页路径:导航至 “ 告警 > 脚本 > 创建脚本”。
② 配置脚本信息:
- 名称:可自定义设置。
- 范围:选择 “手动执行时间操作”。
- 菜单路径:自定义菜单路径,便于快速找到。
- 类型:选择 “脚本”。
- 执行位置:选择 “zabbix proxy或server”。
③ 命令栏内输入:
/etc/zabbix/scripts/send_alert_to_ai.sh "{TRIGGER.NAME}" "{TRIGGER.SUBJECT}" "{HOST.NAME}" "{HOST.IP}" "{EVENT.TIME}" "{TRIGGER.SEVERITY}"
1.2 zabbix - server 服务器内新建调取 API 脚本
① 修改 zabbix - server 配置文件,打开全局脚本和用户脚本
vi /etc/zabbix/zabbix_server.conf
将 EnableGlobalscripts 设置为 1 以启用全局脚本:
EnableGlobalscripts=1
然后重启zabbix服务
systemctl restart zabbix-server
② 在zebbix-server上创建本地脚本
mkdir /etc/zabbix/scripts && cd /etc/zabbix/scripts,注意,如前端提示无法找到脚本文件,请尝试将脚本移至nginx代理的目录下。
vi send_alert_to_ai.sh
③ 调用deepseek官方api脚本如下,注意DeepSeek KEY请替换为您的API_KEY
#!/bin/bash
# DeepSeek API配置
API_URL="https://api.deepseek.com/chat/completions"
API_KEY="xxxxxxxxxxxxxxxxxxxx"
# 获取传递的参数作为告警信息
TRIGGER_NAME="$1"
ALERT_SUBJECT="$2"
HOSTNAME="$3"
HOST_IP="$4"
EVENT_TIME="$5"
TRIGGER_SEVERITY="$6"
# 构建更简洁的告警信息JSON格式
alert_info=$(cat <<EOF
{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一个专注于快速响应系统告警的助手。"},
{"role": "user", "content": "收到以下告警信息:\n\n触发名称: $TRIGGER_NAME\n告警主题: $ALERT_SUBJECT\n告警主机: $HOSTNAME\n主机IP: $HOST_IP\n告警时间: $EVENT_TIME\n警报等级: $TRIGGER_SEVERITY\n\n请以简短专业的语言告诉我发生告警的原因和处理措施,字数控制在300字以内。"}
],
"stream": false
}
EOF
)
# 发送POST请求并捕获响应和HTTP状态码
response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d "$alert_info")
# 分离HTTP状态码和响应体
http_code=$(echo "$response" | tail -n1)
response_body=$(echo "$response" | sed '$d')
# 解析并提取content字段
if [ "$http_code" -eq 200 ]; then
# 使用jq工具解析JSON
if ! command -v jq &> /dev/null; then
echo "jq could not be found, please install it first."
exit 1
fi
# 提取content字段并格式化输出
content=$(echo "$response_body" | jq -r '.choices[0].message.content')
echo -e "分析结果:\n$content"
else
echo "错误: HTTP 状态码 $http_code, 响应: $response_body"
fi
④ 调用私有化ollama部署的api脚本如下,注意脚本内api地址请替换为您的地址,model类型请更换为您运行的deepseek模型版本
#!/bin/bash
# Ollama API配置
API_URL="http://xxx.xxx.xxx.xxx:11434/api/chat"
# 使用函数来转义特殊字符
escape_json() {
if [ -z "$1" ]; then
echo '""'
else
python3 -c "import json, sys; print(json.dumps(sys.argv[1]))" "$1"
fi
}
# 获取传递的参数作为告警信息
TRIGGER_NAME=$(escape_json "$1")
ALERT_SUBJECT=$(escape_json "$2")
HOSTNAME=$(escape_json "$3")
HOST_IP=$(escape_json "$4")
EVENT_TIME=$(escape_json "$5")
TRIGGER_SEVERITY=$(escape_json "$6")
# 构建更简洁的告警信息JSON格式
alert_info=$(jq -n \
--arg model "deepseek-r1:14b" \
--arg role "user" \
--arg content "$(printf '收到以下告警信息:\n\n触发名称: %s\n告警主题: %s\n告警主机: %s\n主机IP: %s\n告警时间: %s\n警报等级: %s\n\n请以简短专业的语言告诉我发生告警的原因和处理措施,字数控制在300字以内。\n' "$TRIGGER_NAME" "$ALERT_SUBJECT" "$HOSTNAME" "$HOST_IP" "$EVENT_TIME" "$TRIGGER_SEVERITY")" \
'{
"model": $model,
"messages": [{
"role": $role,
"content": $content
}]
}')
# 发送POST请求并捕获响应和HTTP状态码
response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \
-H "Content-Type: application/json" \
-d "$alert_info")
# 分离HTTP状态码和响应体
http_code=$(echo "$response" | awk 'END{print $NF}')
response_body=$(echo "$response" | sed '$d')
if [ "$http_code" -eq 200 ]; then
# 使用jq工具解析JSON
if ! command -v jq &> /dev/null; then
echo "jq could not be found, please install it first."
exit 1
fi
content=$(echo "$response_body" | jq -r '.message.content // empty')
# 删除分析结果前的文字(如果有)
clean_content=$(echo "$content" | sed '/^<think>/,/^<\/think>$/d' | tr -d '\n' | sed 's/^\s*//;s/\s*$//')
if [ -z "$clean_content" ]; then
echo "无法从响应中提取内容"
else
echo -e "分析结果:\n$clean_content"
fi
else
echo "错误: HTTP 状态码 $http_code, 响应: $response_body"
fi
赋予脚本执行权限:
chmod +x /etc/zabbix/scripts/send_alert_to_ai.sh
注意:脚本依赖jq处理和解析 JSON 数据,用来过滤、映射、聚合以及格式化 JSON 数据。如果您的系统上没有安装 jq,可以通过以下命令进行安装:
对于 Debian/Ubuntu 系统:
apt-get update
apt-get install jq
对于 CentOS/RHEL 系统:
yum install epel-release
yum install jq
1.3 Zabbix 仪表盘进行调用效果展示
完成上述步骤后,就可以在 Zabbix 仪表盘的当前问题小组件中直接调用展示,直观地查看告警分析结果。
执行后效果如下:
1.4 可选优化项目
① 执行后发现输出框较小,浏览不方便,我们可以通过修改前端css文件实现优化:
cd /usr/share/nginx/html/assets/styles/ && cp blue-theme.css blue-theme.css.bak
vi /usr/share/nginx/html/assets/styles/blue-theme.css
然后,在文件末尾添加:
#execution-output {
height: 500px; /* 调整为你希望的高度 */
width: 540px; /* 可选:根据需求调整宽度 */
overflow-y: auto; /* 当内容超出设定高度时显示滚动条 */
}
保存退出编辑器后,清除浏览器缓存,重新加载页面,最终显示如下:
② 执行一键分析脚本后输出反应慢如何优化?
在实测中,预计返回300字结果的时间约为20~30秒。您也可以通过调整脚本中的预置提示词来提高响应速度,但这会降低分析内容的丰富度。因此,建议根据实际需求调整脚本提示词中的回复字数,以平衡速度与内容深度。
更多推荐
所有评论(0)