Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 517 minIntermédiaire

Hôtes, modèles, éléments et déclencheurs Zabbix

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • créer un hôte, lui lier un modèle et ajuster ses macros ;
  • lire et créer un élément avec sa clé et son intervalle ;
  • écrire l'expression d'un déclencheur avec ses fonctions ;
  • éviter le battement d'une alerte avec une expression de rétablissement ;
  • comprendre la découverte de bas niveau (LLD).

3 exercices corrigés2 schémas

Dans Zabbix, tout part de quatre objets : l'hôte (la machine ou l'équipement supervisé), le modèle (template, un ensemble de mesures réutilisable), l'élément (item, une mesure) et le déclencheur (trigger, la condition qui transforme une mesure en problème). Ce chapitre explique chacun d'eux avec les écrans de Zabbix 7.0, la syntaxe des clés et des expressions, les macros qui adaptent un modèle à un hôte, et la découverte de bas niveau qui crée les mesures toute seule.

Les objets de Zabbix et leurs liens

Groupe d'hôtesServeurs LinuxcontientHôte srv-gestionagent 192.168.10.179lié àModèleLinux by Zabbix agentle modèle apporte à l'hôteÉlémentsprocesseur, mémoireDécouverteun élément par disqueDéclencheursseuils sur 5 minutesMacrosseuils : 80 %, 90 %redéfinie sur l'hôteMacro avec contexte/var/lib/mysql : 85 %À l'exécution :Élémentcollecte 86 %Déclencheur86 > 85 ?ProblèmecrééActionalerte envoyée
Un hôte reçoit ses éléments et ses déclencheurs d'un modèle ; les macros les adaptent à l'hôte
ObjetRôleExemple
Groupe d'hôtesRange les hôtes, sert aux droits des utilisateurs, aux actions et aux tableaux de bordServeurs Linux, Serveurs Windows, Réseau, Sites/Marseille
HôteCe que l'on supervise, avec une ou plusieurs interfaces (agent, SNMP, IPMI, JMX)srv-gestion, SW-ETAGE1, pfsense
ModèleEnsemble d'éléments, déclencheurs, graphiques, règles de découverte, scénarios web et macros, lié à un ou plusieurs hôtesLinux by Zabbix agent, Cisco IOS by SNMP
ÉlémentUne mesure, collectée à un intervalle et stockéeEspace utilisé de /, en pourcentage
DéclencheurUne expression logique sur un ou plusieurs éléments ; vraie, elle crée un problème« espace utilisé > 85 % pendant 5 minutes »
MacroUne variable qui remplace un seuil, un identifiant, une adresse{$VFS.FS.PUSED.MAX.WARN} = 80

Les groupes de modèles (template groups) rangent les modèles à part des hôtes. Zabbix 7.0 en fournit plusieurs centaines, dans des groupes comme Templates/Operating systems, Templates/Network devices ou Templates/Applications.

Créer un hôte

Data collection > Hosts, bouton Create host.

ChampValeur pour srv-gestionRemarque
Host namesrv-gestionLe nom technique, unique. En contrôle actif, il doit être identique au Hostname= de l'agent
Visible namesrv-gestion (application de gestion)Le nom affiché, facultatif
TemplatesLinux by Zabbix agentBouton Select, groupe Templates/Operating systems
Host groupsServeurs LinuxTape un nouveau nom pour créer le groupe
InterfacesAdd > Agent : IP 192.168.10.179, port 10050, Connect to IPUne interface par type de collecte
Monitored byServerOu Proxy (prx-mrs pour Marseille), ou Proxy group
EnabledCochéDécoché, l'hôte n'est plus collecté

L'onglet Macros de l'hôte redéfinit les macros de ses modèles ; l'onglet Tags pose des étiquettes (site: lyon, service: gestion) que porteront ses problèmes ; l'onglet Encryption règle le chiffrement avec l'agent (chapitre 6) ; l'onglet Inventory peut se remplir automatiquement à partir des éléments.

Après quelques minutes, la colonne Availability de Data collection > Hosts affiche l'icône ZBX en vert : le serveur joint l'agent. En rouge, survole l'icône : le message dit pourquoi (Get value from agent failed: cannot connect to [[192.168.10.179]:10050]: … Connection refused signifie que l'agent n'écoute pas ou qu'un pare-feu refuse).

