2 Scoperta delle interfacce di rete

È possibile scoprire le interfacce di rete e le loro proprietà:

  • nome dell'interfaccia
  • alias dell'interfaccia
  • indirizzo MAC dell'interfaccia
  • tipo di interfaccia
  • velocità del collegamento
  • ultimo valore o valore corrente del duplex dell'interfaccia
  • stato operativo configurato e RFC2863
  • presenza del collegamento fisico
  • numero di volte in cui il collegamento è passato allo stato up o down e numero totale di volte in cui lo stato del collegamento è cambiato
  • traffico in ingresso e in uscita

Per farlo, è possibile usare una combinazione di:

  • l'elemento net.if.get agent come elemento master
  • una regola di discovery a basso livello dipendente
  • prototipi di item dipendenti

Configurazione

Master item

Crea un item di Zabbix agent usando la seguente chiave:

net.if.get[enp.*]

Imposta Tipo di informazione su Testo per dati JSON potenzialmente di grandi dimensioni.

La cronologia può essere impostata su Non memorizzare poiché viene usato solo come master item. È possibile configurare un intervallo di aggiornamento relativamente breve, ad esempio 1m, per garantire un polling frequente dei dati.

L'item scopre le interfacce di rete i cui nomi corrispondono a enp.* e restituisce la loro configurazione e le statistiche.

I dati restituiti da questo item conterranno informazioni simili alle seguenti per le interfacce di rete:

{
  "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
      }
    }
  ]
}
Regola LLD dipendente

Crea una regola di discovery a basso livello come tipo Dependent item:

Come master item, seleziona l'item net.if.get creato.

Nella scheda Preprocessing, aggiungi:

  • Un passaggio JSONPath con il parametro $.config.
  • Un passaggio Discard unchanged with heartbeat con un heartbeat sufficientemente grande, ad esempio 1h, per evitare esecuzioni LLD non necessarie. Questo consente al master item di essere interrogato frequentemente, mentre il discovery a basso livello viene eseguito solo quando config cambia o quando scade il periodo di heartbeat.

Nella scheda LLD macros, definisci macro personalizzate con le rispettive espressioni JSONPath.

Ad esempio, quando si usa net.if.get[enp.*], è possibile usare le seguenti espressioni JSONPath:

{#IFNAME} - $.name

Prototipo di item dipendente

Crea un prototipo di item di tipo Item dipendente nella regola LLD. Seleziona l'item net.if.get creato come item master per questo prototipo.

Nota l'uso di macro personalizzate nel nome e nella chiave del prototipo di item. In questo esempio, la chiave è personalizzata e definita dall'utente.

  • Nome: Interfaccia {#IFNAME}: stato operativo
  • Chiave: net.if.oper.state[{#IFNAME}]

Come tipo di informazione, usa Testo.

Nella scheda Preprocessing del prototipo di item seleziona JSONPath e usa la seguente espressione JSONPath come parametro:

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

È possibile creare altri prototipi di item nello stesso modo, ad esempio:

  • Nome: Interfaccia {#IFNAME}: cambiamenti del carrier
  • Chiave: net.if.carrier.changes[{#IFNAME}]
  • Preprocessing: JSONPath - $.values[?(@.name=='{#IFNAME}')].carrier_changes.first()
  • Nome: Interfaccia {#IFNAME}: velocità
  • Chiave: net.if.speed[{#IFNAME}]
  • Preprocessing: JSONPath - $.config[?(@.name=='{#IFNAME}')].speed.first()

Quando inizia la discovery, verrà creato un item per ogni interfaccia di rete.