2 Odkrywanie interfejsów sieciowych

Możliwe jest wykrywanie interfejsów sieciowych oraz ich właściwości:

  • nazwa interfejsu
  • alias interfejsu
  • adres MAC interfejsu
  • typ interfejsu
  • prędkość łącza
  • najnowsza lub bieżąca wartość dupleksu interfejsu
  • skonfigurowany stan operacyjny RFC2863
  • obecność fizycznego łącza
  • liczba razy, gdy łącze zostało podniesione lub opuszczone, oraz łączna liczba zmian stanu łącza
  • ruch przychodzący i wychodzący

Aby to zrobić, można użyć kombinacji:

  • pozycji agent net.if.get jako pozycji głównej
  • zależnej reguły niskopoziomowego odkrywania
  • zależnych prototypów pozycji

Konfiguracja

Pozycja master

Utwórz pozycję agenta Zabbix, używając następującego klucza:

net.if.get[enp.*]

Ustaw Typ informacji na Tekst w przypadku potencjalnie dużych danych JSON.

Historię można ustawić na Nie przechowuj, ponieważ jest ona używana tylko jako pozycja master. Można skonfigurować stosunkowo krótki interwał aktualizacji, na przykład 1m, aby zapewnić częste odpytywanie danych.

Pozycja wykrywa interfejsy sieciowe, których nazwy pasują do wzorca enp.*, i zwraca ich konfigurację oraz statystyki.

Dane zwracane przez tę pozycję będą zawierać informacje podobne do poniższych dla interfejsów sieciowych:

{
  "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
      }
    }
  ]
}
Zależna reguła LLD

Utwórz regułę wykrywania niskiego poziomu jako typ Dependent item:

Jako element główny wybierz utworzony element net.if.get.

Na karcie Preprocessing dodaj:

  • krok JSONPath z parametrem $.config.
  • krok Discard unchanged with heartbeat z odpowiednio dużym heartbeat, na przykład 1h, aby uniknąć niepotrzebnego wykonywania LLD. Dzięki temu element główny może być odpytywany często, podczas gdy wykrywanie niskiego poziomu jest uruchamiane tylko wtedy, gdy zmieni się config lub gdy upłynie okres heartbeat.

Na karcie LLD macros zdefiniuj własne makra wraz z odpowiadającymi im wyrażeniami JSONPath.

Na przykład podczas używania net.if.get[enp.*] można zastosować następujące wyrażenia JSONPath:

{#IFNAME} - $.name

Prototyp elementu zależnego

Utwórz prototyp elementu typu Dependent item w regule LLD. Jako element nadrzędny dla tego prototypu wybierz utworzony element net.if.get.

Zwróć uwagę na użycie niestandardowych makr w nazwie i kluczu prototypu elementu. W tym przykładzie klucz jest niestandardowy i zdefiniowany przez użytkownika.

  • Nazwa: Interfejs {#IFNAME}: stan operacyjny
  • Klucz: net.if.oper.state[{#IFNAME}]

Jako typ informacji użyj Text.

W zakładce Preprocessing prototypu elementu wybierz JSONPath i użyj następującego wyrażenia JSONPath jako parametru:

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

Dodatkowe prototypy elementów można utworzyć w ten sam sposób, na przykład:

  • Nazwa: Interfejs {#IFNAME}: zmiany nośnika
  • Klucz: net.if.carrier.changes[{#IFNAME}]
  • Preprocessing: JSONPath - $.values[?(@.name=='{#IFNAME}')].carrier_changes.first()
  • Nazwa: Interfejs {#IFNAME}: prędkość
  • Klucz: net.if.speed[{#IFNAME}]
  • Preprocessing: JSONPath - $.config[?(@.name=='{#IFNAME}')].speed.first()

Po rozpoczęciu wykrywania zostanie utworzony jeden element dla każdego interfejsu sieciowego.