Chapitre 01

Architecture, base de données et haute disponibilité

Les problèmes de performance de Zabbix se jouent presque tous dans la base de données. Ce chapitre la dimensionne, la compresse, puis double le serveur.

Niveau avancé  ·  Lecture 14 min  ·  Base Zabbix 8.0 LTS

01Dimensionner en valeurs par seconde

Le nombre d'hôtes ne dit presque rien de la charge. L'unité qui compte est le nombre de nouvelles valeurs par seconde, affiché par Zabbix sur son tableau de bord d'accueil. Un serveur Linux avec le modèle standard produit de l'ordre de 2 à 5 valeurs par seconde, un commutateur de 48 ports supervisé en SNMP bien davantage.

Valeurs par secondeServeur ZabbixBase de donnéesProxies
Jusqu'à 5002 vCPU, 4 GoSur le même serveur, SSDFacultatifs
500 à 3 0004 vCPU, 8 GoMachine dédiée, 8 vCPU, 32 Go, NVMeRecommandés par site
3 000 à 10 0008 vCPU, 16 Go, en grappe16 vCPU, 64 Go, NVMe, réplicaObligatoires
Au-delàÉtude spécifiqueÉtude spécifiqueGroupes de proxies
Le disque de la base décide de tout

Une base Zabbix écrit en continu, par petites transactions. Un disque mécanique ou un stockage réseau partagé et chargé suffit à créer des files d'attente dans toute la chaîne, jusqu'aux déclencheurs qui se calculent en retard. Sur Proxmox VE, placez la machine de base sur un stockage NVMe local ou un pool Ceph dédié, jamais sur le même pool que les sauvegardes.

02PostgreSQL et TimescaleDB

Nous retenons PostgreSQL avec l'extension TimescaleDB pour toutes les plateformes neuves. TimescaleDB découpe l'historique en tranches temporelles, ce qui rend le ménage instantané : supprimer un mois de données revient à supprimer une tranche, au lieu de millions de lignes. Il compresse aussi les tranches anciennes, avec des gains de l'ordre de dix sur l'historique numérique.

ComposantVersion minimale pour Zabbix 8.0Sur Debian 13
PostgreSQL1517, fourni par la distribution
TimescaleDB2.20Dépôt de l'éditeur Timescale
PHP pour le frontal8.28.4, fourni par la distribution
Base de données, sur la machine dédiée
apt install postgresql
# depot TimescaleDB : suivre la procedure de l'editeur pour Debian,
# puis installer le paquet correspondant a la version de PostgreSQL
apt install timescaledb-2-postgresql-17

# reglages adaptes a la memoire de la machine, a relire ensuite
timescaledb-tune --quiet --yes
systemctl restart postgresql

sudo -u postgres createuser --pwprompt zabbix
sudo -u postgres createdb -O zabbix zabbix

Le schéma et l'activation de TimescaleDB se font après l'installation des paquets Zabbix, qui fournissent les scripts SQL (section suivante).

03Installer le serveur et le frontal

Dépôt et paquets, sur chaque serveur Zabbix
# paquet de depot 8.0 pour Debian 13 : verifier le nom exact a la sortie
wget https://repo.zabbix.com/zabbix/8.0/release/debian/pool/main/z/zabbix-release/zabbix-release_latest_8.0+debian13_all.deb
dpkg -i zabbix-release_latest_8.0+debian13_all.deb
apt update

apt install zabbix-server-pgsql zabbix-frontend-php php-pgsql \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2
Schéma et TimescaleDB, une seule fois
# depuis un serveur Zabbix, vers la base distante
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz \
  | psql -h 10.10.0.60 -U zabbix zabbix

# sur la base : charger l'extension au demarrage
#   shared_preload_libraries = 'timescaledb'   (postgresql.conf)
sudo -u postgres psql zabbix -c "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;"

# convertir les tables d'historique en hypertables
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql \
  | psql -h 10.10.0.60 -U zabbix zabbix
Le ménage passe à TimescaleDB

