Skip to main content

Tutoriel Zabbix 7.0

Installation d'un serveur Zabbix sur Debian 12​

Ce tutoriel explique l'installation et la configuration de Zabbix 7.0 avec Nginx et MariaDB sur Debian 12.

1. Configuration de l'IP statique​

Éditer le fichier Netplan:

sudo nano /etc/network/interfaces

Contenu possible pour une interface en IP statique:

auto ens18
iface ens18 inet static
address 192.168.30.10/24
gateway 192.168.30.1
dns-nameservers 1.1.1.1 8.8.8.8

Redémarrer le réseau:

sudo systemctl restart networking

Vérifier:

ip a

2. Installation des paquets nécessaires​

sudo apt update && sudo apt upgrade -y
sudo apt install -y gnupg lsb-release ca-certificates software-properties-common curl wget

Ajouter le dépôt Zabbix 7.0​

wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1%2Bdebian12_all.deb
sudo dpkg -i zabbix-release_7.0-1+debian12_all.deb
sudo apt update

Installer les paquets Zabbix + MariaDB + Nginx​

sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-nginxconf zabbix-sql-scripts zabbix-agent mariadb-server php-fpm php-mysql

3. Configuration de MariaDB​

Démarrer MariaDB​

sudo systemctl enable mariadb --now

Configurer MariaDB (sécurisation + création base Zabbix)​

sudo mysql -u root -p

Puis exécuter:

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'zabbix';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
FLUSH PRIVILEGES;
EXIT;

Importer le schéma de la base​

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix

4. Configuration du serveur Zabbix​

Modifier /etc/zabbix/zabbix_server.conf:

sudo nano /etc/zabbix/zabbix_server.conf

Changer:

DBPassword=zabbix
tip

Activez aussi LogFile, PidFile, DBHost si besoin.

5. Configuration de Nginx pour Zabbix​

Modifier /etc/nginx/sites-available/zabbix:

sudo nano /etc/nginx/sites-available/zabbix

Configuration:

server {
listen 80;
server_name 192.168.30.10 SRV-ZABBIX-01.alpha.lan;

root /usr/share/zabbix;
index index.php index.html;

access_log /var/log/nginx/zabbix_access.log;
error_log /var/log/nginx/zabbix_error.log;

location = /favicon.ico {
log_not_found off;
}

location / {
try_files $uri $uri/ =404;
}

location ~ /\.ht {
deny all;
}

location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}

location /vendor {
deny all;
return 404;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "date.timezone=Europe/Paris";
}
}

Changer server_name:

server_name 192.168.30.10 SRV-ZABBIX-01.alpha.lan;

Activer PHP pour le frontend Zabbix​

Modifier /etc/php/8.2/fpm/php.ini:

sudo nano /etc/php/8.2/fpm/php.ini

Modifier (exemples):

date.timezone=Europe/Paris

6. Démarrage des services​

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx
sudo systemctl restart zabbix-server
sudo systemctl restart zabbix-agent

Activer au démarrage​

sudo systemctl enable zabbix-server zabbix-agent nginx php8.2-fpm

7. Accès Web​

Accéder à: http://192.168.30.10/zabbix

Configurer le frontend (connexion à la base zabbix, fuseau horaire, etc.)

Identifiants par défaut:

  • Nom utilisateur: Admin
  • Mot de passe: zabbix
success

À ce stade, Zabbix est installé et fonctionnel avec Nginx et MariaDB sur le serveur principal.


Clonage d'un serveur Zabbix 7.0 sur Debian 12 (SRV-ZABBIX-01 vers SRV-ZABBIX-02)​

Objectif​

Créer une copie exacte du serveur SRV-ZABBIX-01 pour en faire un second noeud SRV-ZABBIX-02 dans une future configuration en haute disponibilité (cluster HA). Le serveur cloné aura une nouvelle IP, un nouveau nom d'hôte, et une configuration réseau propre.

Prérequis​

  • Avoir un serveur SRV-ZABBIX-01 fonctionnel avec Debian 12, Zabbix 7.0, MariaDB, Nginx
  • Accès à une infrastructure vSphere ou équivalente pour cloner la VM

