SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

Ubuntu 24.04 安裝 Zabbix 7.0 LTS 教學

在 Ubuntu 24.04 上部署 Zabbix 7.0 LTS 的完整步驟。包含新增官方套件庫、匯入 MySQL 資料庫結構、設定 Nginx 前端與 Zabbix agent2。文中詳細說明如何解決常見的安裝錯誤與資料庫連線設定,確保監控系統順利運作。

您將建置的系統

這是一台執行完整 Zabbix 7.0 LTS 堆疊的 Ubuntu 24.04 VPS:包含負責輪詢與發送警報的 zabbix-server daemon、儲存所有指標的 MariaDB/MySQL 資料庫、由 nginx 提供的 PHP 前端,以及負責從本機收集指標的 zabbix-agent2。系統架設完成後,您可將其指向第二台伺服器並掛載範本,一旦磁碟空間耗盡或服務中斷,系統便會立即發送電子郵件通知。

Zabbix 的功能遠超一般的狀態頁面工具:它是一個具備範本、觸發器、升級機制與歷史資料保留功能的即時時序系統。大多數使用者會遇到的困難集中在三個容易被忽略的步驟:匯入資料庫結構、設定伺服器實際讀取的資料庫密碼,以及取消 nginx 設定檔中兩行的註解。只要正確完成這些步驟,後續設定將非常簡單。若您僅需要監控服務是否存活並提供可分享的狀態頁面,輕量級的 Uptime Kuma 狀態監控 透過單一容器即可達成;而 Zabbix 的價值在於當您需要針對多台主機進行各項指標的閾值監控與警報升級時。

請使用 7.0 LTS 版本:其伺服器、前端、agent2 與資料庫結構版本一致,並享有長達數年的安全性更新。在複製下方的儲存庫檔名之前,請先瀏覽官方的 Zabbix 下載頁面。latest 發布套件僅用於設定 7.0 的儲存庫,並非指定特定的點版本(point release):apt 隨後會安裝該儲存庫中最新的 7.0.x 套件,這也是您取得最新版本的方式。該頁面可能也會列出帶有編號的 7.0-N 發布套件,但該編號僅代表儲存庫設定的版本,而非 Zabbix 的建置版本。本指南中的其他所有指令在整個 7.0 系列中皆通用。

資源規劃、連接埠與先決條件

假設您使用全新的 Ubuntu 24.04 KVM VPS,並具備 root 或 sudo 權限。請務必誠實評估資源需求:若要在單一伺服器上同時運行伺服器軟體、資料庫、Nginx 與 PHP 來監控少量主機,2 GB RAM 與兩個 vCPU 是最基本的門檻。1 GB 的機器雖然可以開機,但隨著歷史資料增長,資料庫將會因資源不足而效能低落;若監控主機超過數十台,請規劃 4 GB RAM,若超過百台,則應將資料庫移至獨立伺服器。磁碟空間需求取決於收集的項目數量與歷史資料保留期限;初期請預留數 GB 空間,系統會根據您設定的保留週期,透過清理機制刪除舊資料。

連接埠說明:前端介面使用 80 與 443 埠,可選擇公開或僅限特定 IP 存取。伺服器端監聽 TCP 10051 埠以接收主動式代理程式(active agents)推送的資料,而每個代理程式則監聽 TCP 10050 埠以供伺服器輪詢。若前方設有防火牆,請僅開啟必要的連接埠。建議為前端設定 DNS A 記錄,以便申請正式憑證。由於 Zabbix 伺服器會監控您運行的所有其他服務,因此它應被納入 2026 年值得部署的自架服務架構 中,而非事後才勉強加入。

步驟 1,新增官方 Zabbix 7.0 套件庫

zabbix-release 套件僅執行一項任務:將 apt 來源列表與簽章金鑰部署至您的系統。請安裝該套件,隨後重新整理索引。

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update

若 wget 回傳 404 Not Found,代表檔案名稱已變更。請開啟 Zabbix 下載頁面,選擇 Ubuntu 24.04,並複製其顯示的正確 zabbix-release URL。執行 apt update 後,若顯示 repo.zabbix.com 行且無金鑰警告,即為正常;若出現 The following signatures couldn't be verified because the public key is not available,表示發行版套件未正確安裝金鑰,請重新執行 dpkg -i 並再次更新。

