Ubuntu 24.04 安裝 Zabbix 7.0 LTS 教學
在 Ubuntu 24.04 上部署 Zabbix 7.0 LTS 的完整指南。涵蓋新增官方儲存庫、匯入 MySQL 資料庫結構、設定 nginx 前端及 agent2 的關鍵步驟,並提供排除常見安裝錯誤的實用方案。
您將建置的內容
一台執行完整 Zabbix 7.0 LTS 堆疊的單一 Ubuntu 24.04 VPS:負責輪詢與發送警報的 zabbix-server 守護行程、儲存所有指標的 MariaDB/MySQL 資料庫、由 nginx 提供的 PHP 前端,以及從伺服器本身收集指標的 zabbix-agent2。系統啟動後,將其指向第二台伺服器並掛載範本,即可在磁碟空間耗盡或服務中斷時立即收到電子郵件通知。
Zabbix 比狀態頁面工具更為強大:它是一個具備範本、觸發器、升級機制與歷史資料保留功能的即時時間序列系統。大多數困難源於人們忽略的三個步驟:匯入資料庫結構、設定伺服器實際讀取的資料庫密碼,以及取消 nginx 設定檔中兩行的註解。只要正確完成這些步驟,其餘設定便如同精靈導引般簡單。若您僅需要上線/離線檢查與可分享的狀態頁面,輕量級 Uptime Kuma 狀態監控器 透過單一容器即可達成;當您需要針對多台主機進行個別指標閾值設定與警報升級時,Zabbix 才是最佳選擇。
請使用 7.0 LTS 系列:其伺服器、前端、agent2 與結構版本一致,並可獲得多年的安全性更新。在複製下方的儲存庫檔名之前,請先瀏覽官方 Zabbix 下載頁面。latest 發行套件總是會解析為最新的 7.0 小版本,但若您希望鎖定特定的 7.0-N 建置版本,該頁面也列出了對應的檔名。此處的其他所有指令在整個 7.0 系列中皆保持穩定。
規模規劃、連接埠與先決條件
假設您使用全新的 Ubuntu 24.04 KVM VPS,並具備 root 或 sudo 權限。關於資源需求請務必務實:若要在單一伺服器上同時運行伺服器端、資料庫、nginx 與 PHP 來監控少量主機,2 GB RAM 與兩顆 vCPU 是最低門檻。1 GB 的機器雖然可以開機,但隨著歷史資料增長,資料庫將會面臨資源匱乏;若監控主機超過數十台,請規劃 4 GB RAM,若超過百台,則應將資料庫移至獨立伺服器。磁碟空間需求取決於收集的項目數量與歷史資料保留時間;初期請預留數 GB 空間,系統會根據您設定的保留週期,透過 housekeeper 機制清理舊資料。
連接埠:前端介面使用 80 與 443,可選擇公開或僅限特定 IP 存取。伺服器端監聽 TCP 10051 以接收主動式代理程式(active agents)推送的資料,而每個代理程式則監聽 TCP 10050 以供伺服器端輪詢。若前方設有防火牆,請僅開放必要的連接埠。建議為前端設定 DNS A 記錄,以便部署正式憑證。Zabbix 伺服器負責監控您運行的所有其他服務,因此它應被納入 2026 年值得部署的自架服務架構 之中,而非事後才隨意加裝。
Step 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-agent2zabbix-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 並搭配 utf8mb4_bin,否則匯入程序會因外鍵錯誤而中斷。請使用 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 架構會建立預存函式,而像 zabbix 這種非 SUPER 的帳號在啟用二進位記錄(binary logging)時無法建立這些函式。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」橫幅的主要原因:守護行程啟動後因登入失敗而退出。螢幕上不會顯示任何錯誤訊息,僅能在記錄檔中查閱。
Step 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 歡迎頁面同樣監聽 port 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 nginxnginx -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-fpmUbuntu 24.04 隨附 PHP 8.3,因此 FPM 服務為 php8.3-fpm;zabbix-nginx-conf 套件在其主程序下執行前端。確認 server 已啟動並維持運作:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log正常的日誌結尾會顯示 server 已啟動,且其 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 的結構匯入,導致 server 沒有資料可讀取。
步驟 8,完成網頁設定精靈
瀏覽至 http://your-domain-or-ip。Zabbix 設定精靈將會開啟。請依照下列步驟操作:
- 歡迎畫面 (Welcome),選擇語言。
- 檢查先決條件 (Check of pre-requisites),所有項目應顯示為 OK;封裝好的
/etc/zabbix/php-fpm.conf資源池已預先調整為 Zabbix 所需的 PHP 限制。 - 設定資料庫連線 (Configure DB connection),資料庫類型選擇 MySQL,主機為
localhost,連接埠為0(代表預設連接埠或 Socket),資料庫名稱為zabbix,使用者為zabbix,並輸入步驟 3 設定的密碼。若憑證錯誤或缺少 Schema,此處會顯示錯誤。 - 設定 (Settings),保留 Zabbix server 主機
localhost與連接埠10051,並為此安裝命名。 - 安裝前摘要 (Pre-installation summary),接著點選 安裝 (Install),精靈會寫入
/etc/zabbix/web/zabbix.conf.php。 - 完成 (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 群組,並新增一個 IP 為 127.0.0.1、連接埠為 10050 的 Agent 介面。在 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},嚴重性設為 High,並使用以下運算式:
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.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 媒體類型,設定方式與 Email 相同,並將其指派給使用者即可。
使用代理程式監控第二台伺服器
若要監控另一台伺服器,請同樣在該伺服器上加入 Zabbix 套件庫。Ubuntu 24.04 本身並未提供 Zabbix 套件,請僅安裝代理程式:
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 伺服器的 IP 位址(用於被動輪詢)。若要進行主動檢查,請設定 ServerActive 以及與您在前端介面所建立主機名稱一致的唯一 Hostname:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01執行 sudo systemctl enable --now zabbix-agent2,並從 Zabbix 伺服器開啟通往此機器的 TCP 10050 連接埠。回到前端介面,建立一台主機,將其代理程式介面指向該機器的 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。若出現逾時而非「連線被拒 (connection refused)」,代表防火牆阻擋了 10050 連接埠。相關的 Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. 錯誤代表 Agent 可連線,但其 Server= 設定行未列出 Zabbix 伺服器的 IP,請將其加入並重新啟動 Agent。
顯示 nginx 預設歡迎頁面,或 502 Bad Gateway。 顯示歡迎頁面代表預設網站仍啟用,或 Zabbix 區塊未連結,請移除 /etc/nginx/sites-enabled/default 並確認 /etc/nginx/conf.d/zabbix.conf 存在(如步驟 6 所述)。出現 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。未來的重大版本更新屬於刻意變更,請務必閱讀升級說明、先行備份資料庫,並預期會發生單向的結構描述變更。正是因為這種單向變更,您才需要鎖定 LTS 版本並持續使用。
請勿讓前端維持在明文 HTTP。一旦 DNS 指向該伺服器,請透過 在 Ubuntu 24.04 的 nginx 上使用 Certbot 與 Let's Encrypt 安裝憑證,這會重寫伺服器區塊以監聽 443 連接埠並重新導向 80 連接埠。在強化這台用於監控您所有其他伺服器的機器時,也請透過 使用 fail2ban 禁止 SSH 暴力破解嘗試 來鎖定其 SSH。監控登入資訊不應以明文傳輸,且其入口不應對密碼猜測攻擊者敞開。
FAQ
我需要安裝 Zabbix agent 嗎?還是可以不安裝就進行監控?
兩者皆可。Agent (agent2) 能提供豐富的主機指標,包含 CPU、記憶體、磁碟、處理程序、服務與日誌檔案,是管理伺服器時的標準選擇。無代理監控則適用於無法安裝軟體的設備:透過 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。對於小型安裝,兩者差異不大。對於大型環境,搭配 TimescaleDB 擴充功能的 PostgreSQL 可對歷史資料表進行分區,大幅降低維護成本,因此大型站點多傾向使用此方案。請選擇其中一種並持續使用,後續若要遷移,需進行完整的匯出與匯入,而非僅是切換設定。
Zabbix 一體化伺服器需要多少記憶體?
若單台伺服器監控少量主機,2 GB 是實際的最低需求,超過數十台主機時,4 GB 較為充裕;記憶體主要消耗在資料庫快取與伺服器的輪詢程序 (pollers)。1 GB 的 VPS 可以執行,但隨著歷史資料增加,資料庫將會面臨記憶體不足。若監控超過百台主機,建議將資料庫拆分至獨立伺服器,並調整其緩衝池 (buffer pool) 設定,而非單純增加單機的記憶體。
對於幾台伺服器來說,Zabbix 是否過於複雜?
有可能。如果您只需要確認「服務是否存活」並擁有一個可分享的頁面,像 Uptime Kuma 監控服務存活與狀態 這類輕量級工具能更快部署且更易於閱讀。當您需要針對個別指標設定閾值、歷史圖表、主機範本與升級規則,且這些功能是簡單的 ping 工具無法在整個伺服器群中提供時,請選擇 Zabbix。