Zabbix告警分析新革命:DeepSeek四大创新场景助力智能运维

简介: 面对日益复杂的IT环境,高效分析监控数据并快速响应成为运维的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新应用,包括一键式智能告警分析、Zabbix文档知识库助手及钉钉告警增强功能。通过部署指南和实用脚本,展示了如何提升故障排查效率,为运维工程师提供高效解决方案。

【导读】⾯对⽇益复杂的IT环境,如何⾼效分析监控数据并快速响应已成为运维工作中的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新性应用,包括一键式智能告警分析、Zabbix文档知识库助手功能以及钉钉告警增强功能。通过详尽的部署指南和实用脚本,展示了DeepSeek如何助力提升故障排查效率,为运维工程师与系统管理员提供高效解决方案。


【作者】程哲 Zabbix开源社区代表 2024Zabbix中国峰会演讲嘉宾 Zabbix7.0中文手册译者

图片 1.png

1 前置准备(部署zabbix7.0及准备DeepSeek模型API)

关于Zabbix的详尽安装步骤,本文不再展开讨论。笔者所构建的运行环境基于Zabbix 7.0、Nginx以及MySQL 8.0版本,且文中提及的所有应用场景均已在该特定配置环境下通过了实际验证。

1.1 私有化采用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各版本使用场景及参考硬件配置如下:

图片 2.png
图片 3.png

1.2 申请DeepSeek-R1官网API(建议)

官方API申请地址:https://platform.deepseek.com/sign_in

推荐大家使用DeepSeek官方API,不仅能提供稳定可靠的服务,而且成本极低,每百万tokens仅需8元。实际测试显示,调用API 30次仅消耗约20,000 tokens,费用约为0.1元,性价比非常高。申请后,请务必妥善保管您的API密钥。

2 场景一:Zabbix前端一键调用DeepSeek-API智能分析告警

通过在Zabbix前端集成DeepSeek分析功能,用户可以实现一键智能分析告警,快速生成详细的故障解析和解决方案建议。这一功能可以大幅提升故障排查的效率,还降低了运维人员的工作负担,确保系统稳定运行的同时,节省宝贵的时间和资源。

2.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}"

图片 4.png

2.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

2.3 Zabbix 仪表盘进行调用效果展示

完成上述步骤后,就可以在 Zabbix 仪表盘的当前问题小组件中直接调用展示,直观地查看告警分析结果。

图片 5.png

执行后效果如下:

图片 6.png

2.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; /* 当内容超出设定高度时显示滚动条 */
}

保存退出编辑器后,清除浏览器缓存,重新加载页面,最终显示如下:
图片 7.png

② 执行一键分析脚本后输出反应慢如何优化?

在实测中,预计返回300字结果的时间约为20~30秒。您也可以通过调整脚本中的预置提示词来提高响应速度,但这会降低分析内容的丰富度。因此,建议根据实际需求调整脚本提示词中的回复字数,以平衡速度与内容深度。

3 场景二:基于DeepSeek构建Zabbix官方文档知识库问答系统

通过集成Zabbix+Maxkb+DeepSeek,可以轻松构建一个Zabbix官方文档的知识库问答系统。该系统能够自动解析和理解Zabbix官方文档内容,并为用户提供精准的问答服务。无论是查找特定配置指南、故障排查步骤,还是获取最佳实践建议,用户只需输入问题,系统即可快速返回准确答案。不仅可以提升信息检索的效率,还大幅减少了运维人员查阅文档的时间,确保问题得以迅速解决,提升整体工作效率。

3.1 系统架构

Zabbix:需提前部署完Zabbix,建议5.0以上版本。

Maxkb:一款基于大语言模型的开源知识库问答系统,支持快速上传文档、自动爬取在线文档,并能无缝嵌入第三方业务系统,为企业提供智能问答和信息管理的高效解决方案。

Deepseek:建议调用deepseek官方api,也可本地采用ollama工具私有部署。

图片 8.png

3.2 安装并配置Maxkb

部署环境选用Linux系统,安装Maxkb前请提前安装好Docker,Docker安装Maxkb命令如下:

docker run -d --name=maxkb -p 8080:8080 -v ~/.max
通过浏览器访问 MaxKB:
http://目标服务器 IP 地址:8080

默认登录信息
用户名:admin
默认密码:MaxKB@123..

3.3 配置模型参考一(DeepSeek官方-API)

进入系统管理-模型设置-添加模型列表中,列出了所有可调用模型,选择添加deepseek模型,模型名称填写deepseek-api,模型类型选择大语言模型,基础模型选择“deepseek-chat”,最后将申请到的API Key填入即可。

图片 9.png

3.4 配置模型参考二(基于Ollama私有化部署的deepseek)

进入系统管理-模型设置-添加模型列表中,选择添加 Ollama 模型,名称可填写deepseek-api,模型类型选择大语言模型,基础模型手动输入“deepseek-r1:7b”(以实际部署模型版本为准),API域名填写部署ollama的服务器ip+11434端口号,API Key未设置的话可输入任意字符,点击确定即可。