步驟 2:安裝伺服器、前端與代理程式

一次安裝針對 MySQL 編譯的伺服器、PHP 前端、nginx 設定檔、SQL 結構檔案以及 agent2。

sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

zabbix-server-mysql 是針對 MySQL/MariaDB 編譯的伺服器版本;若使用 PostgreSQL,請改為安裝 zabbix-server-pgsql 並調整後續的資料庫設定步驟。zabbix-sql-scripts 包含您稍後匯入的資料庫結構,在 7.0 版本中這是獨立的套件,若遺漏此套件,將會導致後續匯入路徑找不到檔案。上述套件皆不會自動安裝資料庫引擎,若伺服器尚未安裝,請務必先行安裝 MariaDB。

sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb

步驟 3,建立具備正確字元集的資料庫

Zabbix 對定序(collation)的要求非常嚴格:它僅支援使用 utf8mb4_bin 的 utf8mb4,或是使用 utf8_bin 的舊版 utf8(即 utf8mb3),而官方文件強烈建議使用 utf8mb4_bin 的 utf8mb4,這也是本指南所採用的設定。請使用 sudo mysql 開啟 root shell 並執行:

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;

該 SET GLOBAL 行是匯入過程中的安全閥。Zabbix 的資料庫結構在匯入期間會建立確定性觸發器,而當二進位日誌(binary logging)開啟時,非 SUPER 帳號(如 zabbix)無法建立這些觸發器。MySQL 8 預設啟用二進位日誌,部分託管的 MariaDB 建置版本亦然(標準版 MariaDB 則否)。若在啟用二進位日誌的伺服器上忽略此旗標,匯入程序將因 ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled 而中斷。以 root 身分設定該旗標可排除此問題;匯入完成後,您可以將其關閉。請務必準確記錄密碼,伺服器設定檔必須使用完全一致的字串。

步驟 4,匯入結構描述(最常被忽略的步驟)

這是前端無法載入最常見的原因:您建立的資料庫目前是空的。請將 zabbix-sql-scripts 中提供的結構描述匯入其中。

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
  mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

系統會提示輸入 zabbix 密碼,在小型 VPS 上執行時間約為 30 到 60 秒。成功時不會輸出任何訊息,保持靜默即代表成功。若出現 zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory,表示未安裝 zabbix-sql-scripts 套件(請回到步驟 2)。若出現 ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost',表示步驟 3 設定的密碼或權限有誤。執行完成後,請將安全旗標關閉:

sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"

使用 sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" 確認匯入結果,若顯示為數字而非 doesn't exist 錯誤,即表示結構描述已成功匯入。

步驟 5,在 zabbix_server.conf 中設定資料庫密碼

伺服器會從 /etc/zabbix/zabbix_server.conf 讀取其資料庫憑證。僅需設定密碼,DBName 與 DBUser 已預設為 zabbix。請取消 # DBPassword= 行的註解並進行設定:

DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password

此密碼必須與步驟 3 設定的內容完全一致。DBPassword 為空或錯誤是後續出現「Zabbix server is not running」橫幅的主要原因:daemon 啟動後因無法登入而退出。螢幕上不會顯示錯誤訊息,僅能在日誌中查閱。

步驟 6,將 Nginx 指向前端

zabbix-nginx-conf 套件會在 /etc/zabbix/nginx.conf 安裝一個伺服器區塊,並從 /etc/nginx/conf.d/zabbix.conf 連結至 Nginx,但其預設將 listen 與 server_name 行註解掉,因此在您編輯這些設定前,Nginx 不會為 Zabbix 提供任何服務:

server {
    listen          80;
    server_name     zabbix.example.com;
    ...
}

請使用您的網域名稱,若尚未設定 DNS,則使用伺服器的公開 IP。這裡有兩個陷阱。Ubuntu 預設的 Nginx 歡迎頁面也會監聽 80 埠,並被標記為預設伺服器,因此任何無法匹配名稱的請求都會導向該頁面;請移除它,否則會載入錯誤的頁面:sudo rm -f /etc/nginx/sites-enabled/default。若 /etc/nginx/conf.d/zabbix.conf 遺失(這是已知的套件封裝問題),請手動執行 sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf 建立連結。接著測試並重新載入:

sudo nginx -t
sudo systemctl reload nginx

