Skip to main contentSkip to navigation
[email protected]
Client AreaSupport
Hosting Mammoth
HostingMammothYour Data, Our Responsibility
Home
Solutions
Hosting Services
Store
Pricing
About
Blog
API
Contact

Stay Ahead of the Curve

Get the latest insights on cybersecurity, AI innovations, and enterprise data solutions delivered to your inbox.

Hosting Mammoth
HostingMammothEnterprise Solutions

Enterprise-grade data solutions. Hosting, recovery, cybersecurity, and AI-powered services for businesses worldwide.

[email protected]
Sun - Fri, 9:00am - 5:00pm

Services

  • Cloud Hosting
  • Data Recovery
  • Cybersecurity
  • Legal Support
  • MSP Services
  • Web Development
  • AI Services
  • Free Server Migration

Hosting

  • VPS Hosting (NVMe SSD)
  • VDS Hosting (NVMe)
  • Storage VPS (High SSD)
  • GPU Servers
  • Managed Services
  • Cloud Firewall
  • Load Balancer
  • One-Click Apps
  • n8n Hosting
  • Object Storage
  • FAQ

Company

  • Store
  • Pricing
  • About Us
  • Locations
  • Blog
  • Testimonials
  • Contact
  • Affiliate Program
  • White-Label
  • Terms of Service
  • Privacy Policy
  • Browser Cookies
  • SLA

Support

  • Client Area
  • Submit Ticket
  • Knowledge Base
  • Server Status
  • API Documentation

© 2026 Hosting Mammoth. All rights reserved.

Knowledge Base
Getting StartedAccount ManagementVPS HostingGPU ServersStorage VPSCloud FirewallLoad BalancerServer ManagementBilling & PaymentsSupport & TicketsAffiliate ProgramReseller ProgramMarketplace & Appsn8n HostingManaged ServicesServer MigrationAPI & DevelopersSecurityTroubleshootingGlossaryInstall Guides
  1. Home
  2. /
  3. Support
  4. /
  5. Install Guides
  6. /
  7. How To Install Zabbix Ubuntu
GUIDEInstall Guides

How to Install Zabbix on Ubuntu 24.04 — Complete Monitoring Stack Guide

27 min read

How to Install Zabbix on Ubuntu 24.04 — Complete Monitoring Stack Guide

Infrastructure monitoring is no longer optional. If you are running production servers, web apps, databases, or network gear, you need a unified view of health, performance, and availability — and you need alerts the moment something drifts from normal. This tutorial walks you through installing Zabbix 7.0 LTS on Ubuntu 24.04, from a fresh VPS to a hardened, TLS-secured monitoring server complete with agents, auto-registration, Grafana dashboards, and Slack/email notifications.

Zabbix is the most widely deployed open-source enterprise monitoring platform in the world. Unlike SaaS tools that charge per host or per metric, a self-hosted Zabbix instance on a single VPS can comfortably monitor hundreds of hosts and tens of thousands of metrics — for the flat cost of the server itself.

Skip the manual work? CloudCore VPS plans give you the headroom Zabbix needs to collect, store, and graph metrics at scale. Launch a Professional VPS and follow this guide end to end in under an hour.