Les éléments et leurs clés

Un élément est défini par son type (qui collecte et comment, voir le chapitre 3) et sa clé, qui dit quoi mesurer. Une clé a la forme nom[paramètre1,paramètre2,…].

CléCe qu'elle mesureUnité
agent.pingL'agent répond (toujours 1 s'il répond)—
system.cpu.utilUtilisation du processeur, tous cœurs confondus%
system.cpu.load[all,avg5]Charge moyenne sur 5 minutes (Linux)—
vm.memory.size[available]Mémoire disponibleoctets
vfs.fs.size[/,pused]Espace utilisé du système de fichiers /%
vfs.fs.size[C:,free]Espace libre du volume C: (Windows)octets
net.if.in["ens18"]Trafic entrant de l'interface ens18octets/s après prétraitement
proc.num[nginx]Nombre de processus nginx—
service.info[DNS]État du service Windows DNS0 = en marche
net.tcp.service[https,,443]Le port 443 répond en HTTPS1 ou 0
system.uptimeDurée de fonctionnementsecondes
log[/var/log/gestion/app.log,ERROR]Nouvelles lignes du journal contenant ERROR (contrôle actif)texte

Crée un élément à la main sur l'hôte (Data collection > Hosts, colonne Items de la ligne, bouton Create item) :

ChampExemple
NameProcessus nginx
TypeZabbix agent
Keyproc.num[nginx] (le bouton Select liste les clés connues)
Type of informationNumeric (unsigned)
Update interval1m
History / Trends31d / 365d, par exemple
Tagscomponent: application

Le bouton Test de l'écran interroge l'agent et affiche la valeur tout de suite : fais-le avant d'enregistrer. Les valeurs collectées apparaissent dans Monitoring > Latest data, filtré sur l'hôte, avec un lien vers le graphique de chaque élément.

Le prétraitement (onglet Preprocessing) transforme la valeur avant de la stocker. Les étapes les plus utiles :

ÉtapeEffetExemple
Change per secondTransforme un compteur cumulatif en débitOctets reçus par une interface → octets par seconde
Custom multiplierMultiplie par une constante× 8 pour passer des octets aux bits
JSONPathExtrait un champ d'une réponse JSON$.status d'une API
Regular expressionExtrait une partie d'un texteLe numéro de version d'une bannière
Discard unchanged with heartbeatN'enregistre une valeur identique qu'une fois par périodeUne version de logiciel, une fois par jour

Les déclencheurs

Un déclencheur est une expression sur les valeurs d'un ou plusieurs éléments. Quand elle devient vraie, Zabbix crée un événement problème ; quand elle redevient fausse, un événement de rétablissement (OK). La syntaxe de Zabbix 7.0 est :

text
fonction(/hôte/clé,paramètres) opérateur constante

Quelques exemples sur srv-gestion :

text
last(/srv-gestion/proc.num[nginx])=0
min(/srv-gestion/system.cpu.util,5m)>90
min(/srv-gestion/vfs.fs.size[/,pused],5m)>85
nodata(/srv-gestion/agent.ping,5m)=1
avg(/srv-gestion/system.cpu.util,1h)>2*avg(/srv-gestion/system.cpu.util,1h:now-1w)
  1. Plus aucun processus nginx à la dernière mesure.
  2. Le processeur est au-dessus de 90 % pendant 5 minutes sans interruption (la plus petite valeur des 5 dernières minutes dépasse 90).
  3. Le disque / est rempli à plus de 85 % depuis 5 minutes.
  4. Aucune valeur de agent.ping reçue depuis 5 minutes : l'agent, la machine ou le réseau ne répond plus.
  5. La charge moyenne de la dernière heure vaut plus du double de celle de la même heure, la semaine dernière (décalage now-1w).

Les fonctions à connaître :

