4 Découverte des OID SNMP

Aperçu

Dans cette section, nous allons effectuer une découverte de bas niveau sur un périphérique SNMP.

Cette méthode de découverte des OID SNMP est prise en charge depuis Zabbix server/proxy 6.4.

Exemple de configuration

1. Créez un élément d'agent SNMP avec une clé telle que :

walk[.1.3.6.1.4.1.9999.1.1.1.1]

Cet élément effectue un seul parcours de table SNMP et renvoie toutes les entrées de la table en une seule requête, dans un format correspondant à la sortie de l'utilitaire snmpwalk avec les options de formatage -Oe -Ot -On.

Il renverra la valeur de texte multiligne suivante :

.1.3.6.1.4.1.9999.1.1.1.1.1.1 = STRING: "Temperature Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.1 = STRING: "temp"
.1.3.6.1.4.1.9999.1.1.1.1.3.1 = 100
.1.3.6.1.4.1.9999.1.1.1.1.1.2 = STRING: "Humidity Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.2 = STRING: "humidity"
.1.3.6.1.4.1.9999.1.1.1.1.3.2 = 200

2. Créez une règle de découverte :

  • Dans le champ Name, saisissez un nom descriptif pour la règle de découverte (par exemple, "Découvrir les capteurs").
  • Dans le champ Type, sélectionnez "Dependent item".
  • Dans le champ Key, saisissez une clé descriptive (par exemple, "net.if.discovery").
  • Dans le champ Master item, sélectionnez "SNMP walk item".

3. Dans l'onglet Preprocessing, ajoutez une étape de prétraitement avec "SNMP walk to JSON" dans la liste déroulante Name avec 3 paramètres :

  • Field name : "{#SENSORNAME}" ; OID prefix : ".1.3.6.1.4.1.9999.1.1.1.1.1" : Format : "Unchanged".
  • Field name : "{#SENSORTYPE}" ; OID prefix : ".1.3.6.1.4.1.9999.1.1.1.1.2" : Format : "Unchanged".
  • Field name : "{#SENSORVALUE}" ; OID prefix : ".1.3.6.1.4.1.9999.1.1.1.1.3" : Format : "Unchanged".

Après le prétraitement, la règle de découverte renvoie un tableau JSON d'ensembles de macros.

Par exemple :

[
    {
        "{#SNMPINDEX}": "1",
        "{#SENSORNAME}": "Temperature Sensor",
        "{#SENSORTYPE}": "temp",
        "{#SENSORVALUE}": "100"
    },
    {
        "{#SNMPINDEX}": "2",
        "{#SENSORNAME}": "Humidity Sensor",
        "{#SENSORTYPE}": "humidity",
        "{#SENSORVALUE}": "200"
    }
]

Chaque objet représente un capteur découvert et fournit des macros telles que {#SNMPINDEX}, {#SENSORNAME}, {#SENSORTYPE} et {#SENSORVALUE}.

Elles sont regroupées par l'index SNMP, qui est le suffixe numérique à la fin de chaque OID (par exemple, .1, .2) — cet index identifie de manière unique chaque ligne de la table SNMP et est automatiquement extrait sous la forme {#SNMPINDEX}.

4. Sous la règle de découverte, créez un ou plusieurs prototypes d'élément (avec la règle de découverte comme élément maître).

Par exemple, un élément dépendant pour la valeur du capteur :

  • Dans le champ Name, saisissez "Sensor {#SNMPINDEX}: {#SENSORNAME}".
  • Dans le champ Type, sélectionnez "Dependent item".
  • Dans le champ Key, saisissez "sensor.value[{#SNMPINDEX}]".
  • Dans le champ Master item, sélectionnez "SNMP walk item".

Dans l'onglet Preprocessing, ajoutez une étape de prétraitement avec le nom "SNMP walk value" et l'OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" dans le champ Parameter. Format : "Unchanged".

Les éléments suivants seront découverts :

Name Key OID à partir duquel la valeur est extraite Valeur de l'élément
Sensor 1: Temperature Sensor sensor.value[1] .1.3.6.1.4.1.9999.1.1.1.1.3.1 100
Sensor 2: Humidity Sensor sensor.value[2] .1.3.6.1.4.1.9999.1.1.1.1.3.2 200

Lorsque la règle de découverte s'exécute, des éléments tels que sensor.value[1], sensor.value[2] sont créés.

Chaque élément dépendant extrait sa valeur du résultat du parcours SNMP de l'élément maître à l'aide du prétraitement, sans effectuer lui-même de requêtes SNMP distinctes.

5. Référencez les prototypes d'éléments dépendants dans les prototypes de déclencheur en utilisant les mêmes macros de la règle de découverte. Exemple :

{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75

Cela produit un déclencheur pour chaque capteur découvert (par exemple, sensor.value[1], sensor.value[2]) et se déclenche si la dernière valeur (température ou humidité) dépasse 75.

6. Incluez des éléments dépendants pour chaque entité découverte. Exemple de clé d'élément de graphique :

sensor.value[{#SNMPINDEX}]

Un graphique est créé par {#SNMPINDEX}, traçant la température et l'humidité au fil du temps.

Cette configuration n'effectue qu'une seule requête de parcours SNMP par cycle d'interrogation, quel que soit le nombre d'éléments découverts. Tous les éléments dépendants extraient leurs valeurs du résultat du parcours SNMP maître à l'aide du prétraitement, ce qui réduit considérablement le trafic et la charge SNMP.

Index dynamiques avec walk[]

Les index dynamiques (par exemple, les index d’interface) peuvent changer lorsque le matériel est reconfiguré. Pour prendre en charge ce comportement, une règle de découverte maître SNMP walk est créée avec une clé telle que :

walk[1.3.6.1.2.1.2.2.1.10]

Après le prétraitement SNMP walk vers JSON, le résultat peut ressembler à :

[
    {
        "{#SNMPINDEX}": "2",
        "{#VALUE}": "123456"
    },
    {
        "{#SNMPINDEX}": "3",
        "{#VALUE}": "654321"
    }
]

Un prototype d’élément dépendant utilise la macro {#SNMPINDEX} pour construire la clé :

net.if.in[{#SNMPINDEX}]

Le prétraitement de ce prototype inclut le nom « SNMP walk value » avec l’OID « 1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX} » dans le champ Parameter. Format : « Unchanged ».

Au moment de l’exécution, des éléments réels tels que net.if.in[2] et net.if.in[3] sont créés. Si un index d’interface donné change (par exemple, si l’index 2 est remplacé par 5 dans la table SNMP), alors lors de la prochaine exécution de la règle de découverte :

  • L’ancien élément dépendant net.if.in[2] est marqué comme « perdu » ou supprimé, et aucune nouvelle donnée n’est collectée pour cet élément.
  • Un nouvel élément dépendant net.if.in[5] est créé, en commençant avec un historique vide.
  • Les données historiques de net.if.in[2] ne sont pas automatiquement déplacées vers net.if.in[5].

Exemple de prototype de déclencheur :

{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000

Exemple de prototype de graphique incluant les éléments :

net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]

Cette configuration garantit une surveillance fiable des tables avec des index dynamiques tout en minimisant le trafic SNMP — un seul SNMP walk par cycle d’interrogation est nécessaire, les prototypes d’éléments dépendants extrayant les valeurs requises.

Entités découvertes

Lorsque le serveur est en cours d’exécution, il crée de véritables éléments dépendants, déclencheurs et graphiques en fonction des valeurs renvoyées par la règle de découverte SNMP.