SSD Nodes Learn
Guide Matt ConnorDi Matt Connor · Aggiornato 2026-07-24

Installare Zabbix 7.0 LTS su Ubuntu 24.04

Guida completa per installare Zabbix 7.0 LTS su Ubuntu 24.04. Configura correttamente MySQL, nginx e Zabbix agent2 risolvendo gli errori di importazione schema.

Cosa stai costruendo

Un singolo VPS Ubuntu 24.04 con l'intero stack Zabbix 7.0 LTS: il daemon zabbix-server per il polling e gli alert, un database MariaDB/MySQL per lo storage delle metriche, un frontend PHP servito da nginx e zabbix-agent2 per la raccolta delle metriche dal server stesso. Una volta configurato, punta il sistema verso un secondo server, applica un template e riceverai un'email non appena un disco si riempie o un servizio si interrompe.

Zabbix è più complesso di uno strumento per pagine di stato: è un sistema real-time per serie temporali con template, trigger, escalation e conservazione della cronologia. La maggior parte dei problemi deriva da tre passaggi spesso saltati: l'importazione dello schema del database, l'impostazione della password del database corretta e la decommentazione di due righe nella configurazione di nginx. Se completi correttamente questi passaggi, il resto è semplice. Se desideri solo controlli up/down e una pagina di stato condivisibile, un monitor di stato leggero come Uptime Kuma esegue il compito in un singolo container; Zabbix è la scelta ideale quando servono soglie per ogni singola metrica ed escalation su molti host.

Usa la versione 7.0 LTS: il server, il frontend, l'agent2 e lo schema sono versionati insieme e riceveranno patch di sicurezza per anni. Prima di copiare il nome del repository indicato sotto, consulta la pagina ufficiale di download di Zabbix: il pacchetto di rilascio latest punta sempre all'ultima release 7.0, ma se preferisci bloccare una build 7.0-N specifica, la pagina elenca anche quel nome file. Tutti gli altri comandi sono stabili per l'intera linea 7.0.

Dimensionamento, porte e prerequisiti

Si assume l'utilizzo di un VPS Ubuntu 24.04 KVM appena installato con privilegi root o sudo. Considerare le risorse reali: 2 GB di RAM e due vCPU rappresentano il limite minimo realistico per gestire server, database, nginx e PHP su un'unica macchina che monitora pochi host. Una macchina con 1 GB avvia il sistema ma causa carenza di risorse per il database all'aumentare della cronologia; prevedere 4 GB superati i primi decine di host. Oltre i cento host, spostare il database su un server dedicato. L'occupazione del disco aumenta in base al numero di elementi raccolti e alla durata della cronologia; prevedere alcuni gigabyte iniziali. Il modulo housekeeper rimuove i dati obsoleti in base alle finestre di retention impostate.

Porte: 80 e 443 per il frontend, accessibili pubblicamente o limitate al proprio IP. Il server ascolta sulla porta TCP 10051 per la ricezione dei dati dagli agenti attivi. Ogni agente ascolta sulla porta TCP 10050 per il polling da parte del server. Aprire solo le porte necessarie se è presente un firewall. È consigliabile configurare un record DNS A per il frontend, poiché è necessario un certificato SSL valido. Un server Zabbix monitora tutti gli altri servizi in esecuzione; pertanto, deve far parte di uno stack self-hosting completo per il 2026 e non essere aggiunto come elemento secondario.

Step 1 — Aggiungi il repository ufficiale di Zabbix 7.0

Il pacchetto zabbix-release esegue un'unica operazione: inserisce l'elenco delle sorgenti apt e la chiave di firma nel sistema. Installalo e poi aggiorna l'indice.

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

Se wget restituisce 404 Not Found, il nome del file è cambiato. Apri la pagina di download di Zabbix, seleziona Ubuntu 24.04 e copia l'URL zabbix-release esatto visualizzato. Un apt update pulito mostra una riga repo.zabbix.com e nessun avviso relativo alla chiave; The following signatures couldn't be verified because the public key is not available indica che il pacchetto di rilascio non ha installato la chiave, quindi esegui nuovamente il dpkg -i e aggiorna ancora.

