14 Odkrywanie urządzeń blokowych
Przegląd
Możliwe jest wykrywanie urządzeń blokowych i ich właściwości:
- nazwa i typ urządzenia blokowego
- identyfikatory urządzenia oraz właściwości, takie jak ścieżka, model, numer seryjny, WWN i rozmiary bloków
- informacje o partycjach
- statystyki urządzenia blokowego
Aby to zrobić, można użyć kombinacji:
- pozycji
vfs.dev.getjako pozycji nadrzędnej - zależnej reguły niskopoziomowego wykrywania
- zależnych prototypów pozycji
Konfiguracja
Pozycja nadrzędna
Utwórz pozycję agenta Zabbix, używając następującego klucza:
vfs.dev.get[device_stats,.*]

Ustaw typ informacji na Text dla potencjalnie dużych danych JSON.
Historia może być wyłączona dla tej pozycji, ponieważ jest ona używana wyłącznie jako pozycja nadrzędna.
Można skonfigurować stosunkowo krótki interwał aktualizacji, na przykład 1m, aby często pobierać dane.
Dane zwracane przez tę pozycję będą zawierać na przykład następujące informacje dla urządzenia blokowego:
{
"config": [
{
"name": "sda",
"devid": "ata-ST1000LM024_HN-M101MBB_S2R8NX0J123456",
"type": "disk",
"size_bytes": 1000204886016
},
{
"name": "sda1",
"devid": "ata-ST1000LM024_HN-M101MBB_S2R8NX0J123456-part1",
"type": "partition",
"size_bytes": 536870912
}
],
"values": [
{
"name": "sda",
"stats": {
"reads_completed": 1284,
"writes_completed": 312,
"bytes_read": 104857600,
"bytes_written": 16777216,
"io_time_ms": 204
}
},
{
"name": "sda1",
"stats": {
"reads_completed": 12,
"writes_completed": 3,
"bytes_read": 1048576,
"bytes_written": 262144,
"io_time_ms": 8
}
}
]
}
Tablica config zawiera inwentarz i metadane urządzeń blokowych, które zwykle zmieniają się rzadko.
Tablica values zawiera statystyki urządzeń blokowych, które są aktualizowane przy każdym odpytywaniu.
Zależna reguła LLD
Utwórz regułę wykrywania niskiego poziomu jako typ Dependent item:

Jako pozycję nadrzędną wybierz pozycję vfs.dev.get, którą utworzyliśmy.
Na karcie Preprocessing dodaj krok JSONPath z parametrem $.config.
Aby uniknąć niepotrzebnego wykonywania LLD, dodaj krok Discard unchanged with heartbeat z odpowiednio dużym heartbeat, na przykład 1h.
Dzięki temu pozycja nadrzędna może być odpytywana 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 niestandardowe makra z odpowiednim JSONPath.
Na przykład, podczas używania vfs.dev.get[device_stats,.*], można zastosować następujące wyrażenia JSONPath:
{#DEVNAME} - $.name

Na karcie Filters możesz dodać wyrażenie regularne, które będzie filtrować tylko urządzenia dyskowe.

Prototyp pozycja zależnej
Utwórz prototyp pozycji typu Dependent item w tej regule LLD.
Jako pozycję nadrzędną dla tych prototypów wybierz pozycję vfs.dev.get, którą utworzyliśmy.

Zwróć uwagę na użycie niestandardowych makr w nazwie i kluczu prototypu pozycji. Klucz w tym przykładzie jest niestandardowy i zdefiniowany przez użytkownika.
- Name: Rozmiar urządzenia blokowego
{#DEVNAME} - Key:
dev.block.size[{#DEVNAME}]
Jako typ informacji użyj Numeric (unsigned).
W zakładce Preprocessing prototypu pozycji wybierz JSONPath i użyj następującego wyrażenia JSONPath jako parametru:
$.config[?(@.name=='{#DEVNAME}')].size_bytes.first()

Dodatkowe prototypy pozycji można utworzyć w ten sam sposób, na przykład:
- Name: Odczytane bajty dla
{#DEVNAME} - Key:
dev.block.read_bytes[{#DEVNAME}] - Preprocessing: JSONPath
$.values[?(@.name=='{#DEVNAME}')].stats.bytes_read.first() - Name: Czas I/O dla
{#DEVNAME} - Key:
dev.block.io_time_ms[{#DEVNAME}] - Preprocessing: JSONPath
$.values[?(@.name=='{#DEVNAME}')].stats.io_time_ms.first()
Po rozpoczęciu wykrywania dla każdego urządzenia blokowego zostanie utworzona jedna pozycja.