偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

智能運維新范式:Zabbix 與 DeepSeek 協(xié)同構(gòu)建自動分析報表

原創(chuàng) 精選
人工智能
今天,我們通過一個案例,探索全新的協(xié)同模式:通過 DeepSeek 大模型與 Zabbix 的技術(shù)融合,搭建一套智能分析報表應(yīng)用,讓 AI 自動解析監(jiān)控數(shù)據(jù)、生成專業(yè)分析報告,為運維決策提供精準支持。

作者 | 崔皓

審校 | 重樓

開篇

在人工智能技術(shù)飛速迭代的今天,大模型正以驚人的速度滲透到各行各業(yè),從金融風(fēng)控到醫(yī)療診斷,從智能制造到內(nèi)容創(chuàng)作,通用人工智能的能力邊界不斷被拓展。隨著技術(shù)的成熟,各行業(yè)不再滿足于通用大模型的基礎(chǔ)能力,而是開始將其與垂直領(lǐng)域深度融合,通過定制化開發(fā)解決行業(yè)痛點 —— 運維領(lǐng)域同樣迎來了這場智能化變革。

在日常的 IT 運維工作中,Zabbix 作為廣泛使用的監(jiān)控系統(tǒng),時刻守護著服務(wù)器、網(wǎng)絡(luò)設(shè)備和業(yè)務(wù)系統(tǒng)的穩(wěn)定運行。當(dāng) CPU 利用率突增、內(nèi)存占用異?;蚍?wù)響應(yīng)延遲時,它能第一時間捕獲異常數(shù)據(jù)并觸發(fā)告警。但面對海量的監(jiān)控指標(biāo)和告警信息,運維人員往往需要花費大量時間分析根因、制定對策,效率瓶頸逐漸顯現(xiàn)。

今天,我們通過一個案例,探索全新的協(xié)同模式:通過 DeepSeek 大模型與 Zabbix 的技術(shù)融合,搭建一套智能分析報表應(yīng)用,讓 AI 自動解析監(jiān)控數(shù)據(jù)、生成專業(yè)分析報告,為運維決策提供精準支持。

為了讓大家對案例有一個整體的認識,會詳細描述程序安裝、具體操作、代碼執(zhí)行的每個步驟。包括: Zabbix 安裝、Server 與 Agent 關(guān)聯(lián),設(shè)置媒介、觸發(fā)器與動作,以及DeepSeek處理監(jiān)控參數(shù)并生成報表等四大部分,全程干貨大家坐穩(wěn)扶好,我發(fā)車。

一、安裝 Zabbix

Zabbix 是一款開源的企業(yè)級監(jiān)控解決方案,由 Zabbix Server 和 Zabbix Agent 兩部分核心組件構(gòu)成。Server 作為監(jiān)控中樞,負責(zé)接收、存儲監(jiān)控數(shù)據(jù)并觸發(fā)告警,支持分布式部署以應(yīng)對大規(guī)模監(jiān)控場景;Agent 則部署在被監(jiān)控設(shè)備上,實時采集 CPU、內(nèi)存、磁盤等硬件及系統(tǒng)指標(biāo),通過主動或被動模式將數(shù)據(jù)推送至 Server。

二者協(xié)同工作,可實現(xiàn)對服務(wù)器、網(wǎng)絡(luò)設(shè)備、應(yīng)用程序等 IT 基礎(chǔ)設(shè)施的全面監(jiān)控,憑借靈活的觸發(fā)器配置和豐富的可視化功能,成為運維人員掌握系統(tǒng)狀態(tài)的重要工具。接下來我們需要通過 Docker 的方式安裝二者,并在其基礎(chǔ)上進行報警的設(shè)置和智能報表的生成。

前置條件

在開啟 Zabbix 與 DeepSeek 的智能報表開發(fā)之旅前,需先安裝好 Docker。Docker 是一款開源的應(yīng)用容器引擎,能助力開發(fā)者將應(yīng)用及其依賴便捷打包至可移植的容器內(nèi),實現(xiàn)跨環(huán)境快速部署,具有輕量、高效等優(yōu)勢。前往 Docker 官網(wǎng),依據(jù)自身操作系統(tǒng)(Windows、Mac、Linux 等),下載對應(yīng)版本,按安裝向?qū)崾就瓿刹僮?,具體的安裝步驟比較簡單,在這里就不贅述了。

通過如下命令確認安裝。

docker --version

如果看到如下輸出:

Docker version 28.1.1, build 4eba377

說明 Docker 已經(jīng)安裝好了。

下載 Zabbix docker yaml 文件

完成了 Docker 安裝之后,我們開始Zabbix 的安裝,首先就是 Zabbix Server 了。 由于 Zabbix Server 部署涉及 server、mysql、frontend 等多個鏡像,逐個用 docker 命令安裝配置繁瑣且易出錯。推薦通過 Docker Compose一鍵部署,Docker Compose 是 Docker 官方推出的容器編排工具,專為簡化多容器應(yīng)用的部署與管理而生。其核心原理是通過一個 YAML 配置文件,集中定義應(yīng)用所需的所有容器、網(wǎng)絡(luò)、存儲等資源及其關(guān)聯(lián)關(guān)系,比如 Zabbix 的 server、mysql、frontend 等組件的鏡像版本、環(huán)境變量、端口映射、依賴關(guān)系等。