图片 10.png



### 3.5 新建知识库并配置
点击创建知识库,按需填入知识库名称及描述等必填。

注意创建知识库时您可以选择两种类型:通用型和Web站点型。

通用型允许您上传或手动录入文档。例如,您可以上传本地的Zabbix 7.0手册PDF文件。

Web站点型则可以直接同步网站文本数据。对于Zabbix官方文档,您可以使用以下网址进行同步: https://www.zabbix.com/documentation/7.0/zh/manual

无论选择哪种方式,上传完成后系统将自动进行索引并进行向量化处理。只需等待索引完成即可。
图片 11.png


### 3.6 新建应用并配置
随后,选择“应用”并创建新应用。输入自定义名称和描述后,选择“简单配置”即可快速完成设置。如果需要更复杂的流程,您也可以进行高级编排,但本文不再展开讨论这部分内容。

图片 12.png


在设置中,根据实际需求修改AI模型和自定义开场白,并关联已上传的知识库。您可以在参数设置中调整检索模式和召回分段,通过测试不断优化,直至达到满意的效果。

图片 13.png


### 3.7 嵌入至Zabbix前端
您还可以将助手添加到Zabbix前端,以便在页面上随时调用。具体步骤为:进入“应用” -> “Zabbix知识库小助手” -> “概览” -> “嵌入第三方”。

图片 14.png



找到浮窗模式,复制所有代码,编辑Zabbix前端文件,根据zabbix安装路径查找,需要编辑page_footer.php和layout.htmlpage.php两个前端文件,具体行数可能因版本不同有所差异,此处仅以笔者环境为例:

plain vi /usr/share/zabbix/include/page_footer.php +62

在第62行加入

echo ' *(此处为maxkb中复制的代码)';

plain vi /usr/share/zabbix/app/views/layout.htmlpage.php +96

在第96行加入

echo ' *(此处为maxkb中复制的代码)';

最后重启zabbix即可

plain systemctl restart zabbix-server


### 3.8 效果展示
图片 15.png



## 4 场景三:为钉钉告警添加DeepSeek深度分析
通过集成DeepSeek深度分析功能,钉钉推送告警信息时能自动解析告警,提供精准故障诊断和解决方案,助力运维人员快速定位并解决问题,提高系统维护效率。

### 4.1 钉钉告警群添加机器人
在钉钉群中创建机器人,并在安全设置中勾选关键词“告警”。然后获取 webhook 地址并妥善保存。

图片 16.png


### 4.2 编辑告警脚本
脚本使用Python3解释器执行,需要确保系统上已安装Python 3以及对应的python库、工具

对于Ubuntu/Debian系统

apt update
apt install python3 python3-pip
pip3 install requests

对于CentOS/RHEL系统

dnf install python3
pip3 install requests

然后编辑脚本:

vi /usr/lib/zabbix/alertscripts/deepseekdingding.py

脚本内容如下,请将脚本中的钉钉 Webhook 地址和 DeepSeek API 密钥替换为您的实际值:

#!/usr/bin/env python3
#coding:utf-8
import requests
import sys
import json

class DingTalkBot(object):
    # 发送消息
    def send_news_message(self, webhook_url, subject, content, ai_response):
        url = webhook_url
        data = {
            "msgtype": "markdown",
            "markdown": {
                "title": subject,
                "text": f"{subject}\n{content}\n\n【DeepSeek分析】:\n\n{ai_response}"  
            }
        }
        headers = {'Content-Type': 'application/json'}
        response = requests.post(url, headers=headers, data=json.dumps(data))
        return response

if __name__ == '__main__':
    WEBHOOK_URL = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx'  # 钉钉Webhook地址
    API_URL = 'https://api.deepseek.com/chat/completions'
    API_KEY = 'sk-xxxxxxxxxxxxxx'  # DeepSeek API密钥

    if len(sys.argv) < 3:
        print("Error: Not enough arguments provided.")
        sys.exit(1)

    subject = str(sys.argv[1])  
    content = str(sys.argv[2])  

    print(f"Received subject: {subject}")
    print(f"Received content: {content}")

    try:
        headers = {
            'Authorization': f'Bearer {API_KEY}',
            'Content-Type': 'application/json',
        }
        payload = {
            "model": "deepseek-chat",  # 使用指定的DeepSeek模型
            "messages": [
                {"role": "user", "content": f"你是一个专业的IT运维专家,请使用简洁且专业的语言告诉我发生这些告警的原因和处理建议,字数控制在100字以内{content}"}
            ]
        }
        ai_response = requests.post(API_URL, headers=headers, json=payload)
        ai_response.raise_for_status()  # 确保请求成功
        ai_response_content = ai_response.json().get('choices', [{}])[0].get('message', {}).get('content', '')
    except Exception as e:
        ai_response_content = "\n接口调用超时或出错,请检查配置后重试"

    bot = DingTalkBot()
    response = bot.send_news_message(WEBHOOK_URL, subject, content, ai_response_content)

    if response.status_code == 200:
        print("消息发送成功")
    else:
        print(f"消息发送失败: {response.text}")

