The official sizing table
The requirements page for Zabbix 7.4 gives four example configurations, assuming a Linux, BSD or Unix platform. The unit is the monitored metric, which the footnote defines loosely as one item plus one trigger plus one graph, and explicitly calls an estimation rule rather than a formula.
| Installation size | Monitored metrics | CPU/vCPU cores | Memory (GiB) |
|---|---|---|---|
| Small | 1,000 | 2 | 8 |
| Medium | 10,000 | 4 | 16 |
| Large | 100,000 | 16 | 64 |
| Very large | 1,000,000 | 32 | 96 |
Every row lists the same supported databases: MySQL Server, Percona Server, MariaDB Server and PostgreSQL. Three qualifiers come with the table and belong next to any number you quote from it: the figures are examples to start with, each installation is different and should be benchmarked in staging before production, and the actual configuration depends heavily on the number of active items and their refresh rates. For large installations the page strongly recommends running the database on a separate server.
The server itself runs only on Unix-like systems; Windows is supported for agents, not for the server. Plan on a Linux install.
Disk: retention decides it
Configuration data is small and fixed, normally 10 MB or less. Growth comes from history, trends and events, and the documentation gives a formula for each. Its worked example: 3,000 items polled every 60 seconds is 50 new values per second; kept for 30 days that is about 130 million values, and at roughly 90 bytes per numeric value about 10.9 GB.
- History: days × (items ÷ refresh rate) × 86,400 × bytes per value. Numeric values are normally around 90 bytes; text and log values around 500.
- Trends: one min/max/avg/count row per item per hour. The docs put 3,000 items at about 2.2 GB a year, 11 GB for five years.
- Events: about 250 bytes each, plus 80 for its recovery record and about 100 per tag. The docs' worst case of one event per second kept for three years is roughly 30 GB before tags.
Those byte counts are based on MySQL and may differ on other engines. The database stops growing once the housekeeper starts deleting at the retention you set, so size for the steady state, not for day one. Random writes are the constant cost here, which is why the database belongs on NVMe dedicated servers rather than on spinning disks once you are past the small row.
Which machine for which row
Memory is the figure to fix first. Zabbix's requirements page notes that the more physical memory you have, the faster the database, and therefore Zabbix, works. Each Zabbix daemon process also holds several database connections, and what each costs depends on the database configuration. Matching the table to the lines on the dedicated server range:
| Table row | Class on the range | Why |
|---|---|---|
| Small | A 4-core Xeon E3 cartridge with NVMe, 16 GB or more | Clears 2 cores / 8 GiB with room for the database cache |
| Medium | The 16-core Xeon D-1587 cartridge, 32-64 GB, 1.92 TB NVMe | Cores and memory past the 4 / 16 row, and room for long history |
| Large | A dual-socket Xeon E5 v3 or Xeon Gold 6130, 64 GB or more | Meets 16 cores / 64 GiB in one chassis, with an out-of-band console |
| Very large | Two dual-socket machines: Zabbix server on one, database on the other | The docs recommend a separate database server at this scale |
These pairings are our reading of the table, not Zabbix's. The machine is whole: every core, all of the memory and the disks serve Zabbix and its database, with root and no other tenant. Racked machines are handed over in about 30 minutes once payment is approved, and built-to-order lines take 4 to 24 hours.
Installing Zabbix 7.4 on PostgreSQL
Use the Zabbix Official Repository, not the distribution's own Zabbix packages, which the docs say are unsupported and may be outdated. The commands below are the ones the Zabbix download page generates for Ubuntu 24.04 with PostgreSQL and Nginx, run as root. PostgreSQL 13 to 18 is supported; apt install postgresql gives you the version Ubuntu ships.
- Install PostgreSQL and make sure it is running.
- Add the Zabbix repository and install the server, frontend and agent packages (first block below).
- Create the
zabbixdatabase role and database, then import the schema (second block).createuserprompts for the password you choose. - Put that password in
DBPassword=in/etc/zabbix/zabbix_server.conf. - Set
listenandserver_namein/etc/zabbix/nginx.conf(third block), thensystemctl restart zabbix-server zabbix-agent nginx php8.3-fpmandsystemctl enablethe same four services.
wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.4+ubuntu24.04_all.deb
apt update
apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
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
The download page also lists 7.0 LTS. If you want the long-term support branch, copy the 7.0 commands from that page rather than editing the ones above: the repository path differs as well as the version. The requirements page adds one PostgreSQL note: larger installations may need work_mem raised from its 4 MB default. Our PostgreSQL dedicated server page covers memory and WAL settings for the database side.
Before the web UI is public
Until its setup wizard has been completed, the frontend opens on that wizard, so we assume anyone who can reach the URL could run it. Once it finishes, the documented default login is Admin with the password zabbix, a superuser. Zabbix strongly recommends changing that password right after the first login. Do both from a private connection: bind Nginx to loopback, tunnel to it over SSH, complete the wizard, change the Admin password, and only then open it to the network behind HTTPS.
# /etc/zabbix/nginx.conf - loopback only until Admin's password is changed
listen 127.0.0.1:8080;
server_name zabbix.example.com;
# from your workstation, then browse http://localhost:8080
ssh -L 8080:127.0.0.1:8080 you@your-server # your own SSH login
# our suggestion for the file holding DBPassword
chown root:zabbix /etc/zabbix/zabbix_server.conf
chmod 640 /etc/zabbix/zabbix_server.conf
With only listen 127.0.0.1:8080; nginx serves Zabbix on no IPv6 address. Do not add a listen [::]: line until Admin's password is changed.
- The database password is in
zabbix_server.conf. Our suggestion, in the box above: owner root, group zabbix, mode 640. The server, running as zabbix, still reads the file; other users cannot. It does not keep out an agent that also runs as zabbix, which is why the next point matters. - The agent shares the zabbix user by default. Zabbix's access-control guide says to run an agent on the server host under its own user so it cannot read the server's database credentials.
- Ports. The server's trapper listens on TCP 10051 for active agents, proxies, zabbix_sender and the frontend: allow it only from those hosts. Each monitored host's agent listens on TCP 10050 for passive checks: allow it only from the Zabbix server or proxy that polls it, and list that address in the agent's
Server=parameter. Write every firewall rule for IPv6 as well as IPv4. Zabbix says not to expose these ports directly to the internet. - Global scripts are off on a new 7.x install (
EnableGlobalScripts=0in zabbix_server.conf). Leave them off unless you need them. - Clock. Zabbix calls precise system time very important on the server; keep NTP running on it and on every agent.
Keeping it running
- Back up the database and
/etc/zabbix. On PostgreSQL that meanspg_dumpof the zabbix database on a schedule, copied off the machine. - Watch the watcher. Zabbix cannot alert about its own outage. Put a small external check on the frontend URL from somewhere else, for instance an Uptime Kuma instance on a separate box.
- Place it apart from what it monitors. A Zabbix server in the same rack as its targets goes dark with them. Five cities are on the data center locations page, all on AS19624.
- Upgrades come through the same repository with
apt; read the upgrade notes for the target version before you run it.
On a racked single-, dual- or quad-socket server the out-of-band console (HPE iLO, Dell iDRAC or a Supermicro BMC) still answers when a firewall rule locks SSH out, so a bad change to the box that does your alerting is recoverable without a ticket. Of the cartridges, only the m510 and m710x carry a console; the others have power control only.
When a dedicated server is the wrong call
Below the small row, a few dozen hosts with default templates, a whole machine is more than Zabbix needs, and a small virtual machine or one cartridge does the job. At the other end, a million-metric estate is two machines minimum, since Zabbix recommends a separate database server at large sizes, and usually proxies near the monitored sites as well. And if nobody on the team will patch PostgreSQL and read the Zabbix upgrade notes, the server will drift: root on a whole machine means the software is yours to keep current.
Questions
How much RAM does a Zabbix server need?
The official examples give 8 GiB for about 1,000 monitored metrics, 16 GiB for 10,000, 64 GiB for 100,000 and 96 GiB for a million. They are starting points, and Zabbix says to benchmark in staging. Zabbix's requirements page notes that the more physical memory you have, the faster the database, and therefore Zabbix, works.
Is PostgreSQL or MySQL better for Zabbix?
Both are supported for the server: MySQL or Percona 8.0.30 to 9.7, MariaDB 10.5 to 12.3, and PostgreSQL 13 to 18, with InnoDB required on the MySQL family. The sizing table treats them the same. Choose the engine your team already operates and backs up well; PostgreSQL can also run the TimescaleDB extension, which Zabbix supports.
Which ports does Zabbix use?
The server listens on TCP 10051 for active agents, proxies, zabbix_sender and the frontend. Agents listen on TCP 10050 for passive checks from the server or a proxy. The frontend is HTTP or HTTPS on 80 or 443. Open each one only to the hosts that connect to it.
What is the default Zabbix login?
User Admin, password zabbix, with superuser rights. Change it immediately after the first login, and do that before the frontend is reachable from the internet, for example over an SSH tunnel to a loopback-bound web server.
Can the database run on the same machine as the Zabbix server?
Yes. The requirements page recommends a separate database server only for large installations, and the package instructions work either way. At that size, on this range, it means a second dedicated machine.
How fast can the server be running?
A racked machine is handed over in about 30 minutes once payment is approved; a built-to-order line takes 4 to 24 hours. After that, the package install takes a handful of commands.