Étape 1: Clonage de la machine virtuelle sous vSphere​

  1. Se connecter à vSphere Web Client
  2. Clic droit sur SRV-ZABBIX-01 → Clone → Clone to Virtual Machine
  3. Donner comme nom à la VM: SRV-ZABBIX-02
  4. Choisir le datacenter, dossier, cluster et stockage identiques
  5. Réseau: laisser tel quel pour l'instant (sera modifié ensuite)
  6. Finaliser et attendre la fin du clonage
info

À ce stade, SRV-ZABBIX-02 est un clone identique à SRV-ZABBIX-01.

Étape 2: Configuration du système sur SRV-ZABBIX-02​

2.1 Modifier le nom d'hôte (hostname)​

echo "SRV-ZABBIX-02" | sudo tee /etc/hostname
sudo hostnamectl set-hostname SRV-ZABBIX-02

2.2 Modifier le fichier /etc/hosts​

sudo nano /etc/hosts

Ajouter ou modifier comme suit:

127.0.0.1 localhost
192.168.30.10 SRV-ZABBIX-01
192.168.30.20 SRV-ZABBIX-02

2.3 Modifier l'adresse IP statique​

sudo nano /etc/network/interfaces

Modifier ou adapter la configuration:

auto ens18
iface ens18 inet static
address 192.168.30.20/24
gateway 192.168.30.1
dns-nameservers 1.1.1.1 8.8.8.8

Redémarrer l'interface:

sudo systemctl restart networking

Vérifiez l'adresse IP:

ip a

Étape 3: Configuration spécifique à Nginx sur SRV-ZABBIX-02​

3.1 Modifier le fichier de configuration Nginx​

sudo nano /etc/nginx/sites-available/zabbix

Changer la directive server_name pour qu'elle reflète le nouveau nom d'hôte et IP:

server {
listen 80;
server_name 192.168.30.20 SRV-ZABBIX-02.alpha.lan;

root /usr/share/zabbix;
index index.php index.html;

access_log /var/log/nginx/zabbix_access.log;
error_log /var/log/nginx/zabbix_error.log;

location = /favicon.ico {
log_not_found off;
}

location / {
try_files $uri $uri/ =404;
}

location ~ /\.ht {
deny all;
}

location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}

location /vendor {
deny all;
return 404;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "date.timezone=Europe/Paris";
}
}

3.2 Redémarrer Nginx​

sudo nginx -t
sudo systemctl restart nginx

Testez l'accès web sur: http://192.168.30.20/zabbix

Conclusion​

À ce stade:

  • SRV-ZABBIX-02 est une copie fonctionnelle de SRV-ZABBIX-01
  • Le hostname, l'IP et Nginx sont correctement adaptés
  • Ce serveur est prêt à être intégré dans un cluster HA avec pacemaker, corosync et une base MariaDB Galera

Mise en place d'un cluster HA (Haute Disponibilité) Zabbix​

Objectif​

Mettre en place un cluster haute disponibilité pour Zabbix, basé sur 2 nœuds Debian 12 déjà configurés:

  • SRV-ZABBIX-01 (IP: 192.168.30.10)
  • SRV-ZABBIX-02 (IP: 192.168.30.20)

Chaque serveur exécute Zabbix, MariaDB, PHP 8.2, Nginx, etc. (cf. parties précédentes).

Introduction au HA Zabbix​

Ce que nous allons mettre en place:

  • Zabbix Server en ressource unique active via Pacemaker
  • MariaDB Galera en cluster actif-actif pour la réplication de la base
  • Utilisation de pcs, corosync, pacemaker, galera et rsync

:::warning Important Zabbix ne supporte qu'un seul processus serveur actif, d'où l'importance d'utiliser Pacemaker pour gérer qui prend la main. :::

1. Installation des composants nécessaires​

Sur les deux serveurs:

sudo apt install -y pacemaker corosync pcs galera-4 rsync

Créer l'utilisateur hacluster sur les deux machines:

sudo passwd hacluster # Mot de passe: Respons11

Activer les services:

sudo systemctl enable pcsd pacemaker corosync --now

Vérifier que pcsd écoute sur le port 2224:

ss -lnpt | grep 2224

2. Authentification des nœuds au cluster​

Sur SRV-ZABBIX-01, exécuter:

sudo pcs host auth SRV-ZABBIX-01 SRV-ZABBIX-02 -u hacluster -p

Entrer le mot de passe: Respons11

Si vous obtenez une erreur:​

