Skip to content

Sondes Personnalisées

Auteur : [‘Gautier RAYEROUX’] | Date : 2026-04-08 14:01:00

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.

Serveur Zabbix ──(requête clé)──► Agent Zabbix ──► Exécute commande/script ──► Retourne valeur
  1. Le serveur Zabbix demande la valeur d’un item identifié par une clé
  2. L’agent reconnaît la clé car elle est déclarée dans sa configuration
  3. L’agent exécute la commande associée
  4. La valeur (texte, entier, flottant) est renvoyée au serveur

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émentDescription
ma.cleNom de la clé utilisé dans l’interface Zabbix
[*]Paramètres optionnels passables depuis l’item
$1, $2Arguments reçus depuis l’item Zabbix
Type ZabbixDescriptionExemple
Numeric (unsigned)Entier positif42
Numeric (float)Décimal38.5
CharacterChaîne courte (≤255 chars)OK
TextTexte longLogs
  1. Écrire le script ou la commande
  2. Déclarer le UserParameter dans la config de l’agent
  3. Redémarrer l’agent : systemctl restart zabbix-agent2
  4. Tester localement : zabbix_agent2 -t ma.cle
  5. Créer l’item dans l’interface Zabbix (Configuration > Hôtes > Items)
  6. Optionnel : créer un trigger et/ou un graphique

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.

  • OpenHardwareMonitor installé et lancé en tant que service (ou au démarrage)
  • PowerShell disponible sur la machine Windows

Créer C:\zabbix\scripts\cpu_temp.ps1 :

Terminal window
$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.Value
Write-Host ([math]::Round($charge, 1).ToString([System.Globalization.CultureInfo]::InvariantCulture))

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"
Terminal window
& "C:\Program Files\Zabbix Agent 2\zabbix_agent2.exe" -t cpu.temperature.ohm

Ré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.

Terminal window
apt install lm-sensors -y
sensors-detect --auto

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 :

Terminal window
chmod +x /etc/zabbix/scripts/cpu_temp.sh
chown zabbix:zabbix /etc/zabbix/scripts/cpu_temp.sh

Dans /etc/zabbix/zabbix_agent2.d/cpu_temp.conf :

UserParameter=cpu.temperature,/etc/zabbix/scripts/cpu_temp.sh
Terminal window
systemctl restart zabbix-agent2
zabbix_agent2 -t cpu.temperature

Résultat attendu :

cpu.temperature [s|49.0]
ChampValeur
NomTempérature CPU
TypeZabbix agent
Clécpu.temperature
Type d’informationNumeric (float)
Unités°C
Intervalle de mise à jour60s
last(/Nom_hôte/cpu.temperature) > 80

Gravité : 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”

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éprocesseur Change per second
  • UserParameter personnalisé : lire directement /proc/net/dev ou ip -s link

Approche recommandée — Clés natives + préprocesseur

Section titled “Approche recommandée — Clés natives + préprocesseur”

Item 1 — Octets reçus (brut)

ChampValeur
Nometh0 - Octets reçus (compteur)
Clénet.if.in[eth0,bytes]
Type d’informationNumeric (unsigned)
UnitésB
Intervalle30s
PréprocesseurChange per second → résultat en B/s

Item 2 — Octets envoyés (brut)

ChampValeur
Nometh0 - Octets envoyés (compteur)
Clénet.if.out[eth0,bytes]
Type d’informationNumeric (unsigned)
UnitésB
Intervalle30s
PréprocesseurChange per second → résultat en B/s
last(/Nom_hôte/net.if.in[eth0,bytes]) > 900000000

Gravité : 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).

Créer /etc/zabbix/scripts/net_bw.sh :

#!/bin/bash
# Usage: net_bw.sh <interface> <direction>
# direction: in | out
IFACE="$1"
DIR="$2"
if [ "$DIR" = "in" ]; then
COL=2 # colonne bytes reçus dans /proc/net/dev
else
COL=10 # colonne bytes envoyés
fi
BYTES1=$(awk "/$IFACE:/{print \$$COL}" /proc/net/dev)
sleep 1
BYTES2=$(awk "/$IFACE:/{print \$$COL}" /proc/net/dev)
BPS=$(( (BYTES2 - BYTES1) * 8 ))
echo $BPS

Rendre exécutable :

Terminal window
chmod +x /etc/zabbix/scripts/net_bw.sh
chown zabbix:zabbix /etc/zabbix/scripts/net_bw.sh

Dans /etc/zabbix/zabbix_agent2.d/net_bw.conf :

UserParameter=net.bw[*],/etc/zabbix/scripts/net_bw.sh "$1" "$2"
Terminal window
zabbix_agent2 -t "net.bw[eth0,in]"
zabbix_agent2 -t "net.bw[eth0,out]"
ChampDébit entrantDébit sortant
Nometh0 - Débit entranteth0 - Débit sortant
Clénet.bw[eth0,in]net.bw[eth0,out]
Type d’informationNumeric (unsigned)Numeric (unsigned)
Unitésbpsbps
Intervalle60s60s

Terminal window
# Tester un UserParameter depuis la machine agent
zabbix_agent2 -t "ma.cle[param1,param2]"
# Vérifier la configuration de l'agent (syntaxe)
zabbix_agent2 -T
# Voir les logs de l'agent
journalctl -u zabbix-agent2 -f
# Lister les interfaces réseau et leurs compteurs
cat /proc/net/dev
# Lister les capteurs de température
sensors