2 Découverte des interfaces réseau

Il est possible de découvrir les interfaces réseau et leurs propriétés :

  • nom de l'interface
  • alias de l'interface
  • adresse MAC de l'interface
  • type d'interface
  • vitesse de liaison
  • dernière valeur duplex de l'interface ou valeur duplex actuelle
  • état opérationnel configuré et RFC2863
  • présence de la liaison physique
  • nombre de fois où la liaison est passée à l'état actif ou inactif, ainsi que le nombre total de fois où l'état de la liaison a changé
  • trafic entrant et sortant

Pour ce faire, vous pouvez utiliser une combinaison de :

  • l'élément agent net.if.get comme élément maître
  • une règle de découverte de bas niveau dépendante
  • des prototypes d'éléments dépendants

Configuration

Élément maître

Créez un élément d'agent Zabbix en utilisant la clé suivante :

net.if.get[enp.*]

Définissez le Type d'information sur Texte pour d'éventuelles données JSON volumineuses.

L'historique peut être défini sur Ne pas stocker, car il est utilisé uniquement comme élément maître. Un intervalle de mise à jour relativement court, tel que 1m, peut être configuré afin d'assurer une interrogation fréquente des données.

L'élément découvre les interfaces réseau dont les noms correspondent à enp.* et renvoie leur configuration et leurs statistiques.

Les données renvoyées par cet élément contiendront des informations similaires aux suivantes pour les interfaces réseau :

{
  "config": [
    {
      "name": "enp0s3",
      "mac": "08:00:27:9a:8f:bb",
      "type": "physical",
      "speed": 1000,
      "duplex": "full",
      "administrative_state": "up",
      "operational_state": "up",
      "carrier": 1
    }
  ],
"values": [
    {
      "name": "enp0s3",
      "mac": "08:00:27:9a:8f:bb",
      "carrier": 1,
      "carrier_changes": 2,
      "carrier_up_count": 1,
      "carrier_down_count": 1,
      "in": {
        "bytes": 98241651,
        "packets": 72754,
        "errors": 0,
        "dropped": 0,
        "overruns": 0,
        "frame": 0,
        "compressed": 0,
        "multicast": 17
      },
    "out": {
        "bytes": 1299650,
        "packets": 11380,
        "errors": 0,
        "dropped": 0,
        "overruns": 0,
        "collisions": 0,
        "carrier": 0,
        "compressed": 0
      }
    }
  ]
}
Règle LLD dépendante

Créez une règle de découverte de bas niveau de type élément dépendant :

Comme élément maître, sélectionnez l'élément net.if.get créé.

Dans l'onglet Prétraitement, ajoutez :

  • Une étape JSONPath avec le paramètre $.config.
  • Une étape Ignorer les valeurs inchangées avec battement de coeur avec un battement de coeur suffisamment long, par exemple 1h, afin d'éviter une exécution inutile de la LLD. Cela permet d'interroger fréquemment l'élément maître, tandis que la découverte de bas niveau n'est exécutée que lorsque config change ou lorsque la période de battement de coeur expire.

Dans l'onglet Macros LLD, définissez des macros personnalisées avec leurs expressions JSONPath correspondantes.

Par exemple, lors de l'utilisation de net.if.get[enp.*], les expressions JSONPath suivantes peuvent être utilisées :

{#IFNAME} - $.name

Prototype d'élément dépendant

Créez un prototype d'élément de type Élément dépendant dans la règle LLD. Sélectionnez l'élément net.if.get créé comme élément maître pour ce prototype.

Notez l'utilisation de macros personnalisées dans le nom et la clé du prototype d'élément. Dans cet exemple, la clé est personnalisée et définie par l'utilisateur.

  • Nom: Interface {#IFNAME}: état opérationnel
  • Clé: net.if.oper.state[{#IFNAME}]

Comme type d'information, utilisez Texte.

Dans l'onglet Prétraitement du prototype d'élément, sélectionnez JSONPath et utilisez l'expression JSONPath suivante comme paramètre:

$.config[?(@.name=='{#IFNAME}')].operational_state.first()

Des prototypes d'éléments supplémentaires peuvent être créés de la même manière, par exemple:

  • Nom: Interface {#IFNAME}: changements de support
  • Clé: net.if.carrier.changes[{#IFNAME}]
  • Prétraitement: JSONPath - $.values[?(@.name=='{#IFNAME}')].carrier_changes.first()
  • Nom: Interface {#IFNAME}: vitesse
  • Clé: net.if.speed[{#IFNAME}]
  • Prétraitement: JSONPath - $.config[?(@.name=='{#IFNAME}')].speed.first()

Lorsque la découverte démarre, un élément par interface réseau sera créé.