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.getjako 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ęconfiglub 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.