Table of Contents

  • What is Zabbix?
  • Why Self-Host Zabbix vs Datadog or New Relic?
  • Prerequisites
  • Step 1: Update System Packages
  • Step 2: Install MariaDB
  • Step 3: Add the Zabbix 7.0 LTS Repository
  • Step 4: Install Zabbix Server, Frontend, and Agent
  • Step 5: Create Database and Import Schema
  • Step 6: Configure Zabbix Server
  • Step 7: Configure PHP and Nginx
  • Step 8: Start Services and Complete the Web Installer
  • Step 9: First Login and Initial Hardening
  • Step 10: Install and Register zabbix-agent2 on Client Hosts
  • Step 11: Auto-Registration and Discovery Rules
  • Step 12: Triggers, Actions, and Notifications
  • Step 13: Connect Grafana with the Zabbix Plugin
  • Step 14: Secure the Frontend with Let's Encrypt TLS
  • Performance Tuning
  • Troubleshooting
  • FAQ
  • Next Steps
  • What is Zabbix?

    Zabbix is an open-source, enterprise-grade monitoring platform that collects metrics, logs, and events from servers, network devices, applications, databases, containers, and cloud services. Originally released in 2001, it is now maintained by Zabbix LLC under the GPLv2 licence and has a massive global community of sysadmins, MSPs, and enterprise IT teams.

    At its core, Zabbix is composed of four parts: a server that collects and processes data, a database (MySQL/MariaDB, PostgreSQL, or TimescaleDB) that stores metrics and configuration, a web frontend that provides dashboards and admin UI, and agents that run on monitored hosts to collect system-level data. Optional proxies let you scale collection across datacenters or monitor hosts behind firewalls.

    Zabbix supports an unusually wide range of monitoring techniques out of the box: native agents for Linux, Windows, macOS, FreeBSD, AIX, and Solaris; agentless collection via SNMP v1/v2c/v3, IPMI, JMX, ODBC, SSH, and Telnet; HTTP/HTTPS web scenario checks; synthetic transaction monitoring; log file parsing; and over 300 pre-built integration templates covering everything from PostgreSQL and Redis to Cisco routers, VMware ESXi, AWS CloudWatch, and Kubernetes. The built-in auto-discovery engine can scan IP ranges, detect new hosts automatically, and apply monitoring templates without manual intervention.

    The platform scales from a single-server install monitoring a dozen hosts to large clustered deployments tracking tens of thousands of hosts and millions of metrics per minute. Version 7.0, released in 2024, is the current long-term support (LTS) release with support through 2029, and it introduces proxy load balancing, a redesigned dashboard engine, and a substantially faster history syncer.

    Why Self-Host Zabbix vs Datadog or New Relic?

    Commercial observability platforms are excellent products — but they are priced for budgets that most small teams, MSPs, and individual operators do not have. Before you sign a six-figure annual contract, it is worth understanding what self-hosted Zabbix gives you in exchange for a few hours of setup time.

    • Flat, predictable cost — A Professional VPS at EUR 19.99/month can monitor 200+ hosts. Datadog charges per host, per container, per custom metric, per log line ingested, per APM trace, and per synthetic check. Real-world bills routinely land between USD 15–40 per host per month once all modules are enabled.
    • No metric or host caps — Zabbix does not count your interfaces, containers, or custom items. Collect every metric your agents can produce without a line item appearing on next month's invoice.
    • Full data ownership — Every data point stays on your server. For GDPR, HIPAA, SOC 2, or ISO 27001 audits, this simplifies compliance dramatically compared to shipping production telemetry to a US-based SaaS vendor.
    • No retention cliffs — SaaS platforms charge extra for anything beyond 15–30 days of raw metric history. Zabbix keeps history and trends for as long as your disk allows, with configurable per-item housekeeping and built-in trend aggregation.
    • Custom everything — Write your own UserParameters, external scripts, webhooks, and trigger expressions. Extend the system with custom modules. No vendor gatekeeping on what you are allowed to monitor or alert on.
    • Offline and air-gapped support — Zabbix works without any outbound internet connection. Critical for regulated environments and on-premises industrial monitoring.

    Cost Comparison: Zabbix vs SaaS Observability

    Scenario (50 hosts, standard metrics + logs)DatadogNew RelicSelf-Hosted Zabbix
    Monthly cost~USD 1,500–2,500~USD 1,200–2,000EUR 19.99 (VPS only)
    Per-host pricingYes (tiered)Yes (tiered)No
    Custom metrics surchargeYesYesNo
    Log retention 30 daysIncluded (capped)Included (capped)Unlimited (disk-bound)
    Data leaves your infrastructure?YesYesNo
    Alerting channelsEmail, Slack, PagerDutyEmail, Slack, PagerDutyAny (webhook-extensible)
    Annual cost at this scale~USD 24,000+~USD 18,000+EUR 240
    For teams running 20 or more hosts, self-hosting Zabbix pays for itself in the first week.

    Prerequisites

    Before you begin, make sure you have:

    • A VPS running Ubuntu 24.04 LTS with root or sudo access
    • SSH access to the server
    • A fully qualified domain name pointing to the server (required for Let's Encrypt TLS)
    • At least 4 GB of RAM (8 GB+ recommended for > 50 monitored hosts)
    • At least 40 GB of disk space (metric history grows quickly — plan for 80 GB+ in production)
    • Ports 80, 443, and 10051/tcp open (agent connections use 10051 outbound from agents to server)
    Recommended Plan: CloudCore Professional
    >
    Zabbix is CPU-light but RAM-hungry and disk-I/O-sensitive once you cross a few dozen hosts. For a production monitoring server, we recommend the CloudCore Professional plan:
    >
    - 6 vCPU cores
    - 12 GB RAM
    - 100 GB NVMe SSD
    - Unmetered bandwidth
    - EUR 19.99/month
    >
    This comfortably handles 150–200 hosts with full history retention, the Nginx frontend, MariaDB, and a co-located Grafana instance on the same box.

    Connect to your server via SSH to start:

    bash
    ssh root@your-server-ip

    Step 1: Update System Packages

    Bring the system up to date before installing anything.

    bash
    sudo apt update && sudo apt upgrade -y

    Install a few utilities that the rest of this guide depends on:

    bash
    sudo apt install -y curl wget gnupg2 ca-certificates lsb-release software-properties-common ufw

    If the kernel was upgraded, reboot:

    bash
    sudo reboot

    Reconnect after a minute.

    Step 2: Install MariaDB

    Zabbix 7.0 supports MySQL 8.0+ and MariaDB 10.5+. MariaDB is the lighter, faster option for most single-server deployments, and it is what we will use here.

    bash
    sudo apt install -y mariadb-server mariadb-client

    Enable and start the service:

    bash
    sudo systemctl enable --now mariadb

    Run the interactive hardening script and accept the safe defaults (set a root password, remove anonymous users, disable remote root, drop the test database):

    bash
    sudo mysql_secure_installation

    Verify it is running:

    bash
    sudo systemctl status mariadb --no-pager

    Expected output:

    text
    ● mariadb.service - MariaDB 10.11.x database server
         Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
         Active: active (running) since Thu 2026-04-16 10:00:00 UTC; 30s ago

    Step 3: Add the Zabbix 7.0 LTS Repository

    Zabbix ships an official Ubuntu 24.04 repository package that configures APT sources and GPG keys in one step.

    bash
    wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu24.04_all.deb
    sudo dpkg -i zabbix-release_7.0-2+ubuntu24.04_all.deb
    sudo apt update

    Expected output (abbreviated):

    text
    Get:1 https://repo.zabbix.com/zabbix/7.0/ubuntu noble InRelease [7,502 B]
    Get:2 https://repo.zabbix.com/zabbix/7.0/ubuntu noble/main amd64 Packages [...]
    Reading package lists... Done

    Step 4: Install Zabbix Server, Frontend, and Agent

    Install the four key packages: the server (with MySQL driver), the PHP frontend, the Nginx config package, and the agent to monitor this host itself.

    bash
    sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

    Each package serves a specific role:

    • zabbix-server-mysql — The Zabbix server daemon compiled with MySQL/MariaDB driver support.
    • zabbix-frontend-php — The PHP 8.3 web frontend with all dashboards and admin UI.
    • zabbix-nginx-conf — Pre-built Nginx server block for the frontend.
    • zabbix-sql-scripts — The SQL schema and initial data dumps used to seed the database.
    • zabbix-agent2 — The modern Go-based agent that replaces the legacy C agent with better plugin support.

    Step 5: Create Database and Import Schema

    Log in to MariaDB as root:

    bash
    sudo mysql -uroot -p

    Create the Zabbix database, a dedicated user, and grant privileges. Use a strong password of your own:

    sql
    CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
    CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ChangeThisStrongPassword123!';
    GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
    SET GLOBAL log_bin_trust_function_creators = 1;
    FLUSH PRIVILEGES;
    EXIT;

    The log_bin_trust_function_creators = 1 flag is required so that the schema import can define stored functions. We will disable it again after the import.

    Import the Zabbix schema and initial data. The SQL dump is shipped compressed — pipe it directly through zcat:

    bash
    sudo zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | sudo mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

    Enter the zabbix user password you just created. The import takes 30–90 seconds depending on disk speed.

    Disable the log_bin flag now that the import is done:

    bash
    sudo mysql -uroot -p -e "SET GLOBAL log_bin_trust_function_creators = 0;"

    Step 6: Configure Zabbix Server

    Tell the Zabbix server daemon how to reach the database. Edit /etc/zabbix/zabbix_server.conf:

    bash
    sudo nano /etc/zabbix/zabbix_server.conf

    Find and set these lines (uncomment if needed):

    text
    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=ChangeThisStrongPassword123!
    CacheSize=256M
    HistoryCacheSize=128M
    TrendCacheSize=32M
    ValueCacheSize=128M
    StartPollers=10
    StartTrappers=5
    StartPingers=5
    LogFileSize=10

    Save and exit. These defaults comfortably handle 100+ hosts on a 12 GB RAM server — tune them upward as your deployment grows (see Performance Tuning).

    Step 7: Configure PHP and Nginx

    The zabbix-nginx-conf package installs a server block at /etc/zabbix/nginx.conf. Edit it to set the listen port, server name, and PHP timezone.

    bash
    sudo nano /etc/zabbix/nginx.conf

    Uncomment and set:

    nginx
    listen          80;
    server_name     zabbix.yourdomain.com;

    Next, set the PHP timezone in /etc/zabbix/php-fpm.conf:

    bash
    sudo nano /etc/zabbix/php-fpm.conf

    Uncomment and set the timezone to match your region (full list: php.net/timezones):

    text
    php_value[date.timezone] = Europe/Berlin

    The default Nginx config on Ubuntu 24.04 ships an enabled default server block on port 80 that will conflict with Zabbix. Remove it:

    bash
    sudo rm -f /etc/nginx/sites-enabled/default

    Test the Nginx config:

    bash
    sudo nginx -t

    Expected output:

    text
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    Step 8: Start Services and Complete the Web Installer

    Enable and start all four daemons:

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

    Confirm the Zabbix server is running:

    bash
    sudo systemctl status zabbix-server --no-pager

    Expected output:

    text
    ● zabbix-server.service - Zabbix Server
         Loaded: loaded (/lib/systemd/system/zabbix-server.service; enabled; preset: enabled)
         Active: active (running) since Thu 2026-04-16 10:15:00 UTC; 5s ago

    Open your browser to http://zabbix.yourdomain.com/ (or your server IP if DNS is not yet propagated). You should see the Zabbix welcome wizard.

    Click through the installer:

  • Welcome — Choose your language.
  • Prerequisites check — All rows should be green. If PHP memory_limit or post_max_size shows red, edit /etc/zabbix/php-fpm.conf and bump them to 256M and 32M respectively.
  • Database connection — Database type: MySQL, Database host: localhost, Database port: 0, Database name: zabbix, User: zabbix, Password: (your password), Database TLS encryption: no.
  • Settings — Zabbix server name: something memorable like prod-monitor. Choose your default timezone and theme.
  • Pre-install summary — Click Next.
  • Install — The installer writes /etc/zabbix/web/zabbix.conf.php and completes.
  • Step 9: First Login and Initial Hardening

    Log in with the default credentials:

    • Username: Admin
    • Password: zabbix
    Immediately create a new admin user and disable the default. In the UI: Users > Users > Create user. Set role Super admin, assign to group Zabbix administrators, and give it a strong password. Log out, log back in as the new user, then go back to Users > Users, click on the original Admin, and set Enabled: No.

    While you are in the admin area, also:

    • Set a global URL under Administration > General > GUI: https://zabbix.yourdomain.com (we will add TLS in Step 14).
    • Configure SMTP under Alerts > Media types > Email — fill in your SMTP host, port, credentials, and a From address.

    Step 10: Install and Register zabbix-agent2 on Client Hosts

    On each host you want to monitor, install the agent. Add the Zabbix repo just like you did on the server (Step 3), then install the agent:

    bash
    sudo apt install -y zabbix-agent2

    Edit /etc/zabbix/zabbix_agent2.conf:

    bash
    sudo nano /etc/zabbix/zabbix_agent2.conf

    Set:

    text
    Server=1.2.3.4              # IP of your Zabbix server
    ServerActive=1.2.3.4        # Same IP, for active checks
    Hostname=web01.example.com  # Unique hostname for this monitored host
    HostMetadata=linux-webserver

    Restart and enable:

    bash
    sudo systemctl restart zabbix-agent2
    sudo systemctl enable zabbix-agent2

    Back in the Zabbix UI, go to Data collection > Hosts > Create host, enter the hostname exactly as in the agent config, add the Linux servers by Zabbix agent template, and save. Within 60 seconds the dashboard should show green for agent availability.

    Step 11: Auto-Registration and Discovery Rules

    Registering dozens or hundreds of hosts by hand is not scalable. Zabbix has two complementary mechanisms for this: active-agent auto-registration (agent calls home, server creates the host) and network discovery (server scans an IP range and creates hosts for responders).

    Active Agent Auto-Registration

    In the UI, go to Alerts > Actions > Autoregistration actions > Create action.

    • Name: Auto-register Linux hosts
    • Conditions: Host metadata contains linux-webserver
    • Operations:
    - Add host - Add to host groups: Linux servers - Link to templates: Linux by Zabbix agent

    Now any new host you install with HostMetadata=linux-webserver in its agent config will auto-register, be added to the right group, and inherit the right template the first time it phones home. No manual UI clicks needed.

    Network Discovery

    For agentless devices (switches, printers, IPMI), use Data collection > Discovery > Create discovery rule:

    • Name: Office LAN sweep
    • IP range: 192.168.1.1-254
    • Checks: ICMP ping, SNMPv2 agent sysName {.1.3.6.1.2.1.1.5.0}
    • Update interval: 1h
    Pair this with a discovery action (Alerts > Actions > Discovery actions) that auto-adds responders to a host group and applies the Generic SNMP template.

    Step 12: Triggers, Actions, and Notifications

    Zabbix separates what is wrong (triggers) from what to do about it (actions).

    Triggers

    Triggers are boolean expressions over collected items. Most come pre-built in templates, but creating custom ones is straightforward. To alert when a host's 5-minute load average exceeds 4 on a 4-core box, go to Configuration > Hosts > [your host] > Triggers > Create trigger:

    • Name: High CPU load on {HOST.NAME}
    • Severity: High
    • Expression: last(/web01/system.cpu.load[percpu,avg5]) > 1.0

    Actions

    Actions wire triggers to media types. Go to Alerts > Actions > Trigger actions > Create action:

    • Name: Notify ops on any high+ severity
    • Conditions: Trigger severity is greater than or equals High
    • Operations: Send message to user group: Ops Team via Email and Slack
    • Recovery operations: Send recovery message

    Slack Notifications

    Zabbix 7.0 ships a built-in Slack webhook media type. Go to Alerts > Media types > Slack > Update, paste a Slack incoming webhook URL (create one at api.slack.com/apps), and assign the media type to users via Users > Users > [your user] > Media.

    Within seconds of saving, any high-severity trigger fires a rich Slack message with the host name, trigger, severity, and a direct link back to the Zabbix UI.

    Email Notifications

    Under Alerts > Media types > Email, set your SMTP server, credentials, and a From address. Assign this media type to users the same way you did for Slack. For Gmail/Google Workspace, use an app password — not your account password — and smtp.gmail.com:587 with TLS.

    Step 13: Connect Grafana with the Zabbix Plugin

    Zabbix has a solid built-in UI, but many teams prefer Grafana for polished dashboards and cross-datasource correlation. The Alexander Zobnin Zabbix plugin turns Grafana into a first-class Zabbix frontend.

    If you do not yet have Grafana installed, follow our companion guide: how-to-install-grafana-ubuntu. Then install the Zabbix plugin:

    bash
    sudo grafana-cli plugins install alexanderzobnin-zabbix-app
    sudo systemctl restart grafana-server

    In Grafana, go to Connections > Add new connection > Zabbix > Enable, then Add data source:

    • URL: https://zabbix.yourdomain.com/api_jsonrpc.php
    • Username: a dedicated read-only Zabbix user (create one in the Zabbix UI with role User)
    • Password: the user's password
    • Trends: Enabled
    Click Save & test. On success, import one of the community dashboards — Zabbix Server Dashboard (ID 1451) and Linux Servers with Zabbix agent (ID 10047) are excellent starting points.

    Step 14: Secure the Frontend with Let's Encrypt TLS

    Running Zabbix over plain HTTP is fine for an internal network but unacceptable on the public internet. Certbot can provision and auto-renew a free TLS certificate from Let's Encrypt.

    Install Certbot:

    bash
    sudo apt install -y certbot python3-certbot-nginx

    Make sure your firewall allows HTTP and HTTPS:

    bash
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 10051/tcp
    sudo ufw enable

    Run Certbot against the Zabbix Nginx config:

    bash
    sudo certbot --nginx -d zabbix.yourdomain.com

    When prompted, enter your email, accept the ToS, and choose option 2 (Redirect) so that plain HTTP requests are automatically upgraded to HTTPS. Certbot rewrites the Nginx config in place, reloads the service, and registers a systemd timer that renews the cert automatically every 60 days.

    Verify:

    bash
    sudo certbot renew --dry-run

    Expected output:

    text
    Congratulations, all simulated renewals succeeded.

    Visit https://zabbix.yourdomain.com/ — the padlock should be green, and the TLS grade on ssllabs.com/ssltest should come back as A or A+ on the default Certbot config.

    Performance Tuning

    Once you cross 50 monitored hosts or 100,000 items, a few tweaks pay big dividends.

    MariaDB

    Edit /etc/mysql/mariadb.conf.d/50-server.cnf and set:

    text
    innodb_buffer_pool_size = 4G
    innodb_log_file_size = 512M
    innodb_flush_log_at_trx_commit = 2
    innodb_flush_method = O_DIRECT
    innodb_file_per_table = 1
    max_connections = 200

    Restart MariaDB:

    bash
    sudo systemctl restart mariadb

    The single biggest win is making innodb_buffer_pool_size roughly 50% of your server RAM — Zabbix's workload is extremely read-heavy on recent rows.

    Zabbix Server

    In /etc/zabbix/zabbix_server.conf, scale these based on host count:

    Parameter50 hosts200 hosts500 hosts
    StartPollers102050
    StartPollersUnreachable1510
    StartTrappers51020
    StartPingers51020
    CacheSize256M1G4G
    HistoryCacheSize128M512M2G
    ValueCacheSize128M512M2G
    Restart after changing:

    bash
    sudo systemctl restart zabbix-server

    Housekeeping

    The built-in housekeeper deletes old history rows. For servers with more than a million items, switch to partitioning via TimescaleDB (PostgreSQL) or enable HousekeepingFrequency=24 and MaxHousekeeperDelete=20000 in the server config to spread the work overnight.

    Troubleshooting

    ProblemCauseSolution
    Frontend shows "Zabbix server is not running"Server daemon down or wrong port in zabbix.conf.phpsudo systemctl status zabbix-server; check /var/log/zabbix/zabbix_server.log; verify ZBX_SERVER_PORT=10051 in /etc/zabbix/web/zabbix.conf.php
    Database error: Access denied for user 'zabbix'@'localhost'Wrong password in zabbix_server.conf or zabbix.conf.phpRe-set the MariaDB password and update both config files; restart zabbix-server and nginx
    Hosts show red agent statusFirewall blocking port 10050 (passive) or 10051 (active)On the agent host: sudo ufw allow from ZABBIX_SERVER_IP to any port 10050. On the server: allow 10051 inbound
    Web installer says "required PHP extension missing"PHP extensions not installed or wrong PHP version activesudo apt install -y php8.3-{mbstring,gd,xml,bcmath,ldap,mysql,gettext}; restart php8.3-fpm
    Schema import hangs or errors outlog_bin_trust_function_creators not setsudo mysql -uroot -p -e "SET GLOBAL log_bin_trust_function_creators = 1;" before re-running the import
    High memory usage, OOM killsBuffer pool too large, or too many pollers for RAMDrop innodb_buffer_pool_size and CacheSize; monitor via ps aux --sort=-%mem
    Slack alerts not firingWebhook URL wrong, user has no media assigned, or action condition never matchesCheck /var/log/zabbix/zabbix_server.log for action-execution lines; test webhook manually with curl

    Viewing Logs

    The two most useful log files:

    bash
    sudo tail -f /var/log/zabbix/zabbix_server.log
    sudo tail -f /var/log/nginx/error.log

    FAQ

    Is Zabbix free for commercial use?

    Yes. Zabbix is released under the GPLv2 licence, which permits commercial use, modification, and redistribution with no per-host fees. Zabbix LLC sells optional paid support, training, and certified templates, but none of these are required to run a fully featured production deployment. The 7.0 LTS release is supported through 2029 with free security and bugfix updates from the official repositories.

    How does Zabbix compare to Prometheus?

    Zabbix and Prometheus solve overlapping problems with different philosophies. Prometheus is pull-based (scrapes metrics endpoints on a schedule), excels at ephemeral cloud-native workloads (Kubernetes, containers), uses PromQL as a query language, and pairs with Alertmanager for routing. Zabbix is push- and pull-capable, ships with a rich web UI out of the box, stores configuration and history in a relational database, and covers use cases Prometheus does not (agentless SNMP, IPMI, log file parsing, synthetic web monitoring). Many teams run both: Prometheus for containers and microservices, Zabbix for VMs, network gear, and business-level checks.

    Can Zabbix monitor logs like Graylog or Loki?

    Zabbix has native log-file item types that tail files on agent hosts and trigger alerts on regex matches — excellent for targeted monitoring of a handful of log patterns. For full-text search, aggregation, and retention of millions of log events, pair Zabbix with a dedicated log platform like Graylog. The two tools complement each other: Zabbix handles metrics and availability, Graylog handles log search and audit trails.

    How many hosts can a single Zabbix server handle?

    On the CloudCore Professional plan (6 vCPU, 12 GB RAM, 100 GB NVMe), a well-tuned Zabbix 7.0 server comfortably monitors 150–200 hosts with full history retention for 90 days. The practical ceiling on a single server is roughly 1,000 hosts and 500 new values per second, after which you should introduce Zabbix proxies to distribute collection, or move the database to TimescaleDB for better long-term scalability.

    Does Zabbix replace a SIEM like Wazuh?

    No — the tools overlap only slightly. Zabbix tracks infrastructure health (CPU, disk, services, network latency) and triggers on thresholds. Wazuh is a SIEM/XDR that focuses on security events: file integrity monitoring, rootkit detection, authentication log analysis, compliance reporting, and threat intelligence feeds. For a complete stack, run Zabbix for operational monitoring and Wazuh for security monitoring — they coexist happily on the same hosts with different agents.

    How do I back up Zabbix configuration and data?

    Two things need backing up: the MariaDB database (which contains both configuration and historical metrics) and the /etc/zabbix/ directory (config files and custom scripts). A simple nightly cron job does the trick:

    bash
    mysqldump --single-transaction -uzabbix -p'password' zabbix | gzip > /backups/zabbix-$(date +%F).sql.gz
    tar czf /backups/zabbix-conf-$(date +%F).tar.gz /etc/zabbix/

    Ship the resulting files off-server (to S3, Backblaze B2, or another VPS) and you have a recoverable deployment.

    Can I upgrade from Zabbix 6.0 LTS to 7.0 LTS in place?

    Yes. Stop the server, update the zabbix-release package to the 7.0 variant, run apt update && apt upgrade, and restart the server. The daemon detects the old schema on first start and runs in-place migrations automatically (this can take a few minutes on larger databases). Always take a full database dump before upgrading, and read the official 7.0 upgrade notes for version-specific caveats.

    Next Steps

    Your Zabbix server is now live, secured, and collecting metrics. Recommended follow-ups:

    • Install Grafana for richer dashboards — Follow our Grafana install guide and connect it to Zabbix via the plugin installed in Step 13.
    • Add Prometheus for container metrics — If you are running Docker or Kubernetes, deploy Prometheus alongside Zabbix and use node-exporter + cadvisor for per-container visibility.
    • Centralize logs with Graylog — Pipe all your systemd, Nginx, and application logs into Graylog for unified search, alerting, and retention.
    • Harden with Wazuh SIEM — Install Wazuh agents alongside your Zabbix agents to add security event monitoring, FIM, and compliance reporting.
    • Build a status page — Expose a public-facing status page by scraping Zabbix problems via the api_jsonrpc.php endpoint into a lightweight tool like Cachet or Statusfy.
    • Read the official docs — The Zabbix documentation is extensive and kept current. The template reference and API reference are particularly worth bookmarking.

    Run Zabbix on CloudCore Professional
    >
    Our Professional VPS plan is the sweet spot for self-hosted monitoring: enough RAM for the InnoDB buffer pool, enough NVMe for months of metric history, and enough vCPU to run Zabbix, MariaDB, Nginx, and Grafana side by side.
    >
    - 6 vCPU cores
    - 12 GB RAM
    - 100 GB NVMe SSD
    - Unmetered bandwidth
    - Deploys in under 60 seconds
    >
    Launch Your Monitoring VPS — Plans start at EUR 19.99/month.

    Was this article helpful?

    ← Back to Install GuidesBrowse all categories →

    Still have questions?

    Contact Support →Submit a Ticket