cách cài Zabbix 7.0 LTS trên Ubuntu 24.04
Hướng dẫn cài Zabbix 7.0 LTS trên Ubuntu 24.04 từ repo đến nginx. Cách fix lỗi import MySQL schema và cấu hình agent2 chuẩn xác nhất cho VPS của bạn.
Những gì bạn sẽ xây dựng
Một VPS Ubuntu 24.04 duy nhất chạy toàn bộ stack Zabbix 7.0 LTS: daemon zabbix-server để poll và cảnh báo, database MariaDB/MySQL để lưu trữ mọi metric, frontend PHP chạy bởi nginx, và zabbix-agent2 để thu thập metric từ chính máy đó. Sau khi hoàn tất, bạn chỉ cần trỏ nó tới một server thứ hai, gắn một template, và nhận email ngay lập tức khi đĩa đầy hoặc một service bị chết.
Zabbix nặng hơn các công cụ hiển thị status-page: đây là một hệ thống time-series thực thụ với templates, triggers, escalation và lưu trữ history. Hầu hết các lỗi phát sinh nằm ở ba bước mà mọi người thường bỏ qua — import database schema, thiết lập password database mà server thực sự đọc, và uncomment hai dòng trong config của nginx. Làm đúng những bước đó thì phần còn lại rất dễ dàng. Nếu bạn chỉ muốn kiểm tra up/down và một status page có thể chia sẻ, Uptime Kuma status monitor nhẹ nhàng có thể làm việc đó chỉ trong một container; Zabbix phát huy sức mạnh khi bạn cần ngưỡng (threshold) cho từng metric và escalation trên nhiều host.
Hãy sử dụng dòng 7.0 LTS: server, frontend, agent2 và schema của nó được đóng gói cùng phiên bản, và nó sẽ nhận các bản vá bảo mật trong nhiều năm. Trước khi copy tên file repository bên dưới, hãy xem qua trang download chính thức của Zabbix — package release latest luôn trỏ đến bản release 7.0 mới nhất, nhưng nếu bạn muốn cố định một bản build 7.0-N cụ thể, trang đó cũng liệt kê tên file đó. Mọi lệnh khác ở đây đều ổn định cho toàn bộ dòng 7.0.
Sizing, ports và các điều kiện tiên quyết
Giả định bạn có một Ubuntu 24.04 KVM VPS mới với quyền root hoặc sudo. Hãy cân nhắc kỹ về tài nguyên: 2 GB RAM và hai vCPU là mức tối thiểu thực tế cho server, database, nginx và PHP trên một máy duy nhất để monitor một vài host. Một máy 1 GB có thể boot được nhưng sẽ làm database bị thiếu tài nguyên khi history tăng lên; hãy chuẩn bị 4 GB khi có hơn vài chục host, và khi vượt quá một trăm host, hãy chuyển database sang một server riêng. Dung lượng đĩa tăng theo số lượng item bạn thu thập và thời gian bạn giữ history; hãy dự trù vài gigabyte để bắt đầu, và trình dọn dẹp (housekeeper) sẽ tự xóa dữ liệu cũ theo các window retention mà bạn thiết lập.
Ports: 80 và 443 cho frontend, để public hoặc giới hạn cho IP của riêng bạn. Server lắng nghe trên TCP 10051 cho các active agents đẩy dữ liệu vào, và mỗi agent lắng nghe trên TCP 10050 để server poll nó. Chỉ mở những gì bạn cần expose nếu có firewall đứng trước. Một bản ghi DNS A cho frontend là cần thiết, vì bạn sẽ muốn một certificate thật cho nó — một máy Zabbix theo dõi mọi service khác mà bạn chạy, nên nó thuộc về stack self-hosting rộng lớn hơn cần chạy vào năm 2026 thay vì chỉ được gắn thêm vào như một ý tưởng phụ.
Bước 1 — Thêm repository chính thức của Zabbix 7.0
Package zabbix-release chỉ làm một việc: nó đưa apt source list và signing key vào hệ thống của bạn. Cài đặt nó, sau đó refresh index.
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 updateNếu wget trả về 404 Not Found, nghĩa là tên file đã bị thay đổi — hãy mở trang download của Zabbix, chọn Ubuntu 24.04, và copy chính xác URL zabbix-release mà nó hiển thị. Một lệnh apt update sạch sẽ sẽ hiển thị một dòng repo.zabbix.com và không có cảnh báo key; The following signatures couldn't be verified because the public key is not available nghĩa là package release chưa cài đặt key, vì vậy hãy chạy lại dpkg -i và update lại.
Bước 2 — Cài đặt server, frontend, và agent
Cài đặt server build cho MySQL, frontend PHP, config nginx, các file SQL schema, và agent2 trong một lần duy nhất.
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql là server được compile cho MySQL/MariaDB; đối với PostgreSQL, hãy cài zabbix-server-pgsql thay thế và điều chỉnh các bước database bên dưới. zabbix-sql-scripts chứa schema mà bạn sẽ import tiếp theo — nó là một package riêng biệt trong bản 7.0, và việc quên nó chính là lý do khiến đường dẫn import bị báo thiếu sau đó. Không có lệnh nào trong số này cài đặt database engine, vì vậy hãy cài MariaDB ngay nếu máy chưa có.
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbBước 3 — Tạo database với charset phù hợp
Zabbix rất khắt khe về collation: database phải là utf8mb4 với utf8mb4_bin, nếu không quá trình import sẽ chết giữa chừng với các lỗi foreign-key. Mở một shell root với sudo mysql và chạy:
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;Dòng SET GLOBAL đó là một chốt an toàn cho việc import. Zabbix schema tạo ra các stored functions, và một account không phải SUPER như zabbix không thể tạo chúng khi binary logging đang bật — MySQL 8 bật binary logging theo mặc định, và một số bản build MariaDB được quản lý cũng vậy (MariaDB mặc định thì không). Bỏ qua flag này trên một server đang bật binary logging và việc import sẽ dừng lại với lỗi ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Thiết lập nó dưới quyền root sẽ giải quyết vấn đề; bạn hãy tắt nó đi sau khi import xong. Ghi nhớ chính xác password — config server cần chuỗi ký tự giống hệt từng byte một.
Bước 4 — Import schema (bước mà mọi người thường bỏ qua)
Đây là lý do phổ biến nhất khiến frontend mới cài không load được: database bạn vừa tạo đang trống rỗng. Hãy load schema đi kèm trong zabbix-sql-scripts vào đó.
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbixNó sẽ hỏi password zabbix, chạy trong khoảng 30 đến 60 giây trên một VPS nhỏ, và không in ra gì nếu thành công — im lặng là kết quả đúng. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory nghĩa là package zabbix-sql-scripts chưa được cài đặt (quay lại Bước 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' nghĩa là password hoặc quyền grant từ Bước 3 bị sai. Sau khi hoàn tất, hãy tắt flag an toàn đi:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"Xác nhận việc load bằng sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" — một con số, không phải lỗi doesn't exist, nghĩa là schema đã vào.
Bước 5 — Thiết lập database password trong zabbix_server.conf
Server đọc thông tin đăng nhập database từ /etc/zabbix/zabbix_server.conf. Chỉ cần thiết lập password — DBName và DBUser đã mặc định là zabbix. Uncomment dòng # DBPassword= và thiết lập nó:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-passwordPassword phải khớp từng byte với password ở Bước 3. Một password trống hoặc sai DBPassword là nguyên nhân hàng đầu gây ra banner "Zabbix server is not running" mà bạn sẽ gặp sau này: daemon khởi chạy, không thể login, và thoát ra. Không có gì hiện trên màn hình — chỉ có log mới nói cho bạn biết.
Bước 6 — Trỏ nginx vào frontend
Package zabbix-nginx-conf cài đặt một server block tại /etc/zabbix/nginx.conf và link nó vào nginx từ /etc/nginx/conf.d/zabbix.conf, nhưng nó đi kèm với các dòng listen và server_name đã bị comment, nên nginx sẽ không phục vụ gì cho Zabbix cho đến khi bạn chỉnh sửa chúng:
server {
listen 80;
server_name zabbix.example.com;
...
}Sử dụng domain của bạn, hoặc IP public của server nếu bạn chưa có DNS. Hai lỗi cần lưu ý. Trang welcome mặc định của Ubuntu cũng lắng nghe trên port 80 và được đánh dấu là default server, nên nó sẽ chiếm quyền cho bất kỳ request nào không khớp tên — hãy xóa nó hoặc bạn sẽ load sai trang: sudo rm -f /etc/nginx/sites-enabled/default. Và nếu /etc/nginx/conf.d/zabbix.conf bị thiếu (một lỗi đóng gói đã biết), hãy tạo link thủ công bằng sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Sau đó test và reload:
sudo nginx -t
sudo systemctl reload nginxnginx -t sẽ in ra test is successful. Nếu nó in ra nginx: [emerg] a duplicate default server for 0.0.0.0:80, nghĩa là cả default site và Zabbix block đều đang chiếm default_server — hãy xóa default site và test lại. Thường gặp hơn là test pass nhưng chỉ có một cảnh báo conflicting server name mà trình duyệt vẫn hiển thị trang welcome mặc định: đó là do default site đang chiếm quyền với một name không khớp, và xóa nó sẽ sửa được lỗi này.
Bước 7 — Khởi chạy và enable các services
Khởi chạy server, agent, PHP-FPM và nginx, sau đó enable chúng để chúng tự chạy khi reboot.
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmUbuntu 24.04 đi kèm PHP 8.3, nên service FPM là php8.3-fpm; package zabbix-nginx-conf chạy frontend của nó dưới cùng một master đó. Xác nhận server đã khởi chạy và đang chạy:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.logMột log khỏe mạnh sẽ kết thúc bằng việc server đã khởi chạy và các process housekeeper, poller và trapper đang chạy. Nếu bạn thấy [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', nghĩa là DBPassword từ Bước 5 không khớp — hãy sửa nó và restart. Một dòng [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist nghĩa là bạn đã bỏ qua bước import schema ở Bước 4, nên server không có gì để đọc.
Bước 8 — Hoàn tất web setup wizard
Truy cập vào http://your-domain-or-ip. Zabbix setup wizard sẽ mở ra. Hãy thực hiện theo các bước:
- Welcome — chọn ngôn ngữ.
- Check of pre-requisites — mọi dòng nên hiển thị OK ngay lập tức; pool
/etc/zabbix/php-fpm.confđi kèm đã nâng các giới hạn PHP mà Zabbix cần. - Configure DB connection — database type là MySQL, host
localhost, port0(nghĩa là port mặc định hoặc socket), database namezabbix, userzabbix, và password từ Bước 3. Sai credentials hoặc thiếu schema sẽ lộ ra ngay tại đây. - Settings — để nguyên Zabbix server host
localhost, port10051, và name install. - Pre-installation summary, sau đó Install — wizard sẽ ghi file
/etc/zabbix/web/zabbix.conf.php. - Finish — đăng nhập với user
Admin(chữ A hoa) với passwordzabbix, và đổi password đó ngay lập tức trong phần Users.
Nếu wizard báo lỗi Cannot create the configuration file, nghĩa là web user không thể ghi file /etc/zabbix/web/ — hãy tải file zabbix.conf.php mà nó gợi ý, đặt nó vào đó thủ công bằng sudo, và nhấn Finish.
Bước 9 — Thêm host cục bộ và gắn template
Zabbix không tự động monitor chính nó. Vào Data collection → Hosts → Create host, đặt host name là zabbix-server, thêm nó vào group Linux servers, và thêm một Agent interface với IP 127.0.0.1, port 10050. Trong phần Templates, link Linux by Zabbix agent (biến thể passive-poll; Linux by Zabbix agent active là agent push). Lưu lại.
Trong vòng một phút, dòng host sẽ hiển thị nhãn ZBX màu xanh và các metric sẽ xuất hiện trong Monitoring → Latest data. Nhãn ZBX màu đỏ nghĩa là server không thể kết nối tới agent — đây là một lỗi sẽ được đề cập bên dưới, không phải lỗi ở bước này.
Bước 10 — Một trigger hữu ích và cảnh báo email
Template Linux by Zabbix agent đã có sẵn các triggers cho CPU cao, memory thấp và đĩa đầy, nên bạn sẽ có cảnh báo ngay khi vừa link nó. Để xem cách tạo một trigger, hãy tự thêm một cái: mở host, vào Triggers → Create trigger, đặt tên là Root filesystem over 90% full on {HOST.NAME}, set severity là High, và dùng biểu thức này:
last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90vfs.fs.dependent.size[/,pused] là item phần trăm sử dụng mà filesystem discovery của template tạo ra cho root filesystem (template Linux của 7.0 thu thập vfs.fs.get một lần và suy ra các item phụ thuộc theo từng mount), nên trigger sẽ kích hoạt mà không cần thu thập thêm dữ liệu. Lưu lại.
Một trigger chỉ đổi màu dòng trên dashboard cho đến khi một action thông báo cho ai đó. Vào Alerts → Media types → Email, thiết lập SMTP server, port, sender address, connection security (thường là STARTTLS) và bất kỳ relay credentials nào, sau đó dùng Test — nếu lỗi ở đó nghĩa là đường dẫn SMTP đang sai trước khi bất kỳ cảnh báo thật nào được gửi đi. Cấp cho user Admin một địa chỉ tại Users → Users → Admin → Media → Add và chọn các mức độ severity cần thông báo. Sau đó kết nối nó tại Alerts → Actions → Trigger actions → Create action: thêm một condition như Trigger severity >= Warning, và trong phần Operations gửi đến Admin qua Email. Lưu và enable nó. Bạn thích chat hơn? Zabbix 7.0 có sẵn webhook media types cho Slack, Discord và Telegram — hãy cấu hình chúng tương tự như Email và gán cho một user.
Monitor một server thứ hai bằng agent
Để theo dõi một server khác, hãy cài đặt Zabbix repository tại đó — Ubuntu 24.04 không có sẵn các package Zabbix — sau đó chỉ cài đặt 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-agent2Chỉnh sửa /etc/zabbix/zabbix_agent2.conf, set Server thành IP của Zabbix server (để passive polling) và, đối với active checks, set ServerActive cùng với một Hostname duy nhất khớp với host bạn tạo trên frontend:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01Chạy sudo systemctl enable --now zabbix-agent2 và mở port TCP 10050 từ Zabbix server tới máy này. Quay lại frontend, tạo một host có Agent interface trỏ tới IP của máy đó, link template Linux, và nó sẽ báo cáo trong vòng một phút.
Các lỗi thường gặp và các chuỗi ký tự bạn sẽ thấy
Frontend hiển thị Error connecting to database hoặc lỗi database. Trong bước DB của wizard, Access denied for user 'zabbix'@'localhost' (using password: YES) nghĩa là password không khớp với Bước 3 hoặc GRANT chưa được chạy. Nếu database đã kết nối nhưng frontend báo The frontend does not match Zabbix database hoặc Table 'zabbix.users' doesn't exist, nghĩa là bước import schema ở Bước 4 đã bị bỏ qua hoặc thất bại — hãy chạy lại vào một database mới tạo.
Banner màu cam: Zabbix server is not running: the information displayed may not be current. Frontend đã chạy nhưng không thể kết nối tới server đang hoạt động. Có ba nguyên nhân, khả năng cao nhất là cái đầu tiên. Service đã chết — hãy kiểm tra systemctl status zabbix-server và khởi động nó. Service đang chạy nhưng không thể kết nối tới database — log hiển thị [Z3001] connection to database 'zabbix' failed: [1045] Access denied, nghĩa là password DBPassword bị sai hoặc trống. Hoặc frontend đang trỏ tới sai server, được lưu dưới dạng host localhost port 10051 trong /etc/zabbix/web/zabbix.conf.php. Trên Ubuntu không có SELinux theo mặc định, nên lỗi SELinux-socket mà các hướng dẫn RHEL đề cập không áp dụng ở đây; ở đây lỗi hầu như luôn là password database hoặc một service đã bị dừng.
Host hiển thị nhãn ZBX màu đỏ; lỗi item Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. Agent chưa chạy hoặc không lắng nghe. Kiểm tra systemctl status zabbix-agent2 và xác nhận ListenPort=10050. Nếu bị timeout thay vì "connection refused" nghĩa là firewall đang chặn port 10050. Lỗi Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. liên quan nghĩa là agent có thể kết nối được nhưng dòng Server= của nó không liệt kê IP của Zabbix server — hãy thêm nó và restart agent.
Trang welcome nginx mặc định, hoặc 502 Bad Gateway. Trang welcome nghĩa là default site vẫn đang được enable hoặc Zabbix block chưa được link — hãy xóa /etc/nginx/sites-enabled/default và xác nhận /etc/nginx/conf.d/zabbix.conf đã tồn tại, như ở Bước 6. Một lỗi 502 nghĩa là nginx đã kết nối được tới PHP nhưng PHP-FPM đã tắt hoặc đang lắng nghe trên một socket khác — hãy khởi động php8.3-fpm và kiểm tra xem socket fastcgi_pass trong Zabbix block có khớp với pool đang chạy không.
Backup, nâng cấp và TLS
Database chứa toàn bộ history, vì vậy hãy backup nó bằng mysqldump theo lịch trình và lưu bản dump ở một máy khác:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gzCác file config /etc/zabbix rất nhỏ và cũng nên được lưu lại, nhưng chúng có thể rebuild được; còn dữ liệu thì không. Khôi phục (restore) là quy trình ngược lại — tạo database, import bản dump, trỏ config vào đó.
Nâng cấp trong cùng dòng 7.0 là các lệnh apt update && apt upgrade thông thường; server sẽ tự áp dụng các schema migrations vào lần khởi động tiếp theo, vì vậy hãy nâng cấp các package và restart zabbix-server. Một bản major line trong tương lai là một bước đi có chủ đích — hãy đọc ghi chú nâng cấp, dump database trước, và chuẩn bị cho một sự thay đổi schema một chiều. Bước nhảy một chiều đó chính là lý do bạn nên dùng dòng LTS và ở lại với nó.
Đừng để frontend chạy HTTP thuần. Khi DNS đã trỏ về máy, hãy cài certificate cho nó bằng Certbot và Let's Encrypt trên nginx cho Ubuntu 24.04, nó sẽ rewrite server block để lắng nghe trên 443 và redirect 80. Trong khi bạn đang hardening một máy dùng để login theo dõi mọi server khác, hãy khóa cả SSH của nó bằng fail2ban để chặn các nỗ lực brute-force SSH. Một login giám sát không nên chạy dưới dạng cleartext, và cửa chính của nó không nên để mở cho những kẻ đoán password.
FAQ
Tôi có cần Zabbix agent không, hay có thể monitor mà không cần nó?
Cả hai đều được. Agent (agent2) cung cấp các metric chi tiết cho từng host — CPU, memory, đĩa, process, service, log files — và là lựa chọn thông thường cho các server mà bạn kiểm soát. Monitoring không agent (agentless) dành cho các thiết bị mà bạn không thể cài phần mềm: SNMP cho switch và máy in, ICMP ping để kiểm tra kết nối, HTTP checks cho các endpoint, IPMI cho sức khỏe phần cứng. Hầu hết các triển khai thực tế đều kết hợp cả hai.
Tại sao frontend báo Zabbix server is not running?
Frontend hoạt động nhưng không thể kết nối tới một process zabbix-server đang chạy. Thường là server đã khởi chạy, nhưng thất bại khi login vì DBPassword trong zabbix_server.conf bị sai hoặc trống, và thoát ra ngay lập tức. Chạy systemctl status zabbix-server và đọc /var/log/zabbix/zabbix_server.log; một dòng [Z3001] connection to database ... failed sẽ xác nhận điều đó. Sửa password và restart, banner sẽ biến mất trong vòng một phút.
Tôi có bắt buộc phải dùng MySQL không, hay có thể dùng PostgreSQL?
Cả hai đều được hỗ trợ đầy đủ: zabbix-server-mysql với MariaDB hoặc MySQL như hướng dẫn này, hoặc zabbix-server-pgsql với PostgreSQL. Với các cài đặt nhỏ thì sự lựa chọn không quan trọng. Với các hệ thống lớn, PostgreSQL với extension TimescaleDB giúp phân vùng các bảng history và giúp việc dọn dẹp (housekeeping) rẻ hơn nhiều, đó là lý do các hệ thống lớn ưu tiên nó. Hãy chọn một cái và dùng nó — việc chuyển đổi sau này nghĩa là phải export và import lại toàn bộ, chứ không phải chỉ là đổi config.
Một server Zabbix all-in-one cần bao nhiêu RAM?
Với một máy duy nhất monitor một vài host, 2 GB là mức tối thiểu thực tế và 4 GB là thoải mái khi có hơn vài chục host; bộ nhớ chủ yếu dành cho database cache và các pollers của server. Một VPS 1 GB có thể chạy nhưng sẽ làm database thiếu tài nguyên khi history tăng lên. Khi vượt quá một trăm host, hãy tách database sang một server riêng và tinh chỉnh buffer pool của nó thay vì nhồi thêm RAM vào một máy.
Zabbix có quá dư thừa cho một vài server không?
Có thể. Nếu tất cả những gì bạn cần là "nó có đang chạy không?" và một trang web có thể chia sẻ, một công cụ nhẹ hơn như Uptime Kuma để monitor uptime và status sẽ triển khai nhanh hơn và dễ đọc hơn khi nhìn lướt qua. Hãy chọn Zabbix khi bạn muốn có ngưỡng cho từng metric, biểu đồ lịch sử, host theo template và các quy tắc escalation — những thứ mà một công cụ ping đơn giản không thể cung cấp cho bạn trên một hệ thống lớn.