保存退出后给脚本赋予执行权限

chmod +x deepseekdingding.py

4.3 编辑Zabbix前端

新建告警媒介并添加消息模板
进入告警-媒介-创建媒介类型,填写内容如下:

名称      ai-钉钉
类型       脚本
脚本名称   deepseekdingding.py
脚本参数
{ALERT.MESSAGE}
{ALERT.SUBJECT}

图片 17.png
图片 18.png

新建告警动作
进入告警-动作-触发器动作-创建动作,名称可填写钉钉告警-deepseek,条件按需要勾选
图片 19.png

在动作中的操作选项,编辑如下:
Send to media type      ai-钉钉
主题      故障告警: {EVENT.NAME}
消息
【Zabbix告警通知】

告警组:{TRIGGER.HOSTGROUP.NAME}

告警主机:{HOSTNAME1} 

主机IP:{HOST.IP}

告警时间:{EVENT.DATE} {EVENT.TIME}

警报等级:{TRIGGER.SEVERITY}

问题信息:{TRIGGER.NAME}

事件ID: {EVENT.ID}

图片 20.png
图片 21.png

更新确认即可。

给用户配置通知权限

进入用户-用户-告警媒介中新增一条如下:

图片 22.png

添加后,点击更新即可。

4.4 效果展示

图片 23.png

5 场景四:一键进行系统服务深度分析

通过结合Zabbix前端一键脚本调用系统服务状态、配置文件、日志文件,可以实现针对某项特定服务的深度巡检分析,效果展示如下:

图片 24.png
图片 25.png
图片 26.png

预告:该场景笔者将在3月29日的zabbix meetup郑州站上与各位共同研讨,后续将在优化后提供详细的部署流程,敬请期待!

6 后记:DeepSeek与Zabbix结合的实践与感想

通过整合DeepSeek的智能分析能力与Zabbix的强大监控功能,我们成功实现Zabbix前端一键智能告警分析、构建高效的知识库问答系统,增强钉钉告警机制,并探讨了一键进行系统服务深度分析。这些应用场景的集成不仅可以提高故障诊断的速度与准确性,还能有效缓解运维团队的工作压力。智能化监控与分析的应用,使我们在面对复杂且多变的IT环境时能够迅速响应并解决问题,从而确保系统的高可用性和稳定性。

相关文章
|
16天前
|
运维 监控 数据可视化
一文拆解 YashanDB Cloud Manager,数据库运维原来还能这么“智能”!
传统数据库运维依赖人工,耗时耗力还易出错。YashanDB Cloud Manager(YCM)作为“智能运维管家”,实现主动、智能、可视化的运维体验。它提供实时资源监控、智能告警系统、自动巡检机制、高可用架构支持和强大的权限管理功能,帮助用户统一管理多实例与集群,减少人工干预,构建现代化数据库运维体系,让企业高效又安心地运行数据库服务。
|
26天前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
262 51
|
14天前
|
机器学习/深度学习 人工智能 运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
AI为网络可靠性加“稳”——从断网烦恼到智能运维
74 2
|
1月前
|
存储 人工智能 运维
idc机房智能运维解决方案
华汇数据中心一体化智能运维方案应运而生,以“自主可控、精准洞察、智能决策”三大核心能力,助力企业实现运维效率提升与综合成本下降的数字化转型目标。
111 24
|
6月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
136 4
|
3月前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
|
3月前
|
Linux 持续交付 调度
HTTPS 证书自动化运维:https证书管理系统-自动化部署
本指南介绍如何部署Linux服务器节点。首先复制生成的Linux脚本命令,然后将其粘贴到目标服务器上运行。接着刷新页面查看节点记录,并点击“配置证书”选择证书以自动部署。最后,节点部署完成,后续将自动调度,无需人工干预。
HTTPS 证书自动化运维:https证书管理系统-自动化部署
|
3月前
|
运维
HTTPS 证书自动化运维:https证书管理系统之自动化签发
通过访问【https://www.lingyanspace.com】注册账户,进入证书服务菜单并新增证书。填写域名(单域名、多域名或泛域名),创建订单后添加云解析DNS记录进行质检。确认完成后可下载证书,并支持后续查看、更新和定时更新功能。证书过期前15天自动更新,需配置邮箱接收通知。
HTTPS 证书自动化运维:https证书管理系统之自动化签发
|
3月前
|
人工智能 运维 监控
AI辅助的运维流程自动化:实现智能化管理的新篇章
AI辅助的运维流程自动化:实现智能化管理的新篇章
937 22
|
3月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
147 9

热门文章

最新文章

推荐镜像

更多
下一篇
oss创建bucket