Superviser serveurs, réseau, bases de données et sites web avec Zabbix 7.0 LTS : installation, agent 2, templates, triggers, alertes, SNMP, proxies, API et mise en production.
On installe ici le Zabbix server, sa base PostgreSQL, le frontend web servi par Nginx et un agent 2 pour superviser la machine elle-même. Deux méthodes : les paquets officiels sur Ubuntu 24.04, que je recommande pour la production, et Docker Compose, pratique pour tester ou pour une petite installation.
La documentation officielle donne des ordres de grandeur selon le nombre de métriques collectées, pas selon le nombre d'hôtes. Un serveur Linux avec le template standard représente une centaine de métriques.
| Taille | Métriques | CPU | RAM |
|---|---|---|---|
| Petite | 1 000 | 2 cœurs | 8 Go |
| Moyenne | 10 000 | 4 cœurs | 16 Go |
| Grande | 100 000 | 16 cœurs | 64 Go |
C'est la base de données qui limite en premier. Prévoyez un disque SSD, et de l'espace : l'historique grossit vite tant qu'on n'a pas réglé les durées de conservation, ce qu'on fera au chapitre 7.
Toutes les commandes suivantes s'exécutent en root, ou avec sudo.
Zabbix publie ses propres paquets, toujours plus récents que ceux de la distribution. On installe le paquet qui déclare le dépôt de la branche 7.0 :
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
apt updateapt install -y postgresql zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-sql-scripts contient le schéma de la base. zabbix-nginx-conf installe une configuration Nginx prête à l'emploi pour le frontend.
On crée un utilisateur et une base dédiés, puis on importe le schéma initial. La commande createuser demande un mot de passe : notez-le, il servira deux fois.
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 zabbixL'import prend une à deux minutes et affiche beaucoup de lignes INSERT et CREATE. C'est normal. Si vous connaissez mal PostgreSQL, les bases de PostgreSQL expliquent les rôles et les bases utilisés ici.
Dans /etc/zabbix/zabbix_server.conf, une seule ligne est obligatoire : le mot de passe de la base.
DBPassword=le-mot-de-passe-choisiLe fichier /etc/zabbix/nginx.conf livré par le paquet a ses deux premières lignes commentées. On les décommente et on les adapte :
server {
listen 8080;
server_name zabbix.example.com;Le port 8080 évite tout conflit avec un site déjà servi sur le port 80. Si Zabbix est seul sur la machine, mettez listen 80; et placez un certificat TLS devant, directement dans Nginx ou via un reverse proxy. La configuration de Nginx détaille cette partie.
systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmVérifiez que le serveur a démarré proprement :
tail -n 20 /var/log/zabbix/zabbix_server.logUne ligne server #0 started [main process] suivie de la liste des processus lancés signifie que tout va bien. Une erreur de connexion à la base vient presque toujours du DBPassword.
Ouvrez http://zabbix.example.com:8080. Un assistant en six étapes vérifie les prérequis PHP, demande les paramètres de la base, puis le nom de l'installation et le fuseau horaire.
localhost, base zabbix, utilisateur zabbix, et le mot de passe choisi plus haut.Connectez-vous ensuite avec l'utilisateur Admin et le mot de passe zabbix. Changez ce mot de passe immédiatement, dans Users > Users. Un frontend Zabbix exposé avec les identifiants par défaut est une porte ouverte sur toute votre infrastructure.
Dans Data collection > Hosts, un hôte « Zabbix server » existe déjà. Il est supervisé par l'agent 2 installé sur la même machine. Au bout de quelques minutes, sa colonne de disponibilité passe au vert : la chaîne complète fonctionne.
Zabbix publie des images officielles pour chaque composant. Le nom suit le motif zabbix/<composant>:<os>-<version>, par exemple zabbix/zabbix-server-pgsql:alpine-7.0-latest. Voici une installation minimale avec PostgreSQL :
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: ${ZBX_DB_PASSWORD}
POSTGRES_DB: zabbix
volumes:
- pgdata:/var/lib/postgresql/data
zabbix-server:
image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
restart: unless-stopped
depends_on:
- postgres
environment:
DB_SERVER_HOST: postgres
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: ${ZBX_DB_PASSWORD}
POSTGRES_DB: zabbix
ports:
- "10051:10051"
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
restart: unless-stopped
depends_on:
- zabbix-server
environment:
ZBX_SERVER_HOST: zabbix-server
DB_SERVER_HOST: postgres
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: ${ZBX_DB_PASSWORD}
POSTGRES_DB: zabbix
PHP_TZ: Europe/Paris
ports:
- "8080:8080"
zabbix-agent:
image: zabbix/zabbix-agent2:alpine-7.0-latest
restart: unless-stopped
environment:
ZBX_HOSTNAME: "Zabbix server"
ZBX_SERVER_HOST: zabbix-server
volumes:
pgdata:Le mot de passe vit dans un fichier .env à côté, jamais dans le compose.yaml commité :
echo "ZBX_DB_PASSWORD=$(openssl rand -base64 24)" > .env
docker compose up -dLe conteneur du serveur crée le schéma lui-même au premier démarrage. Le frontend répond ensuite sur le port 8080, avec les mêmes identifiants par défaut à changer. Dans l'hôte « Zabbix server » de l'interface, remplacez l'adresse de l'interface agent 127.0.0.1 par le nom DNS zabbix-agent, sinon le serveur cherchera l'agent dans son propre conteneur.
Pour les bases de Compose, volumes et fichiers .env, voir le guide Docker Compose. Le dépôt zabbix/zabbix-docker fournit aussi des fichiers Compose complets, avec proxy, Java gateway et réception des traps SNMP.
Sur le serveur Zabbix, en plus de SSH, deux ports suffisent :
ufw allow 8080/tcp # frontend web, ou 443 derrière un reverse proxy
ufw allow 10051/tcp # agents actifs et proxiesSur chaque machine supervisée en mode passif, il faut ouvrir le port 10050, mais seulement pour l'adresse du serveur Zabbix :
ufw allow from 10.0.0.10 to any port 10050 proto tcpNe laissez jamais le port 10050 ouvert à tout Internet. Les règles de pare-feu sont détaillées dans le guide UFW.
Le serveur tourne et se supervise lui-même. Il reste à lui donner quelque chose à superviser : c'est l'objet du chapitre suivant, avec l'agent 2, les templates et l'enregistrement automatique des hôtes.