Une fois TimescaleDB actif, activez dans Administration, Ménage, l'option qui remplace le processus de ménage par la suppression de tranches, ainsi que la compression des données anciennes. Sans cela, l'extension est installée mais ne sert à rien.

04Deux serveurs en grappe

Depuis la version 6.0, Zabbix sait fonctionner en grappe sans outil externe : plusieurs serveurs partagent la même base, un seul est actif, les autres attendent. Si l'actif cesse de signaler sa présence dans la base, un serveur en attente prend le relais. Le frontal découvre seul le noeud actif en lisant la base.

Fichier /etc/zabbix/zabbix_server.conf, différences par noeud
# sur zbx-01
HANodeName=zbx-01
NodeAddress=10.10.0.61:10051

# sur zbx-02
HANodeName=zbx-02
NodeAddress=10.10.0.62:10051

# commun aux deux
DBHost=10.10.0.60
DBName=zabbix
DBUser=zabbix
DBPassword=...
Observer et piloter la grappe
zabbix_server -R ha_status

# delai avant bascule, une minute par defaut : nous le laissons ainsi
zabbix_server -R ha_set_failover_delay=1m

# retirer proprement un noeud arrete definitivement
zabbix_server -R ha_remove_node=zbx-03

Les agents et les proxies doivent connaître les deux serveurs. En mode actif, on les sépare par un point-virgule dans ServerActive : ils essaient l'un puis l'autre, et suivent le noeud actif sans intervention.

Côté agent et proxy
# agent : les deux serveurs de la grappe, separes par un point-virgule
ServerActive=10.10.0.61;10.10.0.62

# proxy actif : meme principe
Server=10.10.0.61;10.10.0.62
La grappe Zabbix ne protège pas la base

Deux serveurs Zabbix sur une base unique, c'est un point unique de défaillance déplacé, pas supprimé. La haute disponibilité de PostgreSQL relève d'un outil dédié, réplication en continu avec Patroni ou équivalent. À défaut, une machine de base sur un cluster Proxmox VE avec stockage partagé et haute disponibilité couvre déjà la panne matérielle, ce qui suffit dans la plupart des cas.

05Régler les caches et les processus

Les valeurs par défaut conviennent à une installation de démonstration. Les quatre réglages ci-dessous sont ceux que nous retouchons systématiquement, en partant de ces valeurs et en lisant ensuite l'utilisation réelle sur les graphiques internes de Zabbix.

ParamètreDéfautPoint de départSymptôme d'un manque
CacheSize32 Mo256 Mo à 1 GoLe serveur refuse de démarrer ou de recharger la configuration
HistoryCacheSize16 Mo256 MoÉcritures en retard, file d'attente qui grossit
ValueCacheSize8 Mo512 MoDéclencheurs lents, base sollicitée par les calculs
StartPollers et consortsFaiblesSelon l'occupation mesuréeProcessus occupés à plus de 75 %
Recharger sans redémarrer
zabbix_server -R config_cache_reload
zabbix_server -R diaginfo

06Superviser Zabbix lui-même

Le modèle Zabbix server health doit être lié au serveur dès le premier jour. Il remonte l'occupation de chaque type de processus et de chaque cache, et c'est lui qui vous dira, des semaines avant la saturation, quel réglage du tableau précédent relever.

Il reste la question qui fâche : qui prévient quand Zabbix tombe ? Ni la grappe, ni le modèle de santé n'y répondent, puisqu'ils dépendent de Zabbix. Une sonde externe indépendante, par exemple un Uptime Kuma hébergé ailleurs, qui vérifie l'interface et la présence d'un noeud actif, ferme la boucle.

Une supervision qui veille pendant que vous dormez

Nous concevons, installons et exploitons des plateformes de supervision pour des PME, des hébergeurs et des collectivités : Zabbix, Prometheus et Grafana, ou plus léger quand le besoin l'est. Reprise d'une supervision existante, réglage des alertes qui sonnent pour rien, astreinte : nous intervenons au forfait comme au long cours.