FonctionRenvoieUsage typique
last(/h/k)La dernière valeur (last(/h/k,#2) : l'avant-dernière)État d'un service, valeur instantanée
min(/h/k,5m) / max(/h/k,5m)Le minimum / le maximum sur la période« Au-dessus de X pendant 5 minutes » : min(…)>X ; « en dessous de Y pendant 5 minutes » : max(…)<Y
avg(/h/k,15m)La moyenne sur la périodeCharge, temps de réponse
count(/h/k,10m,"eq","0")Le nombre de valeurs qui respectent la condition« Au moins 3 échecs en 10 minutes »
nodata(/h/k,5m)1 si aucune valeur n'est arrivée pendant la périodeAgent ou trapper muet
change(/h/k)La différence entre les deux dernières valeursRedémarrage, version qui change
find(/h/k,,"like","error")1 si la dernière valeur contient le texteJournaux, bannières
fuzzytime(/h/k,60)0 si l'horloge de l'hôte s'écarte de plus de 60 s de celle du serveurHeure désynchronisée
timeleft(/h/k,1d,100)Temps estimé avant que la valeur atteigne 100, d'après la tendance du dernier jourDisque qui sera plein dans moins d'une semaine

On combine avec and, or, not et les parenthèses. Les suffixes de temps sont s, m, h, d, w ; les suffixes d'unité K, M, G, T (en puissances de 1 024) :

text
last(/srv-fichiers/vfs.fs.size[D:,free])<20G and last(/srv-fichiers/vfs.fs.size[D:,pfree])<10

« Moins de 20 Gio libres et moins de 10 % libres sur D: » : la double condition évite d'alerter sur un petit volume presque plein mais suffisant, ou sur un énorme volume à 91 % qui a encore 2 To devant lui.

Gravité, nom et données d'un déclencheur

Crée un déclencheur dans l'onglet Triggers de l'hôte (ou du modèle), bouton Create trigger.

ChampRôle
NameLe titre du problème, avec des macros : Disque / de {HOST.NAME} rempli à plus de 85 %
Operational dataLa valeur affichée à côté du problème : {ITEM.LASTVALUE1}
SeverityLa gravité, de Not classified à Disaster
ExpressionLa condition de problème
OK event generationExpression (le problème se résout quand l'expression redevient fausse), Recovery expression (une condition de retour distincte), None (seule une intervention humaine le ferme)
PROBLEM event generation modeSingle (un problème tant que la condition dure) ou Multiple (un nouveau problème à chaque valeur qui la vérifie, utile pour les journaux)
Allow manual closeAutorise un technicien à fermer le problème à la main
Tagsscope: capacity, service: gestion : servent aux actions, aux SLA et aux filtres
Dependencies (onglet)Le déclencheur est muet si un autre, dont il dépend, est actif (chapitre 9)

Les six gravités et leur usage chez Sorbier :

GravitéCouleurUsageExemple
Not classifiedGrisÀ éviter—
InformationBleu clairPour mémoire, aucune actionUn serveur a redémarré pendant la maintenance
WarningJauneÀ traiter dans la journéeDisque à 80 %, certificat qui expire dans 30 jours
AverageOrangeÀ traiter rapidement, heures ouvréesDisque à 90 %, perte d'un lien redondé
HighRouge clairIntervention immédiateService DNS arrêté, site public injoignable
DisasterRougeTout le monde, astreinte comprisePare-feu injoignable, tout le siège coupé

Éviter le battement : l'expression de rétablissement

Un disque qui oscille autour de 85 % (84,9, 85,1, 84,8…) ouvre et ferme un problème à chaque mesure : on dit que l'alerte bat (flapping). La parade est une hystérésis : une condition de problème et une condition de retour différentes.

text
Expression :          min(/srv-gestion/vfs.fs.size[/,pused],5m)>85
Recovery expression : max(/srv-gestion/vfs.fs.size[/,pused],10m)<80

Le problème s'ouvre au-dessus de 85 % pendant 5 minutes, et ne se ferme que lorsque l'occupation est restée sous 80 % pendant 10 minutes. Entre 80 et 85, rien ne change.

Occupation du volume racine (/)90 %70 %temps →85 % : alerte80 % : retourouvertrésolu10 min sous 80 %un seul problème, une seule alerte83 % : reste ouvert
Avec un seuil de retour plus bas que le seuil d'alerte, une valeur qui oscille ne produit qu'une alerte

Les modèles officiels font de même avec leurs macros : le déclencheur d'heure désynchronisée de Linux by Zabbix agent s'ouvre au-delà de 60 secondes d'écart ({$SYSTEM.FUZZYTIME.MAX}) et ne se ferme qu'en dessous de 10 secondes ({$SYSTEM.FUZZYTIME.MIN}).

Les modèles et leurs macros

Un modèle évite de recréer les mêmes éléments sur chaque hôte. Le modèle officiel Linux by Zabbix agent apporte d'un coup la charge, la mémoire, l'espace de chaque système de fichiers, le trafic de chaque interface, l'heure, le nombre de processus et une vingtaine de déclencheurs, par exemple :

Déclencheur du modèle (version 7.0)ExpressionGravité
Linux: High CPU utilizationmin(/Linux by Zabbix agent/system.cpu.util,5m)>{$CPU.UTIL.CRIT}Warning
Linux: FS [{#FSNAME}]: Space is lowmin(…/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}Warning
Linux: FS [{#FSNAME}]: Space is critically lowMême forme avec {$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}Average
Linux: Zabbix agent is not availablemax(…/zabbix[host,agent,available],{$AGENT.TIMEOUT})=0Average
Linux: {HOST.NAME} has been restartedlast(…/system.uptime)<10mWarning

Les seuils sont des macros, avec une valeur par défaut dans le modèle : {$CPU.UTIL.CRIT} = 90, {$VFS.FS.PUSED.MAX.WARN} = 80, {$VFS.FS.PUSED.MAX.CRIT} = 90, {$AGENT.TIMEOUT} = 3m. Pour changer un seuil, ne modifie pas le modèle : redéfinis la macro sur l'hôte (onglet Macros, bouton Inherited and host macros pour voir la valeur héritée). Ta modification survit aux mises à jour du modèle et ne touche qu'un hôte.

Une macro peut avoir un contexte : {$VFS.FS.PUSED.MAX.WARN:"/var/lib/mysql"} = 85 ne s'applique qu'au système de fichiers /var/lib/mysql, les autres gardent 80. Les macros se définissent à trois niveaux, du plus général au plus précis : globales (Administration > Macros), du modèle, de l'hôte. La plus précise l'emporte. Une macro peut être de type Secret text : sa valeur (un mot de passe SNMP, un jeton d'API) n'est plus affichée dans l'interface.

La découverte de bas niveau (LLD)

Combien de systèmes de fichiers sur srv-fichiers ? Combien de ports sur SW-ETAGE1 ? Tu ne veux pas créer à la main un élément par disque et par port. La découverte de bas niveau (Low-Level Discovery, LLD) s'en charge.

  1. Une règle de découverte interroge l'hôte à intervalle régulier : la clé vfs.fs.discovery renvoie la liste des systèmes de fichiers, net.if.discovery celle des interfaces, service.discovery celle des services Windows, et pour un switch une requête SNMP sur la table des interfaces.
  2. Chaque entrée de la liste porte des macros LLD : {#FSNAME} (/, /var/lib/mysql), {#FSTYPE} (ext4), {#IFNAME}.
  3. Des prototypes d'éléments, de déclencheurs et de graphiques utilisent ces macros : vfs.fs.dependent.size[{#FSNAME},pused]. Zabbix crée un élément réel par entrée découverte.
  4. Des filtres écartent ce qui n'intéresse pas : les systèmes de fichiers temporaires (tmpfs), les interfaces virtuelles. Les modèles officiels règlent ces filtres par des macros comme {$VFS.FS.FSTYPE.MATCHES} ou {$NET.IF.IFNAME.NOT_MATCHES}.
  5. Quand un disque disparaît, ses éléments sont marqués « plus découverts » puis supprimés après un délai.

C'est grâce à la LLD qu'un simple lien vers Linux by Zabbix agent suffit pour superviser tous les disques d'un serveur, y compris celui que tu ajouteras l'an prochain.

Exercices

Exercice 1 sur 3 Écrire des expressions de déclencheur Réussi À revoir

Écris l'expression de chaque déclencheur pour l'hôte indiqué.

  1. srv-ad : le service Windows DNS n'est pas en marche (service.info[DNS] vaut 0 quand il tourne).
  2. srv-journaux : la mémoire disponible (vm.memory.size[available]) reste sous 200 Mio pendant 10 minutes.
  3. srv-web : aucune valeur de agent.ping (agent actif) depuis 3 minutes.
  4. srv-gestion : la moyenne de system.cpu.util sur 15 minutes dépasse 80 % et la charge system.cpu.load[all,avg15] dépasse 4.
  5. srv-fichiers : le volume D: (vfs.fs.size[D:,pused]) sera plein, d'après sa tendance des 7 derniers jours, dans moins de 5 jours.
Voir la réponseMasquer la réponse de l'exercice 1
  1. last(/srv-ad/service.info[DNS])<>0. On teste « différent de 0 » plutôt que « égal à 6 » (arrêté) : la valeur peut aussi valoir 1 (en pause), 7 (inconnu) ou 255 (service absent), qui sont tous des problèmes.
  2. max(/srv-journaux/vm.memory.size[available],10m)<200M. La plus grande valeur des 10 minutes est sous le seuil, donc toutes l'étaient.
  3. nodata(/srv-web/agent.ping,3m)=1. Pour un agent actif, nodata est le bon outil : le serveur ne peut pas interroger un agent actif, il constate seulement qu'il n'envoie plus rien.
  4. avg(/srv-gestion/system.cpu.util,15m)>80 and last(/srv-gestion/system.cpu.load[all,avg15])>4.
  5. timeleft(/srv-fichiers/vfs.fs.size[D:,pused],7d,100)<5d. La fonction renvoie le temps estimé (en secondes) pour que la valeur atteigne 100 ; on le compare à 5 jours.

Tu avais trouvé ?

Exercice 2 sur 3 Lire un déclencheur Réussi À revoir

Explique en français ce que fait chaque expression, et dis si elle est bien écrite.

  1. last(/srv-fichiers/vfs.fs.size[C:,pused])>90
  2. min(/SW-ETAGE1/icmppingloss,5m)>20
  3. count(/srv-gestion/web.test.fail[Gestion],10m,"gt","0")>=3
  4. max(/srv-ad2/system.cpu.util,5m)>95
Voir la réponseMasquer la réponse de l'exercice 2
  1. Le volume C: est occupé à plus de 90 % à la dernière mesure. Correcte, mais sensible au moindre pic (un fichier temporaire de passage) : min(…,5m)>90 est plus robuste, et une expression de rétablissement plus basse (<85) évite le battement.
  2. Le switch perd plus de 20 % des pings pendant 5 minutes sans interruption. Bien écrite : elle signale un lien dégradé, pas une perte ponctuelle.
  3. Le scénario web Gestion a échoué au moins 3 fois en 10 minutes. Bien écrite : elle tolère un échec isolé (un délai réseau) mais alerte sur des échecs répétés. Avec un test chaque minute, l'alerte part au plus tôt au troisième échec.
  4. Le processeur a dépassé 95 % au moins une fois en 5 minutes : la plus grande valeur est au-dessus du seuil, il suffit d'un pic. C'est presque toujours une erreur : pour une surcharge durable, il faut min(…,5m)>95.

Tu avais trouvé ?

Exercice 3 sur 3 Macros et contexte Réussi À revoir

srv-gestion est lié à Linux by Zabbix agent ({$VFS.FS.PUSED.MAX.WARN} = 80, {$VFS.FS.PUSED.MAX.CRIT} = 90). Son volume /var/lib/mysql grossit régulièrement et doit alerter plus tôt, en avertissement dès 70 % et en critique dès 85 %. Le volume /boot, petit et stable, ne doit alerter qu'au-delà de 95 %.

  1. Quelles macros crées-tu, et à quel niveau ?
  2. Pourquoi ne pas modifier les valeurs dans le modèle ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. Sur l'hôte srv-gestion, onglet Macros :
    • {$VFS.FS.PUSED.MAX.WARN:"/var/lib/mysql"} = 70 ;
    • {$VFS.FS.PUSED.MAX.CRIT:"/var/lib/mysql"} = 85 ;
    • {$VFS.FS.PUSED.MAX.WARN:"/boot"} = 95 ;
    • {$VFS.FS.PUSED.MAX.CRIT:"/boot"} = 98 (le seuil critique doit rester au-dessus de l'avertissement).
    Les autres volumes gardent les valeurs du modèle.
  2. Le modèle est partagé par tous les serveurs Linux : le modifier changerait les seuils partout. Et une mise à jour du modèle officiel écraserait tes modifications, alors que les macros de l'hôte sont conservées.

Tu avais trouvé ?

Chapitre terminé !

Fais les 3 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Superviser Linux et Windows Server avec l'agent 2Revoir le sommaire du cours