使用時,只需執(zhí)行一條命令,Docker Compose 便會根據(jù)配置文件自動創(chuàng)建并啟動所有容器,同時維護容器間的網(wǎng)絡(luò)通信和依賴順序,避免了逐個啟動容器時的繁瑣操作和配置遺漏。

創(chuàng)建 Zabbix docker 文件目錄

創(chuàng)建如下目錄,用來存放 yaml文件,后面會執(zhí)行該目錄下的 yaml 文件完成 Zabbix 安裝。

通過如下命令創(chuàng)建目錄:

mkdir ~/docker && mkdir ~/docker/zabbix-docker && cd ~/docker/zabbix-docker

然后去 Zabbix 的 Github 網(wǎng)站下載 yaml 文件,放到創(chuàng)建的目錄中。我這里使用的是最新的 zabbix-docker-7.4.3 的包,里面包含了很多 yaml 文件,我們選擇下圖所示, 紅色框體包含的部分就可以了。

修改 Zabbix 服務(wù)端口

順嘴說一下, 為了避免端口沖突問題的發(fā)生。我需要在.env 文件中修改如圖所示內(nèi)容,修改之前 ZABBIX_WEB_NGINX_HTTP_PORT=80,我需要將其修改為 8080。如果不做修改,請保證本機運行的其他服務(wù)不會占用此端口。

ZABBIX_WEB_NGINX_HTTP_PORT=8080

啟動 Zabbix 服務(wù)

設(shè)置好端口之后,執(zhí)行如下命令:

docker compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d

首次運行需要下載鏡像,可能需要幾分鐘。

[+] Running 5/5
 ? Network zabbix-docker_default Created 0.1s 
 ? Container zabbix-docker-mysql-1 Started 2.5s 
 ? Container zabbix-docker-zabbix-server-1 Started 1.1s 
 ? Container zabbix-docker-zabbix-web-1 Started 1.2s 
 ? Container zabbix-docker-zabbix-agent-1 Started 1.1s

通過 Docker Desktop 可以看到服務(wù)已經(jīng)啟動。

此時可以打開瀏覽器,訪問 Web UI:

http://localhost:8080

默認登錄賬號密碼:

  • 用戶名:Admin
  • 密碼:zabbix

如果看到下圖說明 Zabbix Server 已經(jīng)安裝完畢。

獲取 Zabbix Server 的 IP 地址

安裝完 Zabbix Server 之后就需要安裝 Zabbix Agent 了, 它會幫助我們監(jiān)控主機的運行情況,并且將監(jiān)控的結(jié)果傳回 Zabbix Server,同時還要與 Zabbix Server 保持心跳連接。

在安裝 Zabbix Agent 之前還需要知道 Zabbix Server 的 IP 以及需要監(jiān)控主機的名字。

通過如下命令獲取 Zabbix Server 的 IP。

docker inspect -f \
 '{{range $net,$cfg := .NetworkSettings.Networks}}{{printf "%s → %s\n" $net $cfg.IPAddress}}{{end}}' \
 zabbix-docker-743-zabbix-server-1

執(zhí)行上述命令之后就可以查看 Zabbix Server 的 IP 地址了。

zabbix-docker-743_backend → 172.16.239.3
 zabbix-docker-743_database → 172.18.0.3
 zabbix-docker-743_frontend → 172.16.238.2
 zabbix-docker-743_tools_frontend → 172.16.240.2

從輸出的結(jié)果來看 “zabbix-docker-743_backend → 172.16.239.3” 就是 Zabbix server 的 IP 地址, 這里需要做一個記錄,后面創(chuàng)建 Zabbix Agent 的時候會用到。

獲取監(jiān)控主機的名字

通過 Zabbix WebUI 中的“數(shù)據(jù)采集”-“主機”就可以看到主機的名稱,如下圖所示。我們要監(jiān)控的主機名字為“Zabbix server”,這個是創(chuàng)建 Zabbix Agent 的時候所需要的信息。

安裝 Zabbix Agent

通過 docker 命令 pull 拉取 Zabbix Agent 的鏡像。

docker pull zabbix/zabbix-agent

看到如下消息說明拉取成功。

Using default tag: latest
 latest: Pulling from zabbix/zabbix-agent
 864bc305c662: Pull complete 
 d0d6eeb62c3f: Pull complete 
 99888e073bcb: Pull complete 
 15ab7c0ba17b: Pull complete 
 e4df0cda2793: Pull complete 
 4f4fb700ef54: Pull complete 
 Digest: sha256:e0fc7757c9eed70ac907fe9609c0b6e9a11d5f20a5730d6c9867e606ebdd60e6
 Status: Downloaded newer image for zabbix/zabbix-agent:latest
 docker.io/zabbix/zabbix-agent:latest

啟動 Zabbix Agent

上面一頓操作 Zabbix Server 已安裝, 連帶還把 frontend,database 等服務(wù)也裝上了。接下來,通過如下命令安裝 Zabbix Agent。

docker run -dit \
 --name zabbix-agent \
 --network zabbix-docker-743_backend \
 -p 10050:10050 \
 -e ZBX_HOSTNAME="Zabbix server" \
 -e ZBX_SERVER_HOST="172.16.239.3" \
 -e ZBX_SERVER_PORT="10051" \
 zabbix/zabbix-agent:latest