nginx -t 應顯示 test is successful。若顯示 nginx: [emerg] a duplicate default server for 0.0.0.0:80,代表預設網站與 Zabbix 區塊皆宣告監聽 default_server,請移除預設網站並重新測試。更常見的情況是測試通過但僅出現 conflicting server name 警告,而瀏覽器仍顯示預設的歡迎頁面:這是因為預設網站因名稱未匹配而勝出,移除該網站即可解決。

步驟 7:啟動並啟用服務

啟動 server、agent、PHP-FPM 與 nginx,並將其設為開機自動啟動。

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable  zabbix-server zabbix-agent2 nginx php8.3-fpm

Ubuntu 24.04 預設搭載 PHP 8.3,因此 FPM 服務名稱為 php8.3-fpm;zabbix-nginx-conf 套件會在此主程序下執行前端。確認伺服器已啟動並維持運作:

sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log

正常的日誌結尾應顯示伺服器已啟動,且其 housekeeper、poller 與 trapper 程序正在執行。若看到 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost',代表步驟 5 設定的 DBPassword 不符,請修正後重新啟動。若出現 [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist 行,代表您跳過了步驟 4 的結構匯入,導致伺服器沒有資料可讀取。

步驟 8,完成網頁設定精靈

瀏覽至 http://your-domain-or-ip。Zabbix 設定精靈將會開啟。請依照下列步驟操作:

  1. 歡迎頁面 (Welcome),選擇語言。
  2. 檢查先決條件 (Check of pre-requisites),每一列預設應顯示 OK;封裝好的 /etc/zabbix/php-fpm.conf pool 已預先調高 Zabbix 所需的 PHP 限制。
  3. 設定資料庫連線 (Configure DB connection),資料庫類型選擇 MySQL,主機為 localhost,連接埠為 0(代表預設連接埠或 socket),資料庫名稱為 zabbix,使用者為 zabbix,並輸入步驟 3 設定的密碼。若憑證錯誤或缺少 schema,錯誤會在此處顯示。
  4. 設定 (Settings),保留 Zabbix server 主機 localhost、連接埠 10051,並為此安裝命名。
  5. 安裝前摘要 (Pre-installation summary),接著點選 Install,精靈會寫入 /etc/zabbix/web/zabbix.conf.php。
  6. 完成 (Finish),以 Admin(大寫 A)及密碼 zabbix 登入,並立即在 Users 選單下變更密碼。

若精靈顯示 Cannot create the configuration file,代表網頁使用者無法寫入 /etc/zabbix/web/。請下載該精靈提供的 zabbix.conf.php,使用 sudo 手動放置於該位置,然後點選完成。

步驟 9,新增本機主機並掛載模板

Zabbix 不會自動監控自身。請前往 Data collection → Hosts → Create host,將主機名稱設為 zabbix-server,將其加入 Linux servers 群組,並新增一個 Agent 介面,IP 設定為 127.0.0.1,連接埠為 10050。在 Templates 分頁中,連結 Linux by Zabbix agent(此為被動輪詢模式;Linux by Zabbix agent active 則是讓 Agent 主動推送資料)。最後儲存設定。

一分鐘內,主機列表會顯示綠色的 ZBX 標籤,且指標資料將出現在 Monitoring → Latest data。若 ZBX 標籤顯示為紅色,代表伺服器無法連線至 Agent,此為下文將探討的故障模式,並非此步驟操作錯誤。

步驟 10,一個實用的觸發器與電子郵件警報

Linux by Zabbix agent 範本已內建針對高 CPU 使用率、低記憶體與磁碟空間已滿的觸發器,因此您在連結範本後即可立即獲得警報。若要了解其建置方式,請嘗試新增一個:開啟該主機,前往 Triggers → Create trigger,將其命名為 Root filesystem over 90% full on {HOST.NAME},嚴重性(severity)設為 High,並使用以下運算式:

last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90

vfs.fs.dependent.size[/,pused] 是範本的檔案系統探索功能為根目錄檔案系統所建立的百分比使用率項目(7.0 的 Linux 範本會收集一次 vfs.fs.get,並衍生出各掛載點的相依項目),因此該觸發器無需額外的資料收集即可運作。儲存設定即可。

