Zabbix is a mature, enterprise-grade open-source monitoring platform. A central server collects metrics from agents on Linux and Windows hosts, plus SNMP devices (switches, routers, UPS), web checks, databases and cloud services. It evaluates triggers and sends alerts. It shines when you monitor many heterogeneous systems, and want templates, a web UI and alerting in one package.

Zabbix vs Prometheus vs Netdata

Zabbix Prometheus + Grafana Netdata
Model Agent push/pull, central server with a database Pull-based time series Per-host agent, real-time
Strengths Templates, SNMP, Windows, built-in UI and alerting, inventory Cloud-native, PromQL, huge exporter ecosystem Zero-config, per-second detail
Config Mostly UI-driven Config files (GitOps-friendly) Automatic
Typical users IT ops, mixed infrastructure DevOps and Kubernetes Quick insight, small fleets

See Prometheus node_exporter and Netdata.

Sizing

Monitored hosts Server (Zabbix + DB on one VPS)
Up to ~100 2 vCPU, 4 GB RAM, 50 GB SSD
100–500 4 vCPU, 8 GB RAM, fast SSD
More Separate database server, proxies, partitioning (TimescaleDB)

The database is the bottleneck. Fast storage and enough RAM matter most.

1. Install the Zabbix repository (Ubuntu 24.04, Zabbix 7.0 LTS)

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

(Pick the matching package for your OS on zabbix.com/download.)

2. Install server, frontend and agent (PostgreSQL + Nginx)

sudo apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2 postgresql

Create the database:

sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

(MySQL/MariaDB works too: zabbix-server-mysql, with a utf8mb4_bin database. See MySQL users.)

Set the database password in /etc/zabbix/zabbix_server.conf:

DBPassword=your-db-password

Configure Nginx in /etc/zabbix/nginx.conf (listen and server_name), then start everything:

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

Open the web installer at http://zabbix.example.com, finish the wizard, and log in as Admin / zabbix. Change the password immediately. Then add HTTPS with Certbot. See Let’s Encrypt.

3. Add hosts with agents

On each Linux host:

# add the same Zabbix repository, then:
sudo apt install zabbix-agent2
sudo sed -i 's/^Server=.*/Server=10.0.0.5/; s/^ServerActive=.*/ServerActive=10.0.0.5/; s/^Hostname=.*/Hostname=web1/' /etc/zabbix/zabbix_agent2.conf
sudo systemctl enable --now zabbix-agent2
sudo ufw allow from 10.0.0.5 to any port 10050 proto tcp

Windows: install the Zabbix Agent 2 MSI, and set the server IP during setup.

In the web UI: Data collection → Hosts → Create host. Set the hostname, an agent interface (IP, port 10050), and link the template “Linux by Zabbix agent” (or “Windows by Zabbix agent”). Metrics appear within minutes.

Keep agent traffic on a private network or VPN, or enable PSK encryption between agent and server. See WireGuard.

4. Templates, triggers and alerts

  • Templates bundle items (metrics), triggers (problem conditions) and graphs. There are official ones for Linux, Windows, Nginx, MySQL, PostgreSQL, Docker, SNMP devices and more.
  • Triggers define problems, e.g. “free disk space < 10%” or “agent unavailable for 5 minutes”, with severities.
  • Media types (email, Telegram, Slack, webhooks) plus user media and trigger actions send notifications. Configure them under Alerts → Media types and Alerts → Actions.

Tune trigger thresholds to avoid alert fatigue.

5. Web and external checks

Add web scenarios (HTTP checks with steps, response time and status codes) or use the “Website certificate” template to watch TLS expiry. See SSL expiry checks.

Maintenance

  • Housekeeping / retention: set history and trend storage periods to control database growth. Use TimescaleDB for larger installs.
  • Backups: dump the database regularly, and back up /etc/zabbix. See database backup automation.
  • Upgrades: stay on LTS versions (6.0, 7.0…) for stability. Follow the upgrade notes, since the database is upgraded automatically on start.

Quick reference

Component Default port / path
Server (trapper) 10051
Agent (passive) 10050
Server config /etc/zabbix/zabbix_server.conf
Agent config /etc/zabbix/zabbix_agent2.conf
Web UI Nginx/Apache + PHP
Default login Admin / zabbix (change it!)

Related: Uptime Kuma and server security monitoring.

  • Monitoring
  • Self-Hosting
  • Linux