SSD Nodes Learn
Guides Matt ConnorPar Matt Connor · Mis à jour le 2026-07-19

Supervision Zabbix sur Ubuntu 24.04

Installez Zabbix 7.0 LTS sur Ubuntu 24.04 : ajoutez le dépôt, importez le schéma MySQL, configurez le frontend nginx et agent2, puis corrigez chaque erreur.

Ce que vous allez construire

Un seul VPS Ubuntu 24.04 exécutant la pile Zabbix 7.0 LTS complète : le démon zabbix-server qui interroge et alerte, une base de données MariaDB/MySQL qui stocke chaque métrique, un frontend PHP servi par nginx et zabbix-agent2 qui collecte les métriques de la machine elle-même. Une fois en place, vous le pointez vers un second serveur, vous attachez un modèle et vous recevez un e-mail dès qu'un disque se remplit ou qu'un service tombe.

Zabbix est plus lourd qu'un outil de page d'état : c'est un véritable système de séries temporelles avec modèles, déclencheurs, escalade et rétention de l'historique. Presque toute la difficulté tient dans trois étapes que les gens sautent : importer le schéma de la base de données, définir le mot de passe de la base que le serveur lit réellement, et décommenter deux lignes dans la configuration nginx. Réussissez ces étapes et le reste se fait dans un assistant. Si vous ne voulez que des vérifications marche/arrêt et une page d'état partageable, un moniteur d'état léger Uptime Kuma fait cela dans un seul conteneur ; Zabbix justifie son poids quand vous voulez des seuils par métrique et de l'escalade sur de nombreux hôtes.

Utilisez la branche 7.0 LTS : son serveur, son frontend, agent2 et le schéma sont versionnés ensemble, et elle reçoit des correctifs de sécurité pendant des années. Avant de copier le nom de fichier du dépôt ci-dessous, jetez un œil à la page de téléchargement officielle de Zabbix : le paquet latest pointe toujours vers la version 7.0 la plus récente, mais si vous préférez figer une build 7.0-N précise, la page liste aussi ce nom de fichier. Toutes les autres commandes ici sont stables sur toute la branche 7.0.

Dimensionnement, ports et prérequis

Partez d'un VPS KVM Ubuntu 24.04 neuf avec root ou sudo. Soyez honnête sur les ressources : 2 Go de RAM et deux vCPU sont le plancher réaliste pour le serveur, la base de données, nginx et PHP sur une seule machine qui supervise une poignée d'hôtes. Une machine de 1 Go démarre mais affame la base de données à mesure que l'historique grandit ; prévoyez 4 Go au-delà de quelques dizaines d'hôtes, et au-delà d'une centaine, déplacez la base sur son propre serveur. Le disque grandit selon le nombre d'éléments que vous collectez et la durée de conservation de l'historique ; prévoyez quelques gigaoctets pour commencer, et le housekeeper purge les anciennes données selon les fenêtres de rétention que vous définissez.

Ports : 80 et 443 pour le frontend, publics ou restreints à votre propre IP. Le serveur écoute sur le port TCP 10051 pour les agents actifs qui poussent leurs données, et chaque agent écoute sur le port TCP 10050 pour que le serveur l'interroge. N'ouvrez que ce que vous exposez si un pare-feu se trouve devant. Un enregistrement DNS de type A pour le frontend vaut la peine, car vous voudrez un vrai certificat dessus : une machine Zabbix surveille tous les autres services que vous exécutez, elle a donc sa place dans la pile d'auto-hébergement plus large qui vaut la peine en 2026 plutôt que rajoutée après coup.

Étape 1 — Ajouter le dépôt officiel Zabbix 7.0

Le paquet zabbix-release ne fait qu'une chose : il dépose la liste de sources apt et la clé de signature sur votre système. Installez-le, puis rafraîchissez l'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 update

Si wget renvoie 404 Not Found, le nom de fichier a changé : ouvrez la page de téléchargement Zabbix, choisissez Ubuntu 24.04 et copiez l'URL zabbix-release exacte qu'elle affiche. Un apt update propre montre une ligne repo.zabbix.com et aucun avertissement de clé ; The following signatures couldn't be verified because the public key is not available signifie que le paquet release n'a jamais installé sa clé, alors relancez le dpkg -i et mettez à jour de nouveau.