觸發器僅會在儀表板上變更列的顏色,直到 action 觸發通知為止。在 Alerts → Media types → Email 下,設定 SMTP 伺服器、連接埠、寄件者位址、連線安全性(通常為 STARTTLS)以及任何轉送憑證,然後使用 Test 功能;若測試失敗,代表 SMTP 路徑設定有誤,必須在依賴警報前先行修正。在 Users → Users → Admin → Media → Add 下為 Admin 使用者設定電子郵件位址,並選擇要通知的嚴重性等級。接著在 Alerts → Actions → Trigger actions → Create action 下進行設定:新增如 Trigger severity >= Warning 的條件,並在 Operations 中選擇透過 Email 發送給 Admin。儲存並啟用該動作。偏好使用通訊軟體?Zabbix 7.0 內建 Slack、Discord 與 Telegram 的 webhook 媒體類型,但每種都需要各自的服務設定,而非使用 SMTP 設定:例如 Telegram 需要透過 BotFather 建立機器人,將其 token 填入媒體類型的 api_token 參數中,並將接收者的 chat ID 填入使用者的 Send to 欄位。請遵循整合說明文件(README)、啟用媒體類型、指派給使用者,並在動作中如同使用 Email 一樣進行設定。

使用 Agent 監控第二台伺服器

若要監控另一台伺服器,請同樣在該伺服器上加入 Zabbix 套件庫。由於 Ubuntu 24.04 本身未提供 Zabbix 套件,請僅安裝 agent:

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2

編輯 /etc/zabbix/zabbix_agent2.conf,將 Server 設定為 Zabbix server 的 IP 位址(用於被動輪詢);若需使用主動檢查,請設定 ServerActive 以及一個與您在前端介面所建立主機名稱一致的唯一 Hostname:

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

執行 sudo systemctl restart zabbix-agent2,並從 Zabbix server 開放 TCP 10050 埠連線至此機器。重啟服務至關重要:套件安裝完成後會立即以預設的 Server=127.0.0.1 啟動 agent,而 agent 僅在啟動時讀取設定檔。若僅執行 enable --now,系統會偵測到服務已在執行而不會變更任何設定,導致 agent 持續拒絕來自 Zabbix server 的連線。由於套件已啟用該 unit,開機自動啟動功能已預設開啟。回到前端介面,建立一個 Agent 介面指向該機器 IP 的主機,連結 Linux 模板,該主機將於一分鐘內回報狀態。

故障模式與對應字串

前端顯示 Error connecting to database 或資料庫錯誤。 在安裝精靈的資料庫步驟中,Access denied for user 'zabbix'@'localhost' (using password: YES) 代表密碼與步驟 3 不符,或是 GRANT 從未執行。若資料庫連線正常但前端回報 The frontend does not match Zabbix database 或 Table 'zabbix.users' doesn't exist,代表步驟 4 的結構匯入被跳過或失敗,請在全新建立的資料庫中重新執行。

橘色橫幅:Zabbix server is not running: the information displayed may not be current。 前端已啟動但無法連線至伺服器。有三種可能原因,依機率排序如下:服務已停止,請檢查 systemctl status zabbix-server 並啟動它。服務執行中但無法連線至資料庫,日誌顯示 [Z3001] connection to database 'zabbix' failed: [1045] Access denied,代表 DBPassword 錯誤或為空白。或是前端指向錯誤的伺服器,該設定儲存於 /etc/zabbix/web/zabbix.conf.php 中的主機 localhost 與埠號 10051。Ubuntu 預設不啟用 SELinux,因此 RHEL 指南中提到的 SELinux socket 問題並不適用;此處通常是資料庫密碼錯誤或服務未啟動。

主機顯示紅色 ZBX 標籤;項目錯誤 Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused。 Agent 未執行或未監聽。請檢查 systemctl status zabbix-agent2 並確認 ListenPort=10050。若出現逾時而非「連線被拒」,代表防火牆阻擋了 10050 埠。相關的 Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. 錯誤代表 Agent 可連線,但其 Server= 設定行未列出 Zabbix server 的 IP,請將其加入並重啟 Agent。

顯示 Nginx 預設歡迎頁面,或 502 Bad Gateway。 顯示歡迎頁面代表預設站台仍啟用,或 Zabbix 設定檔未連結,請移除 /etc/nginx/sites-enabled/default 並確認步驟 6 中的 /etc/nginx/conf.d/zabbix.conf 是否存在。出現 502 代表 Nginx 已連線至 PHP,但 PHP-FPM 未啟動或監聽於不同的 socket,請啟動 php8.3-fpm 並確認 Zabbix 設定檔中的 fastcgi_pass socket 與執行中的 pool 設定一致。

