Zabbix en production : architecture interne, tuning, diagnostics et limites structurelles

Facebook Twitter Google Plus Instagram YouTube Twitch

PrĂ©ambule — La production n’est pas un laboratoire

Exploiter Zabbix en production exige de passer d’une vision logicielle Ă  une vision systĂ©mique. Un serveur sous charge est un Ă©cosystĂšme oĂč chaque composant — pollers, preprocessors, syncers, base SQL — influence la stabilitĂ© globale.

La rĂšgle est ici souveraine : Mesurer → Formuler une hypothĂšse → Modifier par paliers → Observer → Documenter. Il s’agit de dissĂšquer les engrenages internes et fournir les procĂ©dures exactes pour chaque levier d’optimisation.


1. Pollers — La gestion de l’attente

1.1 La mécanique du blocage

Un poller est un sĂ©quenceur bloquant. S’il interroge un Ă©quipement lent, il reste figĂ© jusqu’au Timeout. Si la file d’attente s’allonge, les donnĂ©es « glissent » (dĂ©rive des intervalles).

1.2 Comment diagnostiquer

  1. Surveillance visuelle : Allez dans Administration > Queue > Overview by proxy. Si la colonne « 5 seconds » ou « 10 seconds » est rouge, vos pollers sont saturés.

  2. MĂ©triques internes : CrĂ©ez un graphique avec l’item zabbix[process,poller,avg,busy].

    • Busy > 75% : Danger imminent.

    • Busy Ă  100% avec CPU bas : Latence rĂ©seau (Timeouts).

    • Busy Ă  100% avec CPU haut : Surcharge de calcul.

1.3 Comment procéder au tuning

  • AccĂšs : Éditez /etc/zabbix/zabbix_server.conf.

  • Levier 1 : Augmentez StartPollers par paliers de 10% Ă  20%.

  • Levier 2 : RĂ©duisez le paramĂštre Timeout (souvent 3s par dĂ©faut) Ă  1s ou 2s pour libĂ©rer les pollers plus vite.

  • Relance : systemctl restart zabbix-server.


2. Preprocessors — Le goulot invisible

2.1 La dualité Manager / Workers

Le Manager reçoit les donnĂ©es des pollers et les distribue aux Workers. Le goulot peut ĂȘtre le Manager (trop de petites donnĂ©es) ou les Workers (calculs trop lourds).

2.2 Comment diagnostiquer

  1. Métriques internes : Surveillez zabbix[process,preprocessing manager,avg,busy] et zabbix[process,preprocessing worker,avg,busy].

  2. Files d’attente : Regardez l’item zabbix[preprocessing_queue]. Si elle ne redescend jamais Ă  zĂ©ro, votre chaĂźne de traitement est sous-dimensionnĂ©e.

2.3 Comment procéder au tuning

  • AccĂšs : /etc/zabbix/zabbix_server.conf.

  • Levier : Augmentez StartPreprocessors.

  • Optimisation : Dans l’interface, identifiez les templates utilisant massivement des Regex ou du JavaScript. Remplacez-les par des Ă©tapes « JSONPath » ou « Custom multiplier » (plus Ă©conomes en CPU).


3. History Syncers — La persistance sous pression

3.1 Le flux vers la base SQL

Les Syncers vident le Value Cache vers la base SQL. Si la base ralentit, les Syncers saturent et la collecte s’arrĂȘte pour Ă©viter la perte de donnĂ©es en RAM.

3.2 Comment diagnostiquer

  1. Saturation du cache : Surveillez zabbix[wcache,value,pused]. Si vous approchez de 100%, le serveur va cesser de collecter.

  2. Activité des syncers : Surveillez zabbix[process,history syncer,avg,busy].

3.3 Comment procéder au tuning

  • AccĂšs : /etc/zabbix/zabbix_server.conf.

  • Levier 1 : HistoryCacheSize. Ne pas hĂ©siter Ă  passer Ă  128M ou 256M pour absorber les pics.

  • Levier 2 : StartDBSyncers. Attention : Ne dĂ©passez jamais 32 sans une infrastructure SQL exceptionnelle, au risque de crĂ©er des verrous (deadlocks).

  • Stockage : VĂ©rifiez les IOPS avec iostat -x 1. Si %util est Ă  100%, le problĂšme est matĂ©riel (disque).


4. La Base SQL — Le pivot central

4.1 Indexation et Slow Queries

Un index accĂ©lĂšre la lecture (Dashboards) mais ralentit l’Ă©criture (Syncers).

4.2 Comment diagnostiquer

  1. PostgreSQL : Installez l’extension pg_stat_statements et exĂ©cutez : SELECT query, calls, total_exec_time FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;

  2. Zabbix Logs : Activez temporairement DebugLevel=3 et cherchez « slow query ».

4.3 Comment procéder au tuning (Partitionnement)

  • AccĂšs : SQL Shell (psql ou mysql).

  • ProcĂ©dure : N’utilisez plus le Housekeeper natif (HousekeepingFrequency=0 dans la conf).

  • Outil : Installez pg_partman pour PostgreSQL. CrĂ©ez des partitions quotidiennes pour les tables history* et trends*.

  • BĂ©nĂ©fice : Le nettoyage se fera par un DROP TABLE programmĂ©, supprimant des Go de donnĂ©es en une fraction de seconde sans impacter les syncers.


5. Optimisation des Agents — ScalabilitĂ© Ă  la source

5.1 Agents Actifs : La clé du succÚs

En mode Actif, l’agent demande sa configuration au serveur puis pousse ses donnĂ©es. Le serveur devient un simple rĂ©cepteur passif.

5.2 Comment procéder

  1. Configuration Agent : Dans zabbix_agentd.conf, réglez StartAgents=0 (pour désactiver le mode passif) et configurez ServerActive=IP_DU_SERVEUR.

  2. Interface Zabbix : Changez le « Type » de tous vos items en « Zabbix agent (active) ».

  3. Surveillance : Surveillez zabbix[process,trapper,avg,busy] sur le serveur pour voir la charge de réception des agents actifs.


6. Diagnostics avancĂ©s — L’outil de dernier recours

6.1 Le Runtime Control

Lorsque le serveur semble « figé », utilisez la commande de diagnostic en temps réel.

  • Commande : zabbix_server -R diag

  • AccĂšs aux rĂ©sultats : tail -f /var/log/zabbix/zabbix_server.log

  • InterprĂ©tation : Le dump affichera l’utilisation prĂ©cise de chaque « Shared Memory Statistics ». C’est ici que vous verrez si le goulot est le ValueCache, le LLD cache ou le Write cache.


7. Limites structurelles — Savoir quand s’arrĂȘter

7.1 Ingestion massive

Zabbix n’est pas une base de donnĂ©es de sĂ©ries temporelles (TSDB) pure.

  • Diagnostic : Si votre NVPS (New Values Per Second) dĂ©passe 15 000-20 000, le moteur SQL traditionnel (mĂȘme tunĂ©) commencera Ă  souffrir.

  • Action : Migrez vers TimescaleDB (extension PostgreSQL). Activez l’option de compression native dans Zabbix pour rĂ©duire l’empreinte disque de 90%.


La performance de Zabbix ne se dĂ©crĂšte pas, elle se construit. En accĂ©dant aux fichiers de configuration avec une mĂ©thodologie de mesure (zabbix[process,...]), vous quittez le monde du tĂątonnement pour celui de l’ingĂ©nierie. Gardez vos syncers fluides, vos preprocessors lĂ©gers et votre SQL partitionnĂ© : c’est la seule recette pour un monitoring qui ne s’effondre pas lors du prochain incident majeur.

Leave a Reply