Sondes Personnalisées
Auteur : [‘Gautier RAYEROUX’] | Date : 2026-04-08 14:01:00
Sondes Personnalisées Zabbix
Section titled “Sondes Personnalisées Zabbix”Théorie
Section titled “Théorie”Qu’est-ce qu’une sonde personnalisée ?
Section titled “Qu’est-ce qu’une sonde personnalisée ?”Une sonde personnalisée (ou UserParameter) permet d’étendre les capacités de l’agent Zabbix en définissant ses propres métriques. Là où Zabbix collecte nativement des données système courantes (CPU, RAM, disque…), les UserParameters permettent de collecter n’importe quelle valeur : résultat d’un script, sortie d’une commande, valeur issue d’un outil tiers.
Mécanisme de fonctionnement
Section titled “Mécanisme de fonctionnement”Serveur Zabbix ──(requête clé)──► Agent Zabbix ──► Exécute commande/script ──► Retourne valeur- Le serveur Zabbix demande la valeur d’un item identifié par une clé
- L’agent reconnaît la clé car elle est déclarée dans sa configuration
- L’agent exécute la commande associée
- La valeur (texte, entier, flottant) est renvoyée au serveur
Déclaration d’un UserParameter
Section titled “Déclaration d’un UserParameter”Dans le fichier de configuration de l’agent (/etc/zabbix/zabbix_agent2.conf ou un fichier dans /etc/zabbix/zabbix_agent2.d/), on ajoute :
UserParameter=ma.cle[*],/chemin/vers/script.sh "$1"| Élément | Description |
|---|---|
ma.cle | Nom de la clé utilisé dans l’interface Zabbix |
[*] | Paramètres optionnels passables depuis l’item |
$1, $2… | Arguments reçus depuis l’item Zabbix |
Types de valeurs retournées
Section titled “Types de valeurs retournées”| Type Zabbix | Description | Exemple |
|---|---|---|
Numeric (unsigned) | Entier positif | 42 |
Numeric (float) | Décimal | 38.5 |
Character | Chaîne courte (≤255 chars) | OK |
Text | Texte long | Logs |
Étapes de création complète
Section titled “Étapes de création complète”- Écrire le script ou la commande
- Déclarer le UserParameter dans la config de l’agent
- Redémarrer l’agent :
systemctl restart zabbix-agent2 - Tester localement :
zabbix_agent2 -t ma.cle - Créer l’item dans l’interface Zabbix (Configuration > Hôtes > Items)
- Optionnel : créer un trigger et/ou un graphique
Exemple 1 — Température du CPU
Section titled “Exemple 1 — Température du CPU”Avec OpenHardwareMonitor (Windows)
Section titled “Avec OpenHardwareMonitor (Windows)”OpenHardwareMonitor expose les données matérielles (températures, vitesses de ventilateur, tensions) via WMI, ce qui les rend accessibles sans droits élevés depuis un script.
Prérequis
Section titled “Prérequis”- OpenHardwareMonitor installé et lancé en tant que service (ou au démarrage)
- PowerShell disponible sur la machine Windows
Script PowerShell
Section titled “Script PowerShell”Créer C:\zabbix\scripts\cpu_temp.ps1 :
$sensor = Get-WmiObject -Namespace "root\OpenHardwareMonitor" ` -Class Sensor ` | Where-Object { $_.SensorType -eq "Load" -and $_.Name -like "*CPU*" } ` | Select-Object -First 1
if ($null -eq $sensor) { exit 1 }
$charge = [float]$sensor.ValueWrite-Host ([math]::Round($charge, 1).ToString([System.Globalization.CultureInfo]::InvariantCulture))Déclaration du UserParameter
Section titled “Déclaration du UserParameter”Dans C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf (ou un fichier .conf dans le dossier Include) :
UserParameter=cpu.temperature.ohm,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\zabbix\scripts\cpu_temp.ps1"Test local
Section titled “Test local”& "C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t cpu.temperature.ohmRésultat attendu :
cpu.temperature.ohm [s|52.0]Sans OpenHardwareMonitor (Linux — sensors)
Section titled “Sans OpenHardwareMonitor (Linux — sensors)”Sur Linux, l’outil lm-sensors expose les températures via la commande sensors.
Prérequis
Section titled “Prérequis”apt install lm-sensors -ysensors-detect --autoScript Bash
Section titled “Script Bash”Créer /etc/zabbix/scripts/cpu_temp.sh :
#!/bin/bash# Récupère la température du premier capteur CPU trouvésensors | grep -E "^(Core 0|Tdie|Tccd1|Package)" | head -1 | awk '{print $NF}' | tr -d '+°C'Rendre exécutable :
chmod +x /etc/zabbix/scripts/cpu_temp.shchown zabbix:zabbix /etc/zabbix/scripts/cpu_temp.shDéclaration du UserParameter
Section titled “Déclaration du UserParameter”Dans /etc/zabbix/zabbix_agent2.d/cpu_temp.conf :
UserParameter=cpu.temperature,/etc/zabbix/scripts/cpu_temp.shRedémarrage et test
Section titled “Redémarrage et test”systemctl restart zabbix-agent2zabbix_agent2 -t cpu.temperatureRésultat attendu :
cpu.temperature [s|49.0]Item dans Zabbix
Section titled “Item dans Zabbix”| Champ | Valeur |
|---|---|
| Nom | Température CPU |
| Type | Zabbix agent |
| Clé | cpu.temperature |
| Type d’information | Numeric (float) |
| Unités | °C |
| Intervalle de mise à jour | 60s |
Trigger exemple
Section titled “Trigger exemple”last(/Nom_hôte/cpu.temperature) > 80Gravité : High — Message : Température CPU critique : {ITEM.VALUE}°C
Exemple 2 — Débit réseau d’un port Ethernet
Section titled “Exemple 2 — Débit réseau d’un port Ethernet”Principe
Section titled “Principe”Zabbix possède nativement des clés pour les interfaces réseau, mais celles-ci retournent des compteurs cumulatifs d’octets (toujours croissants). Pour obtenir un débit en bits/s, on utilise deux approches :
- Clé native Zabbix :
net.if.in[eth0]/net.if.out[eth0]+ calculer le delta via un item calculé ou le préprocesseurChange per second - UserParameter personnalisé : lire directement
/proc/net/devouip -s link
Approche recommandée — Clés natives + préprocesseur
Section titled “Approche recommandée — Clés natives + préprocesseur”Items à créer
Section titled “Items à créer”Item 1 — Octets reçus (brut)
| Champ | Valeur |
|---|---|
| Nom | eth0 - Octets reçus (compteur) |
| Clé | net.if.in[eth0,bytes] |
| Type d’information | Numeric (unsigned) |
| Unités | B |
| Intervalle | 30s |
| Préprocesseur | Change per second → résultat en B/s |
Item 2 — Octets envoyés (brut)
| Champ | Valeur |
|---|---|
| Nom | eth0 - Octets envoyés (compteur) |
| Clé | net.if.out[eth0,bytes] |
| Type d’information | Numeric (unsigned) |
| Unités | B |
| Intervalle | 30s |
| Préprocesseur | Change per second → résultat en B/s |
Trigger exemple
Section titled “Trigger exemple”last(/Nom_hôte/net.if.in[eth0,bytes]) > 900000000Gravité : Warning — Message : Débit entrant eth0 > 900 Mbps
Approche alternative — UserParameter via /proc/net/dev
Section titled “Approche alternative — UserParameter via /proc/net/dev”Utile si l’on veut un contrôle total ou des calculs personnalisés (ex. : débit en Mbps arrondi).
Script Bash
Section titled “Script Bash”Créer /etc/zabbix/scripts/net_bw.sh :
#!/bin/bash# Usage: net_bw.sh <interface> <direction># direction: in | outIFACE="$1"DIR="$2"
if [ "$DIR" = "in" ]; then COL=2 # colonne bytes reçus dans /proc/net/develse COL=10 # colonne bytes envoyésfi
BYTES1=$(awk "/$IFACE:/{print \$$COL}" /proc/net/dev)sleep 1BYTES2=$(awk "/$IFACE:/{print \$$COL}" /proc/net/dev)
BPS=$(( (BYTES2 - BYTES1) * 8 ))echo $BPSRendre exécutable :
chmod +x /etc/zabbix/scripts/net_bw.shchown zabbix:zabbix /etc/zabbix/scripts/net_bw.shDéclaration du UserParameter
Section titled “Déclaration du UserParameter”Dans /etc/zabbix/zabbix_agent2.d/net_bw.conf :
UserParameter=net.bw[*],/etc/zabbix/scripts/net_bw.sh "$1" "$2"Test local
Section titled “Test local”zabbix_agent2 -t "net.bw[eth0,in]"zabbix_agent2 -t "net.bw[eth0,out]"Items dans Zabbix
Section titled “Items dans Zabbix”| Champ | Débit entrant | Débit sortant |
|---|---|---|
| Nom | eth0 - Débit entrant | eth0 - Débit sortant |
| Clé | net.bw[eth0,in] | net.bw[eth0,out] |
| Type d’information | Numeric (unsigned) | Numeric (unsigned) |
| Unités | bps | bps |
| Intervalle | 60s | 60s |
Récapitulatif des commandes utiles
Section titled “Récapitulatif des commandes utiles”# Tester un UserParameter depuis la machine agentzabbix_agent2 -t "ma.cle[param1,param2]"
# Vérifier la configuration de l'agent (syntaxe)zabbix_agent2 -T
# Voir les logs de l'agentjournalctl -u zabbix-agent2 -f
# Lister les interfaces réseau et leurs compteurscat /proc/net/dev
# Lister les capteurs de températuresensors