Error: Hosts 'SRV-ZABBIX-01' not known to pcs

Modifier /etc/hosts sur les deux serveurs:

sudo nano /etc/hosts

Ajouter:

192.168.30.10 SRV-ZABBIX-01
192.168.30.20 SRV-ZABBIX-02

Puis relancer la commande d'authentification.

3. Création du cluster​

Sur SRV-ZABBIX-01:

sudo pcs cluster setup zabbix-ha SRV-ZABBIX-01 SRV-ZABBIX-02

Démarrer le cluster​

sudo pcs cluster start --all
sudo pcs cluster enable --all

Vérifier le statut​

sudo pcs status

:::warning Bug rencontré: known-hosts vide Si vous rencontrez l'erreur:

Error: Hosts 'SRV-ZABBIX-01' not known to pcs

Solution:

  • Supprimer le cluster défaillant: sudo pcs cluster destroy --all
  • Refaire l'authentification, puis la création du cluster
  • Ne pas hésiter à recloner la VM si l'état est corrompu :::

4. Configuration du cluster​

Désactiver le STONITH (facultatif si aucun périphérique de fencing)​

sudo pcs property set stonith-enabled=false

Ajouter la ressource Zabbix Server​

sudo pcs resource create zabbix-server systemd:zabbix-server op monitor interval=30s

Empêcher le basculement trop fréquent​

sudo pcs resource meta zabbix-server resource-stickiness=100

Redémarrer Zabbix (via Pacemaker uniquement)​

sudo pcs resource restart zabbix-server

:::warning Important Ne jamais démarrer Zabbix manuellement! Utilisez toujours Pacemaker. :::

Vérifier le statut​

sudo pcs status resources

5. Configuration du HA côté Zabbix​

Modifier /etc/zabbix/zabbix_server.conf sur les deux serveurs:

sudo nano /etc/zabbix/zabbix_server.conf

Ajouter:

HANodeName=SRV-ZABBIX-01 # sur SRV-ZABBIX-01
HANodeName=SRV-ZABBIX-02 # sur SRV-ZABBIX-02

6. Mise en place de MariaDB Galera​

6.1 Configuration du serveur MariaDB principal (SRV-ZABBIX-01)​

Modifier /etc/mysql/mariadb.conf.d/60-galera.cnf:

sudo nano /etc/mysql/mariadb.conf.d/60-galera.cnf

Ajouter:

[galera]
wsrep_on=ON
galera_cluster_name="zabbix-galera"
galera_cluster_address="gcomm://192.168.30.10,192.168.30.20"
bind-address=0.0.0.0
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
wsrep_node_name="SRV-ZABBIX-01"
wsrep_node_address="192.168.30.10"

Puis lancer MariaDB:

sudo galera_new_cluster

6.2 Configuration du second nœud (SRV-ZABBIX-02)​

Même fichier 60-galera.cnf, ajuster:

wsrep_node_name="SRV-ZABBIX-02"
wsrep_node_address="192.168.30.20"

Démarrer MariaDB normalement:

sudo systemctl start mariadb

Vérification​

mysql -u root -p
SHOW STATUS LIKE 'wsrep_cluster_size';

Vous devez voir: Value = 2

7. Tests de bascule (failover)​

Scénario:

  1. Accéder à l'interface Zabbix via http://192.168.30.10/zabbix
  2. Éteindre SRV-ZABBIX-01
  3. Vérifier que Pacemaker bascule zabbix-server sur SRV-ZABBIX-02
  4. Réactiver le serveur et vérifier si la ressource revient (grâce au stickiness = 100)

Résultat final​

success

Vous avez maintenant un cluster Zabbix HA prêt à encaisser une panne!

  • Zabbix ne tourne que sur un seul nœud à la fois
  • La base MariaDB est répliquée activement sur les deux nœuds
  • Vous pouvez administrer le cluster avec pcs à tout moment

Commandes utiles​

# Affiche l'état général
sudo pcs status

# Redémarre la ressource Zabbix
sudo pcs resource restart zabbix-server

# Voir les logs Corosync
journalctl -xe -u corosync

# Voir les logs Pacemaker
journalctl -xe -u pacemaker

Astuce bonus​

Créer un alias pour surveiller le cluster facilement:

echo "alias cluster='pcs status'" >> ~/.bashrc && source ~/.bashrc

Documentation créée par Jerrom