執(zhí)行完畢之后,到 Zabbix Desktop 中查看執(zhí)行結(jié)果。

看到如下圖所示,說明已經(jīng)連接上 Zabbix Server 了。

二、關(guān)聯(lián) Zabbix Server 與 Zabbix Agent

自此,Zabbix Server 與 Agent 都已安裝完畢,還需要在 Zabbix Server 中設(shè)置被監(jiān)控主機的 Agent IP地址,一般來說我們會在被監(jiān)控主機上安裝 Zabbix Agent 從而監(jiān)控主機的運行狀態(tài)。所以,需要在 Zabbix Server WebUI 上配置Zabbix Agent 的 IP 地址。

通過如下命令,查看 Zabbix Agent 的 IP 地址:

docker inspect -f '{{range $net,$cfg := .NetworkSettings.Networks}}{{printf "%s → %s\n" $net $cfg.IPAddress}}{{end}}' zabbix-agent

執(zhí)行之后得到如下結(jié)果:

zabbix-docker-743_backend → 172.16.239.4

接著將 IP (172.16.239.4),也就是 Zabbix Agent 的 IP, 寫入到 Zabbix Server 接口的 Agent 中。

需要通過如下圖的配置步驟,首先在“檢測”中找到“主機”。

在彈出的對話框中選中“主機”。

在主機的“接口”設(shè)置中的 Agent 類型中輸入 IP 地址,這里讓 Zabbix Server 能夠識別到 Zabbix Agent。

“更新”完畢之后,可以在主機“Zabbix server”中看到“可用性”描述了接口(172.16.239.4:10050)的狀態(tài)為“可用”,表示 Zabbix Server 和 Agent 已經(jīng)連接成功了。

三、設(shè)置媒介、觸發(fā)器與動作

在對 Zabbix Server 與 Agent 進行關(guān)聯(lián)之后,他們就能互相找到對方了,接著就需要定義媒介,設(shè)置腳本搜集監(jiān)控參數(shù),然后調(diào)用 DeepSeek 生成分析報表。這里我們的大致思路是通過設(shè)置 Zabbix 觸發(fā)器接受從 Zabbix Agent 傳來的參數(shù)異常信息,再讓觸發(fā)器與本地腳本進行互動,讓腳本調(diào)用 DeepSeek 智能程序生成參數(shù)異常分析報告。

具體步驟,如下圖所示,分為四個環(huán)節(jié):

  • 媒介(模塊 1):定義基礎(chǔ)通信能力,通過「腳本」(如郵件發(fā)送腳本、消息推送腳本)與「消息」(告警內(nèi)容模板),為后續(xù)通知動作提供基礎(chǔ)載體,決定 “用什么方式、發(fā)什么內(nèi)容”。
  • 用戶媒介關(guān)聯(lián)(模塊 2):建立「用戶」與「媒介」的綁定關(guān)系,讓抽象的通信能力落地到具體用戶,比如 “用戶 A 關(guān)聯(lián)‘郵件媒介’、用戶 B 關(guān)聯(lián)‘企業(yè)微信媒介’”,解決 “誰接收、用哪種媒介接收” 的問題。
  • 主機(模塊 3):依托「觸發(fā)器」+「表達式」,監(jiān)控主機狀態(tài)(如 CPU 過載、服務(wù)宕機),當(dāng)系統(tǒng)指標(biāo)匹配表達式規(guī)則(如 CPU 使用率超過一定數(shù)值 ),觸發(fā)器被激活,成為告警的 “信號燈”。
  • 觸發(fā)動作(模塊 4):通過「條件」(關(guān)聯(lián)觸發(fā)器)判斷是否觸發(fā),滿足條件后,調(diào)用「操作」關(guān)聯(lián)的「媒介 + 用戶」,完成告警閉環(huán) —— 把模塊 1 定義的消息,通過模塊 2 綁定的媒介,精準推送給用戶,實現(xiàn) “異常發(fā)生 → 自動告警” 的完整流程。

添加腳本

在了解完整體思路之后,我們先在媒體中“添加腳本”。查看 Zabbix Server 中腳本所在的目錄,通過 docker 命令查看哪些鏡像正在執(zhí)行。

docker ps

在“names”這一列,可以看到鏡像的名稱,得到如下結(jié)果:

由于我們希望在 Zabbix Server 中安裝腳本,當(dāng)介紹到 Zabbix Agent 的信息之后, 設(shè)置對應(yīng)的報警規(guī)則(觸發(fā)器),然后再通過事件調(diào)用腳本,通過腳本執(zhí)行 DeepSeek 的調(diào)用。所以要確認 Zabbix Server 中對應(yīng)存放腳本的目錄,為了方便后面將主機的腳本目錄掛載到 Zabbix Server 中的腳本目錄。

執(zhí)行如下命令進入 Zabbix server 鏡像的 docker 命令行模式:

docker exec -it zabbix-docker-743-zabbix-server-1 /bin/sh

執(zhí)行如下命令, 確認在鏡像中存在如下目錄,作為腳本的掛載目錄:

ls -ld /usr/lib/zabbix/alertscripts