Étape 2 — Installer le serveur, le frontend et l'agent

Installez le serveur compilé pour MySQL, le frontend PHP, la configuration nginx, les fichiers de schéma SQL et agent2 en une seule fois.

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

zabbix-server-mysql est le serveur compilé pour MySQL/MariaDB ; pour PostgreSQL, installez plutôt zabbix-server-pgsql et adaptez les étapes de base de données ci-dessous. zabbix-sql-scripts contient le schéma que vous importerez ensuite : c'est un paquet distinct en 7.0, et l'oublier est exactement la raison pour laquelle le chemin d'import se révèle manquant plus tard. Aucun de ces paquets n'installe de moteur de base de données, alors installez MariaDB maintenant si la machine n'en a pas déjà un.

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

Étape 3 — Créer la base de données avec le bon jeu de caractères

Zabbix est strict sur la collation : la base doit être en utf8mb4 avec utf8mb4_bin, sinon l'import meurt en cours de route avec des erreurs de clé étrangère. Ouvrez un shell root avec sudo mysql et exécutez :

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;

Cette ligne SET GLOBAL est une soupape de sécurité pour l'import. Le schéma Zabbix crée des fonctions stockées, et un compte non-SUPER comme zabbix ne peut pas les créer tant que la journalisation binaire est active : MySQL 8 active la journalisation binaire par défaut, et certaines builds MariaDB managées aussi (la MariaDB standard non). Sautez ce drapeau sur un serveur où la journalisation binaire est active et l'import s'arrête avec ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Le définir en tant que root règle le problème ; vous le remettez à zéro après l'import. Notez le mot de passe exactement : la configuration du serveur a besoin de la même chaîne octet pour octet.

Étape 4 — Importer le schéma (l'étape que les gens sautent)

C'est la raison la plus fréquente pour laquelle un nouveau frontend refuse de se charger : la base que vous avez créée est vide. Chargez-y le schéma livré dans zabbix-sql-scripts.

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

Il demande le mot de passe zabbix, s'exécute pendant trente à soixante secondes sur un petit VPS, et n'affiche rien en cas de succès : le silence est normal ici. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory signifie que le paquet zabbix-sql-scripts n'est pas installé (retour à l'étape 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' signifie que le mot de passe ou le grant de l'étape 3 est incorrect. Une fois terminé, remettez le drapeau de sécurité à zéro :

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

Confirmez le chargement avec sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" : un nombre, et non une erreur doesn't exist, signifie que le schéma est en place.

Étape 5 — Définir le mot de passe de la base dans zabbix_server.conf

Le serveur lit ses identifiants de base de données depuis /etc/zabbix/zabbix_server.conf. Seul le mot de passe doit être défini : DBName et DBUser valent déjà zabbix par défaut. Décommentez la ligne # DBPassword= et renseignez-la :

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

Le mot de passe doit être, octet pour octet, celui de l'étape 3. Un DBPassword vide ou erroné est la première cause de la bannière « Zabbix server is not running » que vous rencontrerez plus tard : le démon démarre, échoue à se connecter et se termine. Rien à l'écran ne l'indique : seul le journal le fait.

Étape 6 — Pointer nginx vers le frontend

Le paquet zabbix-nginx-conf installe un bloc server dans /etc/zabbix/nginx.conf et le relie à nginx depuis /etc/nginx/conf.d/zabbix.conf, mais il est livré avec les lignes listen et server_name commentées, donc nginx ne sert rien pour Zabbix tant que vous ne les modifiez pas :

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

Utilisez votre domaine, ou l'IP publique du serveur si vous n'avez pas encore de DNS. Deux pièges. Le site d'accueil nginx par défaut d'Ubuntu écoute aussi sur le port 80 et est marqué comme serveur par défaut, il l'emporte donc pour toute requête dont il ne reconnaît pas le nom : supprimez-le sinon la mauvaise page se charge : sudo rm -f /etc/nginx/sites-enabled/default. Et si /etc/nginx/conf.d/zabbix.conf manque pour une raison quelconque (un défaut d'empaquetage connu), créez le lien à la main avec sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Puis testez et rechargez :

sudo nginx -t
sudo systemctl reload nginx