Step 2 — Install the server, frontend, and agent

Installa il server compilato per MySQL, il frontend PHP, la configurazione nginx, i file dello schema SQL e agent2 in un'unica operazione.

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

zabbix-server-mysql è il server compilato per MySQL/MariaDB; per PostgreSQL installare invece zabbix-server-pgsql e regolare i passaggi relativi al database descritti di seguito. zabbix-sql-scripts contiene lo schema da importare successivamente — nella versione 7.0 è un pacchetto separato; la sua assenza causa l'errore di percorso mancante durante l'importazione. Nessuno di questi pacchetti include un motore di database; installare MariaDB se il sistema non ne ha già uno installato.

sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb

Step 3 — Creare il database con il character set corretto

Zabbix richiede una collation specifica: il database deve essere utf8mb4 con utf8mb4_bin. In caso contrario, l'importazione fallisce a metà con errori di foreign-key. Apri una shell root con sudo mysql ed esegui:

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;

La riga SET GLOBAL serve a garantire il successo dell'importazione. Lo schema di Zabbix crea funzioni memorizzate; un account non-SUPER come zabbix non può crearle se il binary logging è attivo. MySQL 8 abilita il binary logging di default; alcune versioni gestite di MariaDB lo abilitano (la versione standard di MariaDB no). Se si salta il flag su un server con binary logging attivo, l'importazione si interrompe con ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Impostarlo come root risolve il problema; disabilitalo nuovamente dopo l'importazione. Segna la password con precisione: la configurazione del server richiede la stessa stringa byte per byte.

Step 4 — Import the schema (il passaggio che spesso viene saltato)

Questa è la causa principale per cui un nuovo frontend non carica: il database creato è vuoto. Carica lo schema incluso in zabbix-sql-scripts nel database.

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

Il comando richiede la password di zabbix, impiega da trenta a sessanta secondi su un VPS di piccole dimensioni e non restituisce output in caso di successo — l'assenza di output è il comportamento corretto. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory indica che il pacchetto zabbix-sql-scripts non è installato (ritorna allo Step 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' indica che la password o i permessi dello Step 3 sono errati. Una volta completata l'operazione, disattiva nuovamente il flag di sicurezza:

sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"

Conferma il caricamento con sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" — un numero, e non un errore doesn't exist, indica che lo schema è stato importato correttamente.

Step 5 — Impostare la password del database in zabbix_server.conf

Il server legge le credenziali del database da /etc/zabbix/zabbix_server.conf. È necessario impostare solo la password — DBName e DBUser sono già impostate su zabbix per impostazione predefinita. Decommentare la riga # DBPassword= e configurarla:

DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password

La password deve essere identica, byte per byte, a quella utilizzata nello Step 3. Una DBPassword vuota o errata è la causa principale dell'errore "Zabbix server is not running" che apparirà in seguito: il daemon si avvia, fallisce il login ed esce. Nessun messaggio a schermo indicherà l'errore; l'informazione è disponibile solo nei log.

Step 6 — Configurare nginx per il frontend

Il pacchetto zabbix-nginx-conf installa un server block in /etc/zabbix/nginx.conf e crea un link in nginx da /etc/nginx/conf.d/zabbix.conf. Tuttavia, le righe listen e server_name sono commentate. Nginx non servirà nulla per Zabbix finché non le modificherai:

server {
    listen          80;
    server_name     zabbix.example.com;
    ...
}

Usa il tuo dominio o l'IP pubblico del server se non hai ancora configurato il DNS. Attenzione a due aspetti. Il sito di benvenuto predefinito di nginx su Ubuntu ascolta sulla porta 80 ed è impostato come server predefinito. Questo sito risponderà a qualsiasi richiesta che non corrisponde al nome configurato; rimuovilo per evitare di caricare la pagina errata: sudo rm -f /etc/nginx/sites-enabled/default. Se /etc/nginx/conf.d/zabbix.conf dovesse mancare (un problema noto del pacchetto), crea il link manualmente con sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Successivamente, esegui il test e ricarica la configurazione:

sudo nginx -t
sudo systemctl reload nginx

