Ubuntu 24.04 安裝 Zabbix 7.0 LTS 教學
本指南詳細說明在 Ubuntu 24.04 上部署 Zabbix 7.0 LTS 的完整流程,包含新增官方 repo、匯入 MySQL schema、設定 nginx 前端與 agent2。我們特別針對資料庫密碼錯誤與 nginx 設定檔註解未取消等常見錯誤提供解決方案,助您快速建立穩定的監控系統。
建立目標
這是一個運行完整 Zabbix 7.0 LTS 堆疊的單一 Ubuntu 24.04 VPS:包含負責輪詢與告警的 zabbix-server 守護行程、儲存所有指標的 MariaDB/MySQL 資料庫、由 nginx 提供的 PHP 前端,以及從主機本身收集指標的 zabbix-agent2。部署完成後,您可以將其指向第二台伺服器、套用範本,並在磁碟滿載或服務停止時立即收到電子郵件。
Zabbix 的功能比狀態頁面工具更強大:它是一個具備範本、觸發器、升級機制與歷史紀錄保留功能的即時時序系統。大多數問題源於三個常見的疏失:未匯入資料庫結構、未設定伺服器實際讀取的資料庫密碼,以及未取消 nginx 設定檔中兩行指令的註解。只要正確完成這些步驟,後續操作將非常簡單。若您僅需要檢查服務狀態並提供可分享的狀態頁面,輕量級的 Uptime Kuma 狀態監控 僅需一個容器即可達成;當您需要針對各項指標設定閾值,並針對多台主機進行告警升級時,Zabbix 才是最佳選擇。
請使用 7.0 LTS 版本:其 server、frontend、agent2 與 schema 版本是同步發布的,且可獲得多年的安全性修補。在複製下方的儲存庫檔名之前,請先查看 Zabbix 官方下載頁面 —— latest 發行套件會自動指向最新的 7.0 小版本,但如果您想指定特定的 7.0-N 版本,該頁面也會列出對應的檔名。此處列出的所有其他指令在整個 7.0 系列中皆可通用。
規格、連接埠與先備條件
假設使用具備 root 或 sudo 權限的全新 Ubuntu 24.04 KVM VPS。請務必評估資源需求:若要在單台機器上執行 server、database、nginx 與 PHP 並監控少量主機,2 GB RAM 與 2 vCPUs 是實際的最低配置。若主機數量超過數十台,建議規劃 4 GB 記憶體;若超過一百台,請將 database 移至獨立伺服器。磁碟空間需求取決於收集的項目數量與歷史紀錄保存時間;初期建議預留數 GB 空間,且 housekeeper 會根據您設定的保留週期刪除舊資料。
連接埠:前端使用 80 與 443,可設為公開或僅限您的 IP 存取。Server 於 TCP 10051 監聽主動推送資料的 agent,而每個 agent 則於 TCP 10050 監聽 server 的輪詢。若前端設有防火牆,請僅開啟必要的連接埠。建議為前端設定 DNS A record,因為您會需要正式憑證;Zabbix 會監控您運行的所有其他服務,因此應將其納入 2026 年值得運行的自建服務堆疊,而非事後才勉強加入。
Step 1 — 新增官方 Zabbix 7.0 儲存庫
zabbix-release 套件的功能只有一個:將 apt source list 與簽章金鑰(signing key)寫入您的系統。請安裝該套件,接著重新整理索引。
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 並再次更新。
Step 2 — 安裝 server、frontend 與 agent
一次完成安裝針對 MySQL 編譯的 server、PHP frontend、nginx config、SQL schema 檔案以及 agent2。
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql 為針對 MySQL/MariaDB 編譯的 server;若使用 PostgreSQL,請改安裝 zabbix-server-pgsql 並調整下方的資料庫步驟。zabbix-sql-scripts 包含接下來要匯入的 schema —— 在 7.0 版本中這是一個獨立套件,若遺漏此套件,後續匯入路徑會顯示缺失。這些套件皆不包含資料庫引擎,若系統尚未安裝,請立即安裝 MariaDB。
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbStep 3 — 使用正確的字元集建立資料庫
Zabbix 對排序規則 (collation) 有嚴格要求:資料庫必須為 utf8mb4 且使用 utf8mb4_bin,否則匯入程序會在執行中因外鍵 (foreign-key) 錯誤而中斷。請使用 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 schema 會建立儲存函數 (stored functions),若帳號非 SUPER(例如 zabbix),在開啟 binary logging 的情況下將無法建立這些函數。MySQL 8 預設啟用 binary logging,部分託管型 MariaDB 版本亦然(標準版 MariaDB 則不會)。若在已啟用 binary logging 的伺服器上略過此 flag,匯入會因 ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled 而停止。使用 root 權限設定此參數可解決此問題;匯入完成後請將其關閉。請務必記下正確的密碼,伺服器設定必須使用完全相同的字串。
Step 4 — 匯入 schema(最常被忽略的步驟)
這是新前端無法載入最常見的原因:您建立的資料庫是空的。請將 zabbix-sql-scripts 附帶的 schema 匯入其中。
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 套件(請返回 Step 2)。若出現 ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost',表示 Step 3 的密碼或權限錯誤。執行完成後,請重新關閉安全旗標:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"使用 sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" 確認匯入結果。若顯示數字而非 doesn't exist 錯誤,即表示 schema 已匯入成功。
Step 5 — 在 zabbix_server.conf 中設定資料庫密碼
伺服器會從 /etc/zabbix/zabbix_server.conf 讀取資料庫憑證。只需設定密碼即可 — DBName 與 DBUser 預設值皆為 zabbix。請取消 # DBPassword= 行的註解並進行設定:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password密碼必須與 Step 3 中的內容完全一致。若 DBPassword 為空白或錯誤,將導致後續出現 "Zabbix server is not running" 提示:這是因為 daemon 啟動後登入失敗而結束。螢幕不會顯示錯誤訊息,請檢查 log 檔。
Step 6 — 將 nginx 指向 frontend
zabbix-nginx-conf 套件會在 /etc/zabbix/nginx.conf 安裝一個 server block,並透過 /etc/nginx/conf.d/zabbix.conf 將其連結至 nginx。但套件內建的 listen 與 server_name 行預設為註解狀態,因此在編輯這些行之前,nginx 無法為 Zabbix 提供服務:
server {
listen 80;
server_name zabbix.example.com;
...
}若尚未設定 DNS,請使用您的網域或伺服器的公用 IP。請注意兩點:Ubuntu 預設的 nginx welcome site 也監聽 port 80 並被標記為 default server,因此任何名稱不匹配的請求都會由它處理——請移除該網站以避免載入錯誤頁面: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,代表 default site 與 Zabbix block 同時佔用 default_server ——請移除 default site 後重新測試。常見情況是測試僅出現 conflicting server name 警告,但瀏覽器仍顯示預設的 welcome page:這代表 default site 在名稱不匹配時取得了優先權,移除該網站即可解決。
Step 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 套件的 frontend 亦在此 master 下執行。確認 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',代表 Step 5 的 DBPassword 不符,請修正後重新啟動。若出現 [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist,代表您跳過了 Step 4 的 schema 匯入,導致 server 無法讀取資料。
Step 8 — 完成 Web 設定精靈
瀏覽至 http://your-domain-or-ip。Zabbix 設定精靈將會開啟。請依照以下步驟操作:
- Welcome — 選擇語言。
- Check of pre-requisites — 預設情況下,每一列應顯示 OK;內建的
/etc/zabbix/php-fpm.confpool 已將 PHP 限制提升至 Zabbix 所需的程度。 - Configure DB connection — 資料庫類型選 MySQL,host 為
localhost,port 為0(即預設 port 或 socket),database name 為zabbix,user 為zabbix,並輸入 Step 3 的密碼。若憑證錯誤或缺少 schema,此步驟會報錯。 - Settings — 保持 Zabbix server host 為
localhost,port 為10051,並為安裝設定名稱。 - Pre-installation summary,接著點擊 Install — 精靈會寫入
/etc/zabbix/web/zabbix.conf.php。 - Finish — 使用
Admin(大寫 A) 與密碼zabbix登入,並立即在 Users 下修改該密碼。
若精靈回報 Cannot create the configuration file,代表 Web 使用者無法寫入 /etc/zabbix/web/ — 請下載精靈提供的 zabbix.conf.php,使用 sudo 手動將其放置於該路徑,然後點擊 Finish。
Step 9 — 新增 local host 並關聯 template
Zabbix 不會自動監控自身。請前往 Data collection → Hosts → Create host,將 host name 設定為 zabbix-server,將其加入 Linux servers group,並新增一個 IP 為 127.0.0.1、port 為 10050 的 Agent interface。在 Templates 欄位中,關聯 Linux by Zabbix agent(此為 passive-poll 版本;Linux by Zabbix agent active 則使用 agent push 模式)。點擊 Save。
在一分鐘內,host 列會顯示綠色的 ZBX 標籤,且數據會出現在 Monitoring → Latest data。若顯示紅色 ZBX 標籤,代表 server 無法連線至 agent —— 此錯誤模式將於下文說明,並非本步驟的操作錯誤。
Step 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] 是範本中 filesystem discovery 為 root 檔案系統建立的百分比使用率項目(Zabbix 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 完全相同,只需將其指派給使用者即可。
使用 Agent 監控第二台伺服器
若要監控另一台伺服器,請在該機器上新增 Zabbix repository(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 enable --now zabbix-agent2,並在 Zabbix server 上開啟連向此機器的 TCP 10050 埠。回到前端介面,建立一個 Agent 介面指向該機器 IP 的主機,並連結 Linux template,資料將在 1 分鐘內回傳。
錯誤模式與顯示字串
前端顯示 Error connecting to database 或資料庫錯誤。 在安裝精靈的 DB 步驟中,Access denied for user 'zabbix'@'localhost' (using password: YES) 表示密碼與 Step 3 不符,或未執行 GRANT。若資料庫已連線但前端顯示 The frontend does not match Zabbix database 或 Table 'zabbix.users' doesn't exist,代表 Step 4 的 schema 匯入被跳過或失敗 — 請對新建立的資料庫重新執行匯入。
橘色橫幅: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 的 host localhost port 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。若顯示 timeout 而非 "connection refused",代表防火牆正在阻擋 port 10050。相關的 Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. 代表 Agent 可連線,但其 Server= 檔案中未列出 Zabbix server 的 IP — 請新增該 IP 並重啟 Agent。
僅顯示 nginx 預設歡迎頁面,或 502 Bad Gateway。 顯示歡迎頁面代表預設網站仍處於啟用狀態,或 Zabbix 設定區塊未建立連結 — 請移除 /etc/nginx/sites-enabled/default 並確認 /etc/nginx/conf.d/zabbix.conf 如 Step 6 所述已存在。502 代表 nginx 已連線至 PHP,但 PHP-FPM 已停止或監聽於不同的 socket — 請啟動 php8.3-fpm 並確認 Zabbix 設定區塊中的 fastcgi_pass socket 與執行中的 pool 一致。
Backups, upgrades, and TLS
資料庫包含完整歷史紀錄,請定期使用 mysqldump 進行備份,並將 dump 檔儲存在主機之外:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz/etc/zabbix 設定檔體積很小,也值得備份,但它們可以重新建立;資料則不行。還原流程與備份相反:建立資料庫、匯入 dump 檔,並將設定檔指向該資料庫。
7.0 系列版本內的升級僅為一般的 apt update && apt upgrade 執行程序;伺服器會在下次啟動時套用所有 schema 遷移,因此請升級 packages 並重啟 zabbix-server。跨大版本的升級屬於重大變更,請先閱讀升級說明並備份資料庫,因為 schema 變更通常是不可逆的。這種不可逆的跳轉,正是為何應固定使用 LTS 版本並保持在該版本的原因。
請勿讓前端僅使用 plain HTTP。一旦 DNS 指向該主機,請使用 Certbot and Let's Encrypt on nginx for Ubuntu 24.04 安裝憑證,這會修改 server block 以監聽 443 埠並將 80 埠重新導向。當您在強化這台負責監控其他伺服器的主機時,也應透過 fail2ban banning brute-force SSH attempts 來鎖定 SSH。監控登入不應以明文傳輸,且其登入介面不應對密碼暴力破解攻擊敞開。
FAQ
我需要安裝 Zabbix agent,還是可以不使用它進行監控?
兩者皆可。使用 agent (agent2) 可取得豐富的單機指標,例如 CPU、記憶體、磁碟、進程、服務與 log 檔案;對於您可控的伺服器,這是標準做法。無代理 (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。對於小型安裝,選擇兩者差異不大。對於大型部署,搭配 TimescaleDB 擴充功能後的 PostgreSQL 可進行歷史資料表分區,大幅降低維護成本,因此大型網站傾向使用此方案。請選定一種並持續使用,因為後續遷移需要進行完整的匯出與匯入,而非僅修改設定。
Zabbix all-in-one 伺服器需要多少 RAM?
若僅監控少量主機,2 GB 是合理的最低配置;當主機超過數十台時,4 GB 會較為充裕;記憶體主要用於資料庫快取與伺服器的 pollers。1 GB 的 VPS 雖可執行,但隨著歷史資料增加,會導致資料庫記憶體不足。當主機超過一百台時,建議將資料庫拆分至獨立伺服器,並針對其 buffer pool 進行調優,而非持續增加單機的 RAM。
對於僅有幾台伺服器的環境,使用 Zabbix 是否過於複雜?
確實可能。如果您只需要確認「設備是否在線」並提供一個可分享的頁面,使用較輕量化的工具,例如 用於可用性與狀態監控的 Uptime Kuma,部署速度更快且易於快速閱讀。當您需要針對各項指標設定閾值、歷史圖表、主機範本以及升級規則(即簡單的 pinger 無法為大規模設備提供的功能)時,請選擇 Zabbix。