nginx -t devrait afficher test is successful. S'il affiche plutôt nginx: [emerg] a duplicate default server for 0.0.0.0:80, c'est que le site par défaut et le bloc Zabbix revendiquent tous deux default_server : supprimez le site par défaut et relancez le test. Plus souvent, le test passe avec seulement un avertissement conflicting server name mais le navigateur affiche toujours la page d'accueil ordinaire : c'est le site par défaut qui l'emporte sur un nom non reconnu, et le supprimer corrige cela.

Étape 7 — Démarrer et activer les services

Démarrez le serveur, l'agent, PHP-FPM et nginx, et activez-les pour qu'ils survivent à un redémarrage.

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 fournit PHP 8.3, donc le service FPM est php8.3-fpm ; le paquet zabbix-nginx-conf exécute son frontend sous ce même maître. Confirmez que le serveur a démarré et est resté actif :

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

Un journal sain se termine par le serveur démarré et ses processus housekeeper, poller et trapper en cours d'exécution. Si vous voyez [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', le DBPassword de l'étape 5 ne correspond pas : corrigez-le et redémarrez. Une ligne [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist signifie que vous avez sauté l'import du schéma à l'étape 4, donc le serveur n'a rien à lire.

Étape 8 — Terminer l'assistant de configuration web

Rendez-vous sur http://your-domain-or-ip. L'assistant de configuration Zabbix s'ouvre. Parcourez-le :

  1. Welcome : choisissez une langue.
  2. Check of pre-requisites : chaque ligne devrait afficher OK d'emblée ; le pool /etc/zabbix/php-fpm.conf empaqueté relève déjà les limites PHP dont Zabbix a besoin.
  3. Configure DB connection : type de base MySQL, hôte localhost, port 0 (ce qui signifie le port ou le socket par défaut), nom de base zabbix, utilisateur zabbix, et le mot de passe de l'étape 3. Des identifiants erronés ou un schéma manquant se révèlent ici même.
  4. Settings : laissez l'hôte du serveur Zabbix à localhost, le port 10051, et nommez l'installation.
  5. Pre-installation summary, puis Install : l'assistant écrit /etc/zabbix/web/zabbix.conf.php.
  6. Finish : connectez-vous en tant que Admin (A majuscule) avec le mot de passe zabbix, et changez ce mot de passe sous Users immédiatement.

Si l'assistant signale Cannot create the configuration file, l'utilisateur web ne peut pas écrire dans /etc/zabbix/web/ : téléchargez le zabbix.conf.php qu'il propose, placez-le là à la main avec sudo, et cliquez sur Finish.

Étape 9 — Ajouter l'hôte local et attacher un modèle

Zabbix ne se supervise pas automatiquement. Allez dans Data collection → Hosts → Create host, donnez à l'hôte le nom zabbix-server, ajoutez-le au groupe Linux servers, et ajoutez une interface Agent avec l'IP 127.0.0.1, port 10050. Sous Templates, liez Linux by Zabbix agent (la variante en interrogation passive ; Linux by Zabbix agent active fait pousser les données par l'agent). Enregistrez.

En moins d'une minute, la ligne de l'hôte affiche une étiquette ZBX verte et les métriques arrivent sous Monitoring → Latest data. Une étiquette ZBX rouge signifie que le serveur ne peut pas joindre l'agent : un mode de défaillance traité plus bas, pas une erreur de cette étape.

Étape 10 — Un déclencheur utile et une alerte e-mail

Le modèle Linux by Zabbix agent fournit déjà des déclencheurs pour un CPU élevé, une mémoire faible et des disques pleins, vous avez donc des alertes dès que vous le liez. Pour voir comment l'un est construit, ajoutez le vôtre : ouvrez l'hôte, allez dans Triggers → Create trigger, nommez-le Root filesystem over 90% full on {HOST.NAME}, réglez la sévérité sur High, et utilisez cette expression :

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

vfs.fs.dependent.size[/,pused] est l'élément de pourcentage utilisé que la découverte de systèmes de fichiers du modèle crée pour le système de fichiers racine (le modèle Linux de la 7.0 collecte vfs.fs.get une fois et en dérive des éléments dépendants par point de montage), donc le déclencheur se déclenche sans collecte de données supplémentaire. Enregistrez-le.

Un déclencheur ne fait que recolorer une ligne du tableau de bord tant qu'une action ne prévient personne. Sous Alerts → Media types → Email, définissez le serveur SMTP, le port, l'adresse d'expéditeur, la sécurité de connexion (généralement STARTTLS) et les éventuels identifiants du relais, puis utilisez Test : un échec ici signifie que le chemin SMTP est mauvais avant qu'une vraie alerte n'en dépende. Donnez une adresse à l'utilisateur Admin sous Users → Users → Admin → Media → Add et choisissez quelles sévérités déclenchent une notification. Puis reliez le tout sous Alerts → Actions → Trigger actions → Create action : ajoutez une condition comme Trigger severity >= Warning, et sous Operations envoyez à Admin par Email. Enregistrez et activez-la. Vous préférez la messagerie instantanée ? Zabbix 7.0 fournit des types de média webhook pour Slack, Discord et Telegram : configurez-en un exactement comme Email et assignez-le à un utilisateur.

Superviser un second serveur avec l'agent

Pour surveiller un autre serveur, ajoutez-y aussi le dépôt Zabbix (Ubuntu 24.04 ne fournit aucun paquet Zabbix en propre), puis installez seulement 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

Modifiez /etc/zabbix/zabbix_agent2.conf, réglez Server sur l'IP du serveur Zabbix (pour l'interrogation passive) et, pour les vérifications actives, ServerActive plus un Hostname unique qui correspond à l'hôte que vous créez dans le frontend :

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