備份、升級與 TLS

資料庫記錄了所有歷史資料,請務必使用 mysqldump 排程備份,並將備份檔存放在伺服器外部:

mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz

/etc/zabbix 設定檔雖然體積小且值得保存,但它們可以重建;資料則無法。還原程序即為備份的逆向操作:建立資料庫、匯入備份檔,並將設定檔指向該資料庫。

7.0 版本內的升級屬於一般的 apt update && apt upgrade 執行程序;伺服器會在下次啟動時自動套用任何 schema 遷移,因此請升級套件並重新啟動 zabbix-server。未來的重大版本更新屬於刻意為之的變更,請務必閱讀升級說明、先匯出資料庫備份,並預期會有不可逆的 schema 變更。正是因為這種不可逆的跳躍,您才應鎖定 LTS 版本並持續使用。

請勿讓前端維持在明文 HTTP。一旦 DNS 指向該伺服器,請透過 Ubuntu 24.04 上 Nginx 的 Certbot 與 Let's Encrypt 設定 安裝憑證,這會重寫 server block 以監聽 443 埠並將 80 埠的請求重新導向。當您在強化一台用於監控其他所有伺服器的機器時,也請透過 fail2ban 封鎖 SSH 暴力破解嘗試 來鎖定其 SSH。監控登入資訊不應以明文傳輸,其入口也不應對密碼猜測攻擊者敞開。

FAQ

我需要安裝 Zabbix agent 嗎?還是可以不裝直接監控?

兩者皆可。Agent (agent2) 能提供豐富的單機指標,如 CPU、記憶體、磁碟、處理程序、服務與日誌檔案,是您擁有控制權之伺服器的標準選擇。無代理監控(Agentless)則適用於無法安裝軟體的裝置:例如透過 SNMP 監控交換器與印表機、以 ICMP ping 檢查連線狀態、透過 HTTP 檢查端點,或使用 IPMI 監控硬體健康。大多數實際部署會混合使用這兩種方式。

為什麼前端顯示 Zabbix server 未執行?

前端運作正常,但無法連接到執行中的 zabbix-server 程序。通常是因為伺服器啟動後,因 zabbix_server.conf 中的 DBPassword 設定錯誤或為空,導致無法登入資料庫而立即終止。請執行 systemctl status zabbix-server 並閱讀 /var/log/zabbix/zabbix_server.log;若出現 [Z3001] connection to database ... failed 相關訊息即可確認原因。修正密碼並重啟服務後,橫幅訊息會在 1 分鐘內消失。

我一定要用 MySQL 嗎?可以使用 PostgreSQL 嗎?

兩者皆完全支援:本指南採用 zabbix-server-mysql 搭配 MariaDB 或 MySQL,您也可以選擇 zabbix-server-pgsql 搭配 PostgreSQL。對於小型安裝,兩者差異不大。對於大型環境,PostgreSQL 搭配 TimescaleDB 擴充功能可對歷史資料表進行分區,大幅降低資料庫維護成本,這也是大型站點傾向使用它的原因。請選擇其中一種並持續使用,因為日後遷移需要完整的匯出與匯入,並非單純修改設定檔即可。

Zabbix 一體機伺服器需要多少 RAM?

若僅監控少量主機,2 GB 是實際的最低需求,超過數十台主機時,4 GB 會較為充裕;記憶體主要消耗在資料庫快取與伺服器的輪詢程序(pollers)。1 GB 的 VPS 可以執行,但隨著歷史資料增加,資料庫會面臨記憶體不足。若監控超過一百台主機,建議將資料庫拆分到獨立伺服器,並調整其緩衝池(buffer pool),而非單純增加單機的 RAM。

對於幾台伺服器來說,Zabbix 是否過於複雜?

有可能。如果您只需要確認「服務是否存活」並分享狀態頁面,使用如 Uptime Kuma 進行正常運作時間與狀態監控 這類輕量級工具,部署速度更快且一目了然。當您需要針對個別指標設定閾值、歷史圖表、主機範本與升級通知規則,且這些功能是簡單的 ping 工具無法在整個機群中提供時,才選擇 Zabbix。