2 Erkennung von Netzwerkinterfaces

Es ist möglich, Netzwerkinterfaces und ihre Eigenschaften zu erkennen:

  • Interface-Name
  • Interface-Alias
  • MAC-Adresse des Interfaces
  • Interface-Typ
  • die Verbindungsgeschwindigkeit
  • den letzten oder aktuellen Duplex-Wert des Interfaces
  • konfigurierte und RFC2863-Betriebszustände
  • Vorhandensein einer physischen Verbindung
  • Anzahl der Male, die die Verbindung hoch- oder heruntergegangen ist, sowie die Gesamtzahl der Änderungen des Verbindungszustands
  • eingehender und ausgehender Datenverkehr

Dazu können Sie eine Kombination aus Folgendem verwenden:

  • dem net.if.get Agent-Datenpunkt als Master-Datenpunkt
  • einer abhängigen Low-Level-Discovery-Regel
  • abhängigen Datenpunktvorlagen

Konfiguration

Master item

Erstellen Sie einen Zabbix Agent-Datenpunkt mit dem folgenden Schlüssel:

net.if.get[enp.*]

Setzen Sie Art der Information auf Text für möglicherweise große JSON-Daten.

Der Verlauf kann auf Nicht speichern gesetzt werden, da er nur als Master item verwendet wird. Ein relativ kurzes Aktualisierungsintervall, z. B. 1m, kann konfiguriert werden, um eine häufige Abfrage der Daten sicherzustellen.

Der Datenpunkt ermittelt Netzwerkinterfaces, deren Namen mit enp.* übereinstimmen, und gibt deren Konfiguration und Statistiken zurück.

Die von diesem Datenpunkt zurückgegebenen Daten enthalten für Netzwerkinterfaces Informationen ähnlich den folgenden:

{
  "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
      }
    }
  ]
}
Abhängige LLD-Regel

Erstellen Sie eine Low-Level-Discovery-Regel als Typ Abhängiges Element:

Wählen Sie als Master-Element das erstellte Element net.if.get aus.

Fügen Sie auf der Registerkarte Vorverarbeitung Folgendes hinzu:

  • Einen Schritt JSONPath mit dem Parameter $.config.
  • Einen Schritt Unverändert verwerfen mit Heartbeat mit einem ausreichend großen Heartbeat, zum Beispiel 1h, um unnötige LLD-Ausführungen zu vermeiden. Dadurch kann das Master-Element häufig abgefragt werden, während die Low-Level-Discovery nur ausgeführt wird, wenn sich config ändert oder wenn der Heartbeat-Zeitraum abläuft.

Definieren Sie auf der Registerkarte LLD-Makros benutzerdefinierte Makros mit den entsprechenden JSONPath-Ausdrücken.

Wenn Sie beispielsweise net.if.get[enp.*] verwenden, können die folgenden JSONPath-Ausdrücke genutzt werden:

{#IFNAME} - $.name

Abhängigkeits-Datenpunktvorlage

Erstellen Sie im LLD-Regelwerk eine Datenpunktvorlage vom Typ Abhängiger Datenpunkt. Wählen Sie den erstellten net.if.get-Datenpunkt als Master-Datenpunkt für diese Vorlage aus.

Beachten Sie die Verwendung benutzerdefinierter Makros im Namen und Schlüssel der Datenpunktvorlage. In diesem Beispiel ist der Schlüssel benutzerdefiniert und vom Benutzer definiert.

  • Name: Schnittstelle {#IFNAME}: Betriebszustand
  • Schlüssel: net.if.oper.state[{#IFNAME}]

Verwenden Sie als Informationstyp Text.

Wählen Sie im Tab Vorverarbeitung der Datenpunktvorlage JSONPath aus und verwenden Sie den folgenden JSONPath-Ausdruck als Parameter:

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

Zusätzliche Datenpunktvorlagen können auf die gleiche Weise erstellt werden, zum Beispiel:

  • Name: Schnittstelle {#IFNAME}: Carrier-Änderungen
  • Schlüssel: net.if.carrier.changes[{#IFNAME}]
  • Vorverarbeitung: JSONPath - $.values[?(@.name=='{#IFNAME}')].carrier_changes.first()
  • Name: Schnittstelle {#IFNAME}: Geschwindigkeit
  • Schlüssel: net.if.speed[{#IFNAME}]
  • Vorverarbeitung: JSONPath - $.config[?(@.name=='{#IFNAME}')].speed.first()

Wenn die Erkennung startet, wird für jede Netzwerkschnittstelle ein Datenpunkt erstellt.