Exécutez sudo systemctl enable --now zabbix-agent2 et ouvrez le port TCP 10050 depuis le serveur Zabbix vers cette machine. De retour dans le frontend, créez un hôte dont l'interface Agent pointe vers l'IP de cette machine, liez le modèle Linux, et il remonte des données en moins d'une minute.

Modes de défaillance, avec les messages que vous verrez

Le frontend affiche Error connecting to database ou une erreur de base de données. À l'étape DB de l'assistant, Access denied for user 'zabbix'@'localhost' (using password: YES) signifie que le mot de passe ne correspond pas à l'étape 3 ou que le GRANT n'a jamais été exécuté. Si la base se connecte mais que le frontend signale The frontend does not match Zabbix database ou Table 'zabbix.users' doesn't exist, l'import du schéma de l'étape 4 a été sauté ou a échoué : relancez-le dans une base fraîchement créée.

Bannière orange : Zabbix server is not running: the information displayed may not be current. Le frontend est actif mais ne peut pas joindre un serveur vivant. Trois causes, la plus probable en premier. Le service est mort : vérifiez systemctl status zabbix-server et démarrez-le. Le service tourne mais ne peut pas joindre sa base : le journal montre [Z3001] connection to database 'zabbix' failed: [1045] Access denied, ce qui signifie un DBPassword erroné ou vide. Ou le frontend pointe vers le mauvais serveur, enregistré comme hôte localhost port 10051 dans /etc/zabbix/web/zabbix.conf.php. Sur Ubuntu, il n'y a pas de SELinux par défaut, donc la cause du socket SELinux que citent les guides RHEL ne s'applique pas ; ici c'est presque toujours le mot de passe de la base ou un service arrêté.

L'hôte affiche une étiquette ZBX rouge ; erreur d'élément Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. L'agent ne tourne pas ou n'écoute pas. Vérifiez systemctl status zabbix-agent2 et confirmez ListenPort=10050. Un délai d'attente au lieu de « connection refused » signifie qu'un pare-feu bloque le port 10050. Le message associé Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. signifie que l'agent est joignable mais que sa ligne Server= ne liste pas l'IP du serveur Zabbix : ajoutez-la et redémarrez l'agent.

Page d'accueil nginx ordinaire, ou 502 Bad Gateway. La page d'accueil signifie que le site par défaut est encore activé ou que le bloc Zabbix n'est pas relié : supprimez /etc/nginx/sites-enabled/default et confirmez que /etc/nginx/conf.d/zabbix.conf existe, comme à l'étape 6. Un 502 signifie que nginx a atteint PHP mais que PHP-FPM est arrêté ou écoute sur un autre socket : démarrez php8.3-fpm et vérifiez que le socket fastcgi_pass du bloc Zabbix correspond au pool en cours d'exécution.

Sauvegardes, mises à jour et TLS

La base de données, c'est tout l'historique, alors sauvegardez-la avec mysqldump selon un calendrier et gardez le dump hors de la machine :

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