nginx -t dovrebbe stampare test is successful. Se stampa invece nginx: [emerg] a duplicate default server for 0.0.0.0:80, sia il sito predefinito che il blocco Zabbix sono associati a default_server; rimuovi il sito predefinito e ripeti il test. Spesso il test risulta positivo con solo un avviso conflicting server name, ma il browser mostra ancora la pagina di benvenuto predefinita: in questo caso il sito predefinito sta rispondendo a un nome non corrispondente; la rimozione del sito predefinito risolve il problema.

Step 7 — Avviare e abilitare i servizi

Avviare il server, l'agent, PHP-FPM e nginx. Abilitare i servizi in modo che vengano avviati automaticamente al riavvio.

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

Ubuntu 24.04 include PHP 8.3, quindi il servizio FPM è php8.3-fpm; il pacchetto zabbix-nginx-conf esegue il frontend sotto lo stesso processo master. Verificare che il server sia avviato e rimanga attivo:

sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log

Un log corretto termina con il server avviato e i processi housekeeper, poller e trapper in esecuzione. Se compare [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', il DBPassword dello Step 5 non è corretto; correggerlo e riavviare. Una riga [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist indica che l'importazione dello schema nello Step 4 è stata saltata; il server non ha quindi dati da leggere.

Step 8 — Completare la configurazione web wizard

Navigare verso http://your-domain-or-ip. Viene aperto il wizard di configurazione di Zabbix. Seguire questi passaggi:

  1. Welcome — selezionare una lingua.
  2. Check of pre-requisites — ogni riga deve riportare OK; il pool /etc/zabbix/php-fpm.conf incluso aumenta già i limiti PHP richiesti da Zabbix.
  3. Configure DB connection — tipo database MySQL, host localhost, port 0 (corrisponde alla porta predefinita o al socket), nome database zabbix, utente zabbix e la password utilizzata nello Step 3. Errori nelle credenziali o assenza dello schema compaiono in questa fase.
  4. Settings — mantenere l'host del server Zabbix localhost, la porta 10051 e assegnare un nome all'installazione.
  5. Pre-installation summary, quindi Install — il wizard scrive il file /etc/zabbix/web/zabbix.conf.php.
  6. Finish — effettuare il login come Admin (A maiuscola) con password zabbix e cambiare immediatamente la password nella sezione Users.

Se il wizard segnala Cannot create the configuration file, l'utente web non può scrivere in /etc/zabbix/web/ — scaricare il file zabbix.conf.php suggerito, posizionarlo manualmente tramite sudo e cliccare su Finish.

Step 9 — Aggiungere l'host locale e associare un template

Zabbix non esegue il monitoraggio automatico di se stesso. Accedere a Data collection → Hosts → Create host, impostare il nome host su zabbix-server, aggiungere l'host al gruppo Linux servers e aggiungere un'interfaccia Agent con IP 127.0.0.1 e porta 10050. Sotto Templates, associare Linux by Zabbix agent (la variante passive-poll; Linux by Zabbix agent active utilizza invece l'agent push). Salvare.

Entro un minuto, la riga dell'host mostrerà l'etichetta verde ZBX e le metriche appariranno sotto Monitoring → Latest data. Un'etichetta ZBX rossa indica che il server non riesce a raggiungere l'agent; questo errore è descritto più avanti e non è dovuto a un errore in questo passaggio.

Step 10 — Un trigger utile e un avviso email

Il template Linux by Zabbix agent include già trigger per CPU elevata, memoria bassa e dischi pieni; riceverai gli avvisi non appena lo collegherai. Per capire come crearne uno, aggiungine uno personalizzato: apri l'host, vai su Triggers → Create trigger, nominalo Root filesystem over 90% full on {HOST.NAME}, imposta la severity su High e usa questa espressione:

last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90

vfs.fs.dependent.size[/,pused] è l'item della percentuale di utilizzo che il filesystem discovery del template crea per il filesystem root (il template Linux di 7.0 raccoglie vfs.fs.get una sola volta e deriva gli item per ogni mount), quindi il trigger viene attivato senza raccolta dati aggiuntiva. Salva le modifiche.

Un trigger cambia solo il colore di una riga sulla dashboard finché un'action non notifica qualcuno. Sotto Alerts → Media types → Email, imposta il server SMTP, la porta, l'indirizzo del mittente, la sicurezza della connessione (solitamente STARTTLS) e le credenziali di relay, quindi usa Test — un errore in questa fase indica che il percorso SMTP è errato prima che qualsiasi avviso reale ne dipenda. Assegna un indirizzo all'utente Admin sotto Users → Users → Admin → Media → Add e seleziona le severity da notificare. Quindi configura l'azione sotto Alerts → Actions → Trigger actions → Create action: aggiungi una condizione come Trigger severity >= Warning e, sotto Operations, invia l'avviso all'Admin via Email. Salva e abilita l'azione. Preferisci la chat? Zabbix 7.0 include media type webhook per Slack, Discord e Telegram — configura uno di questi esattamente come l'Email e assegnalo a un utente.

Monitoraggio di un secondo server con l'agent

Per monitorare un altro server, aggiungere anche il repository Zabbix su tale macchina — Ubuntu 24.04 non include pacchetti Zabbix nativi — quindi installare solo l'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

Modificare /etc/zabbix/zabbix_agent2.conf, impostare Server con l'IP del server Zabbix (per il polling passivo) e, per i controlli attivi, impostare ServerActive insieme a un Hostname univoco che corrisponda all'host creato nel frontend:

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

Eseguire sudo systemctl enable --now zabbix-agent2 e aprire la porta TCP 10050 dal server Zabbix verso questa macchina. Nel frontend, creare un host con l'interfaccia Agent puntata all'IP di questa macchina, associare il template Linux; la reportistica sarà disponibile entro un minuto.

Modalità di errore e stringhe visualizzate

Il frontend mostra Error connecting to database o un errore del database. Nella fase DB della wizard, Access denied for user 'zabbix'@'localhost' (using password: YES) indica che la password non corrisponde allo Step 3 o che GRANT non è stato eseguito. Se il database è raggiungibile ma il frontend riporta The frontend does not match Zabbix database o Table 'zabbix.users' doesn't exist, l'importazione dello schema nello Step 4 è stata saltata o è fallita — eseguire nuovamente l'operazione su un database appena creato.

Banner arancione: Zabbix server is not running: the information displayed may not be current. Il frontend è attivo ma non può raggiungere un server live. Tre cause possibili, la prima è la più probabile. Il servizio è fermo — controllare systemctl status zabbix-server e avviarlo. Il servizio è attivo ma non può raggiungere il database — il log mostra [Z3001] connection to database 'zabbix' failed: [1045] Access denied, il che significa che DBPassword è errata o vuota. Oppure il frontend punta al server errato, salvato come host localhost porta 10051 in /etc/zabbix/web/zabbix.conf.php. Su Ubuntu SELinux non è attivo di default, quindi la causa relativa al socket di SELinux citata nelle guide RHEL non è applicabile; in questo caso si tratta quasi sempre della password del database o di un servizio arrestato.

L'host mostra un'etichetta rossa ZBX; errore elemento Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. L'agent non è in esecuzione o non è in ascolto. Controllare systemctl status zabbix-agent2 e confermare ListenPort=10050. Un timeout invece di "connection refused" indica che un firewall sta scartando la porta 10050. L'errore Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. indica che l'agent è raggiungibile ma la riga Server= non elenca l'IP del server Zabbix — aggiungerlo e riavviare l'agent.

Pagina di benvenuto nginx standard, o 502 Bad Gateway. La pagina di benvenuto indica che il sito di default è ancora abilitato o che il blocco Zabbix non è collegato — rimuovere /etc/nginx/sites-enabled/default e confermare l'esistenza di /etc/nginx/conf.d/zabbix.conf, come descritto nello Step 6. Un errore 502 indica che nginx ha raggiunto PHP ma PHP-FPM è fermo o in ascolto su un socket differente — avviare php8.3-fpm e verificare che il socket fastcgi_pass nel blocco Zabbix corrisponda al pool in esecuzione.

Backups, upgrades, and TLS

Il database contiene l'intera cronologia; effettua il backup con mysqldump seguendo una pianificazione regolare e conserva il dump su un dispositivo esterno:

mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz

I file di configurazione /etc/zabbix sono piccoli e vale la pena salvarli, ma possono essere ricostruiti; i dati no. Il ripristino avviene in ordine inverso: crea il database, importa il dump e configura il puntamento del file di configurazione verso di esso.

Gli upgrade all'interno della serie 7.0 sono normali esecuzioni di apt update && apt upgrade; il server applica le migrazioni dello schema al successivo avvio, quindi aggiorna i pacchetti e riavvia zabbix-server. Il passaggio a una nuova versione major è un'operazione deliberata: leggi le note di aggiornamento, esegui prima il dump del database e considera il cambiamento dello schema come irreversibile. Questo passaggio irreversibile è il motivo per cui si utilizza una versione LTS e la si mantiene.

Non lasciare il frontend in HTTP semplice. Una volta che il DNS punta al server, installa un certificato utilizzando Certbot e Let's Encrypt su nginx per Ubuntu 24.04, che riscrive il server block per ascoltare sulla porta 443 e reindirizzare la 80. Mentre configuri la sicurezza di un server che effettua il login per monitorare tutti gli altri server in esecuzione, proteggi anche l'accesso SSH con fail2ban per bloccare tentativi SSH brute-force. Un login di monitoraggio non deve viaggiare in chiaro e la sua porta di accesso non deve essere esposta a tentativi di cracking delle password.

FAQ

È necessario l'agent di Zabbix o è possibile monitorare senza di esso?

Entrambe le soluzioni sono valide. L'agent (agent2) fornisce metriche dettagliate per ogni host — CPU, memoria, dischi, processi, servizi, file di log — ed è la scelta standard per i server sotto il proprio controllo. Il monitoraggio agentless copre i dispositivi su cui non è possibile installare software: SNMP per switch e stampanti, ICMP ping per la raggiungibilità, controlli HTTP per gli endpoint, IPMI per lo stato dell'hardware. La maggior parte delle implementazioni reali utilizza un mix di entrambi.

Perché il frontend indica che il server Zabbix non è in esecuzione?

Il frontend è attivo ma non riesce a connettersi a un processo zabbix-server attivo. Solitamente il server è stato avviato, ma l'accesso è fallito perché DBPassword in zabbix_server.conf è errato o vuoto, causando l'interruzione immediata. Eseguire systemctl status zabbix-server e controllare /var/log/zabbix/zabbix_server.log; una riga [Z3001] connection to database ... failed conferma il problema. Correggere la password e riavviare; l'errore scomparirà entro un minuto.

Devo usare MySQL o posso usare PostgreSQL?

Entrambi sono pienamente supportati: zabbix-server-mysql con MariaDB o MySQL, come indicato in questa guida, oppure zabbix-server-pgsql con PostgreSQL. Per installazioni di piccole dimensioni la scelta è irrilevante. Per installazioni di grandi dimensioni, PostgreSQL con l'estensione TimescaleDB partiziona le tabelle della cronologia e riduce il carico di manutenzione; per questo motivo i grandi siti lo preferiscono. Scegliere un database e mantenere quello — la migrazione successiva richiede un export e un import completi, non è un semplice cambio di configurazione.

Quanta RAM richiede un server Zabbix all-in-one?

Per un singolo server che monitora pochi host, 2 GB rappresentano il limite minimo realistico e 4 GB sono sufficienti oltre i pochi decine di host; la memoria è utilizzata principalmente per la cache del database e i pollers del server. Un VPS da 1 GB è in grado di funzionare, ma la memoria risulterà insufficiente per il database man mano che la cronologia cresce. Oltre i cento host, è necessario separare il database su un server dedicato e ottimizzare il buffer pool invece di aggiungere RAM alla macchina principale.

Zabbix è eccessivo per monitorare solo un paio di server?

Può esserlo. Se l'unica necessità è verificare se un host è attivo tramite una pagina condivisa, uno strumento più leggero come Uptime Kuma per il monitoraggio di uptime e stato è più rapido da configurare e più semplice da consultare. Scegliere Zabbix quando sono necessari soglie per ogni singola metrica, grafici storici, template per gli host e regole di escalation — funzionalità che un semplice pinger non può fornire su un parco macchine.