接著回到主機,在~/docker/下 創(chuàng)建zabbix-scripts 目錄, 在目錄中創(chuàng)建一個 deepseek.sh 的腳本作為測試腳本。

腳本內(nèi)容先放入簡單的“hello deepseek”。

#!/bin/bash
 echo "hello deepseek"

然后給目錄和腳本設(shè)置權(quán)限。

Docker 容器內(nèi)的 Zabbix 進程通常以非 root 用戶(如 zabbix 用戶,UID 可能為 1997)運行,而宿主機的目錄 / 文件默認權(quán)限可能不允許容器內(nèi)的非 root 用戶訪問或執(zhí)行。

# 進入宿主機腳本目錄的父目錄
 cd ~/docker

 # 給目錄設(shè)置可執(zhí)行權(quán)限(允許進入目錄)
 chmod 755 zabbix-scripts

 # 給目錄內(nèi)的腳本文件設(shè)置可執(zhí)行權(quán)限
 chmod +x zabbix-scripts/*.sh

修改啟動鏡像命令所對應(yīng)的文件,于是我們修改 docker-compose_v3_alpine_mysql_latest.yaml 文件,找到 zabbix server 對應(yīng)的段落。

zabbix-server:
 extends:
 file: compose_zabbix_components.yaml
 service: server-mysql
 image: "${ZABBIX_SERVER_MYSQL_IMAGE}:${ZABBIX_ALPINE_IMAGE_TAG}${ZABBIX_IMAGE_TAG_POSTFIX}"
 volumes:
 - /etc/timezone:/etc/timezone:ro
 - ~/docker/zabbix-scripts:/usr/lib/zabbix/alertscripts
 depends_on:
 server-db-init:
 condition: service_completed_successfully
 labels:
 com.zabbix.os: "${ALPINE_OS_TAG}"

在這個部分加入,如下部分在 volumes 掛載的時候?qū)⒛_本目錄和 zabbix server 中的腳本目錄進行對應(yīng)。

- ~/docker/zabbix-scripts:/usr/lib/zabbix/alertscripts

最后,通過如下命令重新啟動 docker 鏡像。

# 先停止并移除當(dāng)前運行的容器(不會刪除數(shù)據(jù)卷和鏡像)
 docker compose -f docker-compose_v3_alpine_mysql_latest.yaml down

 # 重新創(chuàng)建并啟動容器(會應(yīng)用新的volumes配置)
 docker compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d

好了,腳本已經(jīng)加載到 zabbix server 的鏡像中了,我們要測試一下是否能夠執(zhí)行,以便后面事件調(diào)用的時候能夠成功。

主機中順序執(zhí)行如下代碼,分別是進入 docker 執(zhí)行模式,跳轉(zhuǎn)到腳本目錄,執(zhí)行 deepseek 的腳本。

docker exec -it zabbix-docker-743-zabbix-server-1 /bin/sh
 cd /usr/lib/zabbix/alertscripts
 ./deepseek.sh

為了完成測試,在 deepseek.sh 中我們寫入如下內(nèi)容:

#!/bin/bash

 # 獲取當(dāng)前腳本所在目錄的絕對路徑
 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)

 # 獲取當(dāng)前時間(格式:年-月-日 時:分:秒)
 CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")

 # 在腳本同目錄創(chuàng)建test.txt并寫入內(nèi)容(包含時間戳)
 echo "[$CURRENT_TIME] hello deepseek" > "$SCRIPT_DIR/test.txt"

 # 可選:如果希望保留歷史記錄(而非覆蓋),用 >> 追加模式
 # echo "[$CURRENT_TIME] hello deepseek" >> "$SCRIPT_DIR/test.txt"

在與 deepseek.sh 同目錄下生成一個 test.txt 文件,寫入時間和“hello deepseek”的字樣。

設(shè)置媒介

接著來設(shè)置媒介,如下圖所示“創(chuàng)建媒介類型”。

在創(chuàng)建頁面填寫“名稱”(沒有特別要求)和“腳本名稱”,這里的“腳本名稱”需要與剛才掛載的腳本名稱保持一致,還需要保證它在 docker 容器的如下地址:

/usr/lib/zabbix/alertscripts

點擊“更新”完成腳本的創(chuàng)建。

此時回到媒介的列表頁面,可以測試剛剛創(chuàng)建的腳本。點擊“測試”按鈕,如果看到測試成功的字樣,說明腳本運行沒有問題了。

如果不放心,還可以回到腳本掛載的目錄下面確認文件是否生成,內(nèi)容是否與你所期望的一致。

這里也可以創(chuàng)建消息模版,如下圖所示:

關(guān)聯(lián)媒介與用戶

有了媒介(腳本+消息),接著需要將其關(guān)聯(lián)到用戶,也就是這個媒介給誰用?由于媒介屬于“告警”的范疇,那么是告警就需要有具體的“人”響應(yīng)。

如下圖操作方式,這里我們選擇“Admin”作為響應(yīng)的“人”。

選擇“報警”媒介。

點擊“添加”。

在“類型”中選擇,剛才我們創(chuàng)建好的腳本媒介,這里收件人可以填寫一個郵件地址。

設(shè)置觸發(fā)器

經(jīng)過前面的設(shè)置之后,我們需要通過觸發(fā)器發(fā)出報警,然后調(diào)用對應(yīng)的腳本執(zhí)行操作以及通知到具體的人。

如系統(tǒng)所示,進入觸發(fā)器添加界面。

點擊“創(chuàng)建觸發(fā)器”。

填寫觸發(fā)器的內(nèi)容,注意這里我設(shè)置的是 CPU 使用率超過 3%。為了方便測試,我這里修改成一個很小的值。在真實場景中需要按照 80 或者 90 這樣的數(shù)據(jù)進行觸發(fā)器的設(shè)置。

點擊“表達式”旁邊的“添加”按鈕進行條件的添加。

設(shè)置動作(關(guān)聯(lián)腳本)

完成上述操作之后,接下來就是設(shè)置動作,如下圖所示“創(chuàng)建動作”。

接著是一連串的“選擇”操作,選擇“添加”條件,然后在條件中選擇觸發(fā)器類型,以及具體的觸發(fā)器。這里的觸發(fā)器用我們之前創(chuàng)建好的 “CPU 使用率超過 3%”。

最后就是設(shè)置“操作”了,將消息通過之前設(shè)置好的郵箱發(fā)送給用戶。

到這里整個媒介、觸發(fā)器與動作的配置完成,讓我們通過下面這張圖再回顧一下整個過程。

測試觸發(fā)器

這里需要通過模擬 CPU 使用率高的場景,從而觸發(fā)報警,然后調(diào)用我們寫好的 deepseek.sh 腳本。

執(zhí)行如下代碼以 root 的身份開啟 docker 命令行模式。由于我們需要安裝 stress 工具模擬 CPU 執(zhí)行,所以需要 root 身份獲取安裝應(yīng)用的權(quán)限。

docker exec -it --user root zabbix-docker-743-zabbix-server-1 /bin/sh

分別執(zhí)行如下:

apk update
 apk add stress-ng

顯示安裝成功之后,再執(zhí)行命令如下,啟動4個CPU密集型進程,持續(xù) 30 秒。

stress-ng -c 4 -t 30s

執(zhí)行完之后,如下圖所示:

最后看看腳本是否執(zhí)行。

cat /usr/lib/zabbix/alertscripts/test.txt

由于我們的腳本會在當(dāng)前目錄下面生成 test.txt 文件,所以打開文件,看到如下內(nèi)容。

[2025-08-06 16:25:24] hello deepseek

說明整個從觸發(fā)、腳本、執(zhí)行的過程成功了。接下來,我們需要在腳本中去調(diào)用 DeepSeek 的能力對數(shù)據(jù)進行分析。

四、 DeepSeek處理監(jiān)控參數(shù)并生成報表

在完成觸發(fā)器的測試之后,整個調(diào)用的鏈路就通暢了,接下來只需要將 deepseek.sh 腳本中的內(nèi)容進行修改,去調(diào)用 DeepSeek 生成分析報告即可。由于 DeepSeek 的調(diào)用還需要一些 Python 的組件包,我們首先還是要進行組件安裝與環(huán)境配置的操作。

組件安裝與環(huán)境配置

在 Docker server 的運行容器內(nèi)安裝 Python 和 OpenAI。

執(zhí)行如下命令:

apk update
 apk add --no-cache python3 py3-pip
 python3 --version 
 pip3 --version

看到如下信息,說明安裝成功。

/var/lib/zabbix # python3 --version
 Python 3.12.11
 /var/lib/zabbix # pip3 --version 
 pip 25.1.1 from /usr/lib/python3.12/site-packages/pip (python 3.12)

接著使用剛剛安裝完成的 pip3 安裝 OpenAI,這里需要先安裝 venv 為我們的代碼創(chuàng)建虛擬環(huán)境,接著激活環(huán)境,然后在這個虛擬環(huán)境中安裝 OpenAI。

# 1. 安裝虛擬環(huán)境工具(Alpine 中需手動安裝)
 apk add --no-cache python3-venv

 # 2. 創(chuàng)建虛擬環(huán)境(路徑可自定義,例如 /var/lib/zabbix/venv)
 python3 -m venv /var/lib/zabbix/venv

 # 3. 激活虛擬環(huán)境
 source /var/lib/zabbix/venv/bin/activate

 # 4. 在虛擬環(huán)境中安裝 openai(此時 pip 指向虛擬環(huán)境,無權(quán)限問題)
 pip install openai

 # 5. 驗證安裝(激活狀態(tài)下)
 python -c "import openai; print('安裝成功')" # 無報錯即成功

 # 6. 退出虛擬環(huán)境(后續(xù)調(diào)用腳本時需先激活)
 deactivate

在編寫 Deepseek.py 之前還需要保存 DeepSeek 的 API。這里我們將其保存到.env 文件中,文件內(nèi)容如下:

DEEPSEEK_API_KEY=sk-aec0ed226aXXXX5ffd89ff

同時需要通過python-dotenv 讀取 .env 文件中的環(huán)境變量,執(zhí)行如下命令。 保證在 Python 的虛擬環(huán)境中。

source /var/lib/zabbix/venv/bin/activate
 pip install python-dotenv

測試 DeepSeek API 是否能夠調(diào)通。

安裝 curl,并執(zhí)行指令:

apk add curl
 curl -v https://api.deepseek.com/v1

DeepSeek 生成告警報表

這里需要利用 DeepSeek 的 API 調(diào)用 DeepSeek 的能力, API 的調(diào)用在前面得到了證實。接下來就是代碼的環(huán)節(jié)。

import os
 import sys
 import datetime
 from openai import OpenAI
 from dotenv import load_dotenv # 新增:導(dǎo)入dotenv庫

 load_dotenv() # 默認讀取當(dāng)前目錄的.env文件,若路徑不同可指定:load_dotenv("/path/to/.env")

 def generate_alert_report():
 # 定義錯誤日志文件路徑(與腳本同目錄)
 script_dir = os.path.dirname(os.path.abspath(__file__)) # 獲取當(dāng)前腳本所在目錄(絕對路徑)
 error_log = os.path.join(script_dir, "error.log") # 錯誤日志放在腳本目錄
 
 # 接收從Shell腳本傳遞的參數(shù)
 if len(sys.argv) != 7:
 error_msg = "錯誤:參數(shù)數(shù)量不正確,需要6個參數(shù)(cpu_util, host_name, item_key, host_ip, event_time, trigger_name)"
 with open(error_log, "a", encoding="utf-8") as f:
 f.write(f"[{datetime.datetime.now()}] {error_msg}\n")
 return error_msg
 
 # 解析參數(shù)
 cpu_util = sys.argv[1] # CPU利用率值
 host_name = sys.argv[2] # 主機名稱
 item_key = sys.argv[3] # 監(jiān)控項鍵值
 host_ip = sys.argv[4] # 主機IP
 event_time = sys.argv[5] # 告警時間
 trigger_name = sys.argv[6] # 觸發(fā)器名稱

 try:
 # 檢查API密鑰是否存在
 if not os.environ.get("DEEPSEEK_API_KEY"):
 error_msg = "錯誤:未設(shè)置DEEPSEEK_API_KEY環(huán)境變量"
 with open(error_log, "a", encoding="utf-8") as f:
 f.write(f"[{datetime.datetime.now()}] {error_msg}\n")
 return error_msg

 # 初始化OpenAI客戶端(DeepSeek兼容OpenAI SDK)
 client = OpenAI(
 api_key=os.environ.get("DEEPSEEK_API_KEY"),
 base_url="https://api.deepseek.com/v1"
 )

 # 構(gòu)建系統(tǒng)提示詞(定義AI的角色和報告要求)
 system_prompt = """
 你是一名資深運維工程師,擅長分析服務(wù)器性能告警并生成專業(yè)報告。
 請根據(jù)提供的CPU告警信息,生成一份結(jié)構(gòu)化的告警分析報告,包含以下內(nèi)容:
 1. 告警基本信息(主機、IP、時間、觸發(fā)條件)
 2. 可能的原因分析(基于CPU利用率和監(jiān)控項)
 3. 建議的處理步驟(分點說明,清晰具體)
 4. 預(yù)防措施(如何避免類似問題再次發(fā)生)
 
 報告風(fēng)格要專業(yè)、簡潔,重點突出,便于運維人員快速理解和處理。
 """

 # 構(gòu)建用戶提示詞(傳遞具體參數(shù))
 user_prompt = f"""
 服務(wù)器告警信息如下:
 - 主機名稱:{host_name}
 - 主機IP:{host_ip}
 - 告警時間:{event_time}
 - 觸發(fā)條件:{trigger_name}
 - 當(dāng)前CPU利用率:{cpu_util}%
 - 監(jiān)控項鍵值:{item_key}
 
 請基于以上信息生成告警分析報告。
 """

 # 調(diào)用DeepSeek模型
 response = client.chat.completions.create(
 model="deepseek-chat",
 messages=[
 {"role": "system", "content": system_prompt},
 {"role": "user", "content": user_prompt}
 ],
 stream=False,
 max_tokens=1000
 )

 # 獲取模型返回的報告內(nèi)容
 report_content = response.choices[0].message.content

 # 生成報告文件名(包含主機名和時間戳)
 timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
 clean_host_name = host_name.replace(" ", "_") # 處理主機名中的空格
 report_filename = os.path.join(script_dir, f"alert_report_{clean_host_name}_{timestamp}.txt") # 關(guān)鍵:用script_dir指定路徑
 
 # 將報告寫入文件
 with open(report_filename, "w", encoding="utf-8") as f:
 f.write(f"=== 服務(wù)器CPU告警分析報告 ===\n")
 f.write(f"生成時間:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
 f.write(report_content)
 
 return f"告警報告生成成功:{report_filename}"

 except Exception as e:
 # 捕獲所有異常并寫入錯誤日志
 error_msg = f"生成報告失?。簕str(e)}"
 with open(error_log, "a", encoding="utf-8") as f:
 f.write(f"[{datetime.datetime.now()}] {error_msg}\n")
 return error_msg

 if __name__ == "__main__":
 result = generate_alert_report()
 print(result) # 輸出結(jié)果給Shell腳本

上面代碼會接受來自 deepseek.sh 腳本傳來的參數(shù)(CPU 報警參數(shù)),然后扮演 IT 運維工程師利用 DeepSeek 大模型生成報警的報告。

將報告放置在與 deepseek.py 相同的目錄下。

在腳本中調(diào)用 deepseek.py

完成 deepseek.py 之后,我們還需要在 deepseek.sh 腳本中調(diào)用它,當(dāng)觸發(fā)器發(fā)出報警的時候調(diào)用deepseek.sh,deepseek.sh 再將報警數(shù)據(jù)傳入deepseek.py 完成告警的閉環(huán)操作。

deepseek.sh 腳本修改如下:

#!/bin/bash

 # 獲取腳本目錄和日志文件
 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
 LOG_FILE="$SCRIPT_DIR/cpu_multi_params_log.log"

 # 接收多個參數(shù)(按Zabbix配置的順序?qū)?yīng))
 cpu_util="$1" # 參數(shù)1:CPU利用率值
 host_name="$2" # 參數(shù)2:主機名稱
 item_key="$3" # 參數(shù)3:監(jiān)控項鍵值
 host_ip="$4" # 參數(shù)4:主機IP
 event_time="$5" # 參數(shù)5:告警時間
 trigger_name="$6" # 參數(shù)6:觸發(fā)器名稱

 # 記錄所有參數(shù)到日志
 {
 echo "========================================="
 echo "日志生成時間: $(date "+%Y-%m-%d %H:%M:%S")"
 echo "1. CPU利用率值: $cpu_util" 
 echo "2. 主機名稱: $host_name"
 echo "3. 監(jiān)控項鍵值: $item_key"
 echo "4. 主機IP地址: $host_ip"
 echo "5. 告警觸發(fā)時間: $event_time"
 echo "6. 觸發(fā)器名稱: $trigger_name"
 echo ""
 } >> "$LOG_FILE"

 # 簡單驗證(確保核心參數(shù)不為空)
 if [ -z "$cpu_util" ] || [ -z "$host_name" ]; then
 echo "[$(date "+%Y-%m-%d %H:%M:%S")] 錯誤:核心參數(shù)缺失(CPU值或主機名)" >> "$LOG_FILE"
 exit 1
 fi

 echo "[$(date "+%Y-%m-%d %H:%M:%S")] 多參數(shù)接收成功" >> "$LOG_FILE"

 # 調(diào)用deepseek.py并傳遞6個參數(shù)
 PY_SCRIPT="$SCRIPT_DIR/deepseek.py"
 if [ -f "$PY_SCRIPT" ]; then
 echo "[$(date "+%Y-%m-%d %H:%M:%S")] 開始調(diào)用Python腳本生成報告" >> "$LOG_FILE"
 # 執(zhí)行Python腳本并捕獲輸出結(jié)果
 python_result=$(
 source /var/lib/zabbix/venv/bin/activate && \ # 激活虛擬環(huán)境
 python3 "$PY_SCRIPT" "$cpu_util" "$host_name" "$item_key" "$host_ip" "$event_time" "$trigger_name" 2>&1
 )
 # 將Python腳本的執(zhí)行結(jié)果寫入日志
 echo "[$(date "+%Y-%m-%d %H:%M:%S")] Python腳本執(zhí)行結(jié)果: $python_result" >> "$LOG_FILE"
 else
 echo "[$(date "+%Y-%m-%d %H:%M:%S")] 錯誤:未找到Python腳本 $PY_SCRIPT" >> "$LOG_FILE"
 exit 1
 fi

注意如下代碼,在調(diào)用 deepseek.py 之前需要激活虛擬環(huán)境,然后再通過 Python 的命令行傳入幾個參數(shù)。

python_result=$(
 source /var/lib/zabbix/venv/bin/activate && \ # 激活虛擬環(huán)境
 python3 "$PY_SCRIPT" "$cpu_util" "$host_name" "$item_key" "$host_ip" "$event_time" "$trigger_name" 2>&1
 )

測試 CPU 報警功能

依舊通過如下命令增加 CPU 利用率。

stress-ng -c 4 -t 30s

接著會在 Zabbix 平臺,看到對應(yīng)的報警信息。

同時,在 deepseek.sh 相同的目錄下面看到日志信息。

日志生成時間: 2025-08-07 16:32:15
 1. CPU利用率值: 3.5 %
 2. 主機名稱: Zabbix server
 3. 監(jiān)控項鍵值: system.cpu.util
 4. 主機IP地址: 172.16.239.4
 5. 告警觸發(fā)時間: 16:31:24
 6. 觸發(fā)器名稱: CPU使用率超過3%

 [2025-08-07 16:32:15] 多參數(shù)接收成功
 [2025-08-07 16:32:15] 開始調(diào)用Python腳本生成報告
 [2025-08-07 16:32:54] Python腳本執(zhí)行結(jié)果: 告警報告生成成功:/usr/lib/zabbix/alertscripts/alert_report_Zabbix_server_20250807_163254.txt

日志中看到傳入的 CPU 使用率的參數(shù),以及 Python 腳本生成報告的信息。

同時再查看如下報告文件:

/usr/lib/zabbix/alertscripts/alert_report_Zabbix_server_20250807_163254.txt

得到報告的詳細信息。

=== 服務(wù)器CPU告警分析報告 ===
生成時間:2025-08-07 16:32:54

# CPU告警分析報告

## 1. 告警基本信息
| 項目 | 詳情 |
|------|------|
| 主機名稱 | Zabbix server |
| 主機IP | 172.16.239.4 |
| 告警時間 | 16:31:24 |
| 觸發(fā)條件 | CPU使用率 > 3% |
| 當(dāng)前CPU利用率 | 3.5% |
| 監(jiān)控項鍵值 | system.cpu.util |

## 2. 可能的原因分析
1. **監(jiān)控閾值設(shè)置過低**:3%的CPU利用率閾值對于生產(chǎn)環(huán)境服務(wù)器來說過于敏感
2. **Zabbix自身監(jiān)控活動**:作為監(jiān)控服務(wù)器,Zabbix自身的數(shù)據(jù)收集和處理可能導(dǎo)致短暫的CPU使用率波動
3. **后臺維護任務(wù)**:可能正在執(zhí)行計劃任務(wù)、日志輪轉(zhuǎn)或數(shù)據(jù)庫維護等常規(guī)操作
4. **網(wǎng)絡(luò)活動增加**:客戶端數(shù)據(jù)上報量臨時增加導(dǎo)致處理負載上升

## 3. 建議的處理步驟
1. **確認當(dāng)前系統(tǒng)狀態(tài)**:
   - 執(zhí)行`top`或`htop`命令查看實時進程占用情況
   - 檢查`uptime`命令輸出的系統(tǒng)負載平均值
   - 使用`ps aux --sort=-%cpu | head -10`查看CPU占用最高的進程

2. **調(diào)整監(jiān)控閾值**:
   - 建議將CPU告警閾值調(diào)整為更合理的水平(如80%)
   - 對于Zabbix服務(wù)器,可考慮設(shè)置多級告警(警告/嚴重)

3. **檢查Zabbix服務(wù)狀態(tài)**:
   - 查看Zabbix server日志:`tail -f /var/log/zabbix/zabbix_server.log`
   - 確認是否有異常的任務(wù)堆積或數(shù)據(jù)庫查詢問題

## 4. 預(yù)防措施
1. **優(yōu)化監(jiān)控配置**:
   - 根據(jù)服務(wù)器角色和基準性能調(diào)整告警閾值
   - 對監(jiān)控項設(shè)置合理的聚合時間(如5分鐘平均值)

2. **性能基線建立**:
   - 記錄服務(wù)器在不同時段的正常性能指標(biāo)作為基準
   - 設(shè)置基于基線的動態(tài)告警閾值

3. **資源分配優(yōu)化**:
   - 確保Zabbix服務(wù)器有足夠的CPU資源
   - 考慮將數(shù)據(jù)庫與Zabbix服務(wù)分離部署

4. **定期維護**:
   - 定期清理Zabbix歷史數(shù)據(jù)
   - 優(yōu)化數(shù)據(jù)庫表和索引

5. **告警分級**:
   - 設(shè)置多級告警策略(信息/警告/嚴重)
   - 對非關(guān)鍵告警配置不同的通知渠道

**備注**:當(dāng)前3.5%的CPU使用率屬于極低負載,建議優(yōu)先調(diào)整監(jiān)控策略而非進行系統(tǒng)優(yōu)化。

總結(jié)

本文圍繞 Zabbix 與 DeepSeek 大模型的融合實踐展開,構(gòu)建智能運維分析體系。從基礎(chǔ)部署起步,借 Docker 及 Compose 簡化 Zabbix 復(fù)雜組件安裝,完成 Server 與 Agent 關(guān)聯(lián),打通監(jiān)控數(shù)據(jù)采集鏈路。

核心環(huán)節(jié)聚焦告警流程:通過配置媒介、觸發(fā)器與動作,搭建從異常檢測到腳本觸發(fā)的通路,再借助 Docker 掛載腳本,實現(xiàn)與 DeepSeek 大模型的銜接。編寫 Python 腳本調(diào)用 DeepSeek API,利用其智能分析能力,將 Zabbix 捕獲的 CPU 利用率、主機信息等監(jiān)控參數(shù),轉(zhuǎn)化為包含故障根因、處理建議的專業(yè)報表,賦能運維決策。

從模擬 CPU 過載測試驗證流程閉環(huán),到生成結(jié)構(gòu)化分析報告,展現(xiàn)了大模型與傳統(tǒng)監(jiān)控工具結(jié)合的價值 —— 打破人工分析效率瓶頸,讓運維從 “被動響應(yīng)” 邁向 “智能預(yù)判”。

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗,10年分布式架構(gòu)經(jīng)驗。

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2025-08-29 08:58:02

2025-09-26 08:36:43

2025-07-28 12:38:35

2017-03-07 15:06:56

交付自動化運維

2013-08-13 15:06:54

NETGEAR深圳眾鴻科技

2018-08-07 09:26:47

新華三

2025-09-09 08:25:39

2025-05-07 03:45:00

應(yīng)用運維技術(shù)

2022-04-19 19:40:31

戴爾

2021-06-07 22:09:46

辦公

2017-12-15 15:40:45

宜信運維

2018-11-19 11:16:46

Dynatrace人工智能運維

2018-06-30 17:08:40

運維新挑戰(zhàn)Tech Neo

2010-05-06 10:13:59

ibmdwBI
點贊
收藏

51CTO技術(shù)棧公眾號