Les fichiers de configuration /etc/zabbix sont petits et valent aussi la peine d'être sauvegardés, mais ils sont reconstructibles ; les données ne le sont pas. La restauration est l'inverse : créez la base, importez le dump, pointez la configuration dessus.

Les mises à jour au sein de la branche 7.0 sont de simples apt update && apt upgrade ; le serveur applique les éventuelles migrations de schéma à son prochain démarrage, alors mettez à jour les paquets et redémarrez zabbix-server. Une future branche majeure est un choix délibéré : lisez ses notes de mise à jour, sauvegardez d'abord la base, et attendez-vous à un changement de schéma sans retour. Ce saut sans retour est exactement la raison pour laquelle vous vous fixez sur une branche LTS et y restez.

Ne laissez pas le frontend en HTTP simple. Une fois le DNS pointé vers la machine, posez-y un certificat avec Certbot et Let's Encrypt sur nginx pour Ubuntu 24.04, qui réécrit le bloc server pour écouter sur le 443 et rediriger le 80. Pendant que vous durcissez une machine qui se connecte pour surveiller tous les autres serveurs que vous exécutez, verrouillez aussi son SSH avec Fail2ban qui bannit les attaques SSH par force brute. Un identifiant de supervision ne devrait pas circuler en clair, et sa porte d'entrée ne devrait pas rester ouverte aux devineurs de mots de passe.

FAQ

Ai-je besoin de l'agent Zabbix, ou puis-je superviser sans lui ?

Les deux fonctionnent. L'agent (agent2) fournit de riches métriques par hôte (CPU, mémoire, disques, processus, services, fichiers journaux) et c'est le choix normal pour les serveurs que vous contrôlez. La supervision sans agent couvre les équipements où vous ne pouvez pas installer de logiciel : SNMP pour les commutateurs et imprimantes, ping ICMP pour la joignabilité, vérifications HTTP pour les points de terminaison, IPMI pour la santé matérielle. La plupart des déploiements réels mélangent les deux.

Pourquoi le frontend dit-il que le serveur Zabbix n'est pas en cours d'exécution ?

Le frontend fonctionne mais ne peut pas joindre un processus zabbix-server vivant. En général, le serveur a démarré, n'a pas réussi à se connecter parce que DBPassword dans zabbix_server.conf est erroné ou vide, et s'est aussitôt arrêté. Exécutez systemctl status zabbix-server et lisez /var/log/zabbix/zabbix_server.log ; une ligne [Z3001] connection to database ... failed le confirme. Corrigez le mot de passe et redémarrez, et la bannière disparaît en moins d'une minute.

Dois-je utiliser MySQL, ou puis-je utiliser PostgreSQL ?

Les deux sont pleinement pris en charge : zabbix-server-mysql avec MariaDB ou MySQL comme le fait ce guide, ou zabbix-server-pgsql avec PostgreSQL. Pour les petites installations, le choix importe peu. Pour les grandes, PostgreSQL avec l'extension TimescaleDB partitionne les tables d'historique et rend le housekeeping bien moins coûteux, c'est pourquoi les gros sites penchent pour lui. Choisissez-en un et gardez-le : migrer plus tard signifie un export et un réimport complets, pas un changement de configuration.

De combien de RAM un serveur Zabbix tout-en-un a-t-il besoin ?

Pour une seule machine supervisant une poignée d'hôtes, 2 Go est un plancher réaliste et 4 Go est confortable au-delà de quelques dizaines d'hôtes ; la mémoire va surtout au cache de la base et aux pollers du serveur. Un VPS de 1 Go tourne mais affame la base à mesure que l'historique grandit. Au-delà d'une centaine d'hôtes, séparez la base sur son propre serveur et ajustez son buffer pool plutôt que d'entasser plus de RAM dans une seule machine.

Zabbix est-il excessif pour deux ou trois serveurs ?

Cela peut l'être. Si tout ce dont vous avez besoin est « est-ce en ligne ? » et une page que vous pouvez partager, un outil plus léger comme Uptime Kuma pour la supervision de disponibilité et d'état est plus rapide à mettre en place et plus facile à lire d'un coup d'œil. Choisissez Zabbix quand vous voulez des seuils par métrique, des graphiques historiques, des hôtes basés sur des modèles et des règles d'escalade : les choses qu'un simple pinger ne peut pas vous donner sur un parc de machines.