2 Pasywne i aktywne kontrole agenta
Przegląd
Ta sekcja zawiera szczegółowe informacje o kontrolach pasywnych i aktywnych wykonywanych przez Zabbix agent i Zabbix agent 2.
Zabbix używa protokołu komunikacyjnego opartego na JSON do komunikacji z agentami.
Protokoły Zabbix agent i Zabbix agent 2 zostały ujednolicone od wersji Zabbix 7.0. Różnica między żądaniami/odpowiedziami Zabbix agent i Zabbix agent 2 jest wyrażona przez wartość znacznika „variant”.
Pasywne sprawdzenia
Pasywne sprawdzenie to proste żądanie danych. Serwer Zabbix lub proxy pyta o pewne dane (na przykład obciążenie CPU), a agent Zabbix odsyła wynik do serwera.
Pasywne sprawdzenia są wykonywane asynchronicznie - nie jest wymagane otrzymanie odpowiedzi na jedno żądanie przed rozpoczęciem innych sprawdzeń. Rozwiązywanie DNS również odbywa się asynchronicznie.
Poller agenta spróbuje połączyć się ze wszystkimi adresami zwróconymi przez wyszukiwanie DNS. Zapewnia to, że jeśli jeden adres IP jest niedostępny, poller spróbuje następnego dostępnego adresu, zwiększając prawdopodobieństwo pomyślnego połączenia. To ulepszenie dotyczy zarówno serwera Zabbix, jak i proxy.
Maksymalna współbieżność asynchronicznych sprawdzeń wynosi 1000 (zdefiniowana przez MaxConcurrentChecksPerPoller).
Liczba asynchronicznych pollerów agenta jest definiowana przez parametr StartAgentPollers.
Żądanie serwera
Definicję nagłówka i długości danych można znaleźć w szczegółach protokołu.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Element sprawdzenia pasywnego. | |
| key | string | yes | Klucz pozycji z rozwiniętymi makrami. | |
| timeout | number | yes | Limit czasu komunikacji. | |
Odpowiedź agenta
{
"version": "7.0.0",
"variant": 2,
"data": [
{
"value": "7.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | Numer wersji agenta. | |
| variant | number | yes | Wariant agenta (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Zawiera wynik sprawdzenia. | |
| value | string | no | Wartość pozycji, jeśli sprawdzenie zakończyło się powodzeniem. | |
| error | string | no | Komunikat błędu, jeśli sprawdzenie nie powiodło się. | |
Na przykład dla obsługiwanych pozycji:
- Serwer otwiera połączenie TCP
- Serwer wysyła <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Agent odczytuje żądanie i odpowiada <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"value":1}]}
- Serwer przetwarza dane, aby uzyskać wartość, w naszym przypadku '1'
- Połączenie TCP zostaje zamknięte
Dla nieobsługiwanych pozycji:
- Serwer otwiera połączenie TCP
- Serwer wysyła <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Agent odczytuje żądanie i odpowiada <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Serwer przetwarza dane, zmienia stan pozycji na nieobsługiwany z określonym komunikatem błędu
- Połączenie TCP zostaje zamknięte
Przełączenie awaryjne na stary protokół
Aby upewnić się, że serwer Zabbix lub proxy może współpracować z agentami z wersji wcześniejszych niż 7.0, które używają protokołu tekstowego, zaimplementowano przełączenie awaryjne na stary protokół.
Sprawdzenia pasywne są wykonywane przy użyciu protokołu JSON (7.0 i nowsze) po ponownym uruchomieniu lub po zmianie konfiguracji interfejsu.
Jeśli w odpowiedzi nie zostanie odebrany prawidłowy JSON (agent wysłał "ZBX_NOTSUPPORTED"), Zabbix zapisze interfejs jako używający starego protokołu i ponowi sprawdzenie, wysyłając tylko klucz pozycji.
Należy pamiętać, że co godzinę serwer/proxy Zabbix ponownie spróbuje używać nowego protokołu ze wszystkimi interfejsami, w razie potrzeby przechodząc z powrotem na stary protokół.
Aktywne kontrole
Aktywne kontrole wymagają bardziej złożonego przetwarzania. Agent musi najpierw pobrać z serwera/proxy listę pozycji i/lub zdalnych poleceń do niezależnego przetwarzania.
Serwery/proxy, od których mają być pobierane aktywne kontrole, są wymienione w parametrze 'ServerActive' w pliku konfiguracyjnym agenta. Częstotliwość odpytywania o te kontrole jest ustawiana przez parametr 'RefreshActiveChecks' w tym samym pliku konfiguracyjnym. Jeśli jednak odświeżanie aktywnych kontroli zakończy się niepowodzeniem, ponowna próba następuje po na sztywno ustawionych 60 sekundach.
Od wersji Zabbix 6.4 agent (w trybie aktywnym) nie otrzymuje już od serwera/proxy pełnej kopii konfiguracji co dwie minuty (domyślnie). Zamiast tego, aby zmniejszyć ruch sieciowy i zużycie zasobów, co 5 sekund (domyślnie) wykonywana jest przyrostowa synchronizacja konfiguracji, podczas której serwer/proxy dostarcza pełną kopię konfiguracji tylko wtedy, gdy agent jeszcze jej nie otrzymał lub gdy coś zmieniło się w konfiguracji hosta, makrach globalnych albo globalnych wyrażeniach regularnych.
Agent następnie okresowo wysyła nowe wartości do serwera(ów). Jeśli agent otrzymał jakiekolwiek zdalne polecenia do wykonania, wynik ich wykonania również zostanie wysłany. Należy pamiętać, że wykonywanie zdalnych poleceń na aktywnym agencie jest obsługiwane od Zabbix agent 7.0.
Jeśli agent znajduje się za zaporą sieciową, warto rozważyć używanie wyłącznie aktywnych kontroli, ponieważ w takim przypadku nie trzeba modyfikować zapory, aby zezwolić na początkowe połączenia przychodzące.
Pobieranie listy pozycji
Żądanie agenta
Żądanie aktywnych kontroli służy do pobrania aktywnych kontroli, które mają zostać przetworzone przez agent.
To żądanie jest wysyłane przez agenta po uruchomieniu, a następnie w odstępach RefreshActiveChecks.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "7.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | Nazwa hosta. |
| host_metadata | string | no | Wartość parametru konfiguracyjnego HostMetadata lub metryki HostMetadataItem. |
| interface | string | no | Wartość parametru konfiguracyjnego HostInterface lub metryki HostInterfaceItem. |
| ip | string | no | Pierwszy adres IP parametru konfiguracyjnego ListenIP, jeśli jest ustawiony. |
| port | number | no | Wartość parametru konfiguracyjnego ListenPort, jeśli jest ustawiony i nie jest domyślnym portem nasłuchu agenta. |
| version | string | yes | Numer wersji agenta. |
| variant | number | yes | Wariant agenta (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Identyfikator konfiguracji dla inkrementalnej synchronizacji konfiguracji. |
| session | string | no | Identyfikator sesji dla inkrementalnej synchronizacji konfiguracji. |
Odpowiedź serwera
Odpowiedź aktywnych kontroli jest wysyłana przez serwer z powrotem do agenta po przetworzeniu żądania aktywnych kontroli.
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| info | string | no | Informacje o błędzie w przypadku niepowodzenia. | |
| data | array of objects | no | Pozycje aktywnych kontroli. Pomijane, jeśli konfiguracja hosta nie uległa zmianie. | |
| key | string | no | Klucz pozycji z rozwiniętymi makrami. | |
| itemid | number | no | Identyfikator pozycji. | |
| delay | string | no | Interwał aktualizacji pozycji. Elastyczne/interwały harmonogramu są obsługiwane zarówno przez Zabbix agent, jak i Zabbix agent 2 od Zabbix 7.0. |
|
| lastlogsize | number | no | lastlogsize pozycji. | |
| mtime | number | no | mtime pozycji. | |
| timeout | string | no | Limit czasu pozycji. | |
| refresh_unsupported | number | no | Interwał odświeżania nieobsługiwanej pozycji. | |
| regexp | array of objects | no | Globalne wyrażenia regularne. | |
| name | string | no | Nazwa globalnego wyrażenia regularnego. | |
| expression | string | no | Globalne wyrażenie regularne. | |
| expression_type | number | no | Typ globalnego wyrażenia regularnego. | |
| exp_delimiter | string | no | Separator globalnego wyrażenia regularnego. | |
| case_sensitive | number | no | Ustawienie rozróżniania wielkości liter dla globalnego wyrażenia regularnego. | |
| commands | array of objects | no | Zdalne polecenia do wykonania. Dołączane, jeśli wykonanie zdalnego polecenia zostało wyzwolone przez operację akcji lub ręczne wykonanie skryptu. Należy pamiętać, że wykonywanie zdalnych poleceń na aktywnym agencie jest obsługiwane od Zabbix agent 7.0. Starsze aktywne agenty zignorują wszelkie zdalne polecenia zawarte w odpowiedzi serwera aktywnych kontroli. | |
| command | string | no | Zdalne polecenie. | |
| id | number | no | Identyfikator zdalnego polecenia. | |
| wait | number | no | Tryb wykonania zdalnego polecenia ("0" (nowait) dla poleceń z operacji akcji; "1" (wait) dla poleceń z ręcznego wykonania skryptu). | |
| timeout | number | no | Limit czasu wykonania zdalnego polecenia w konfiguracji serwer/proxy. | |
| config_revision | number | no | Identyfikator konfiguracji dla inkrementalnej synchronizacji konfiguracji. Pomijane, jeśli konfiguracja hosta nie uległa zmianie. Zwiększane, jeśli konfiguracja hosta została zmieniona. | |
Serwer musi odpowiedzieć sukcesem.
Na przykład:
- Agent otwiera połączenie TCP
- Agent prosi o listę kontroli
- Serwer odpowiada listą pozycji i zdalnych poleceń do wykonania
- Agent analizuje odpowiedź
- Połączenie TCP zostaje zamknięte
- Agent rozpoczyna okresowe zbieranie danych i wykonuje zdalne polecenia (obsługiwane od Zabbix agent 7.0)
Należy pamiętać, że (wrażliwe) dane konfiguracyjne mogą stać się dostępne dla stron mających dostęp do portu trapper serwera Zabbix podczas korzystania z aktywnej kontroli. Jest to możliwe, ponieważ każdy może podszyć się pod aktywnego agenta i zażądać danych konfiguracyjnych pozycji; uwierzytelnianie nie jest przeprowadzane, chyba że użyjesz opcji encryption.
Wysyłanie zebranych danych
Agent wysyła
Żądanie danych agenta zawiera zebrane wartości pozycji oraz wartości wykonanych zdalnych poleceń (jeśli występują).
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "8495cd52070e6ca52b371f29c8574165",
"host": "Zabbix server",
"version": "7.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | agent data |
|
| data | array of objects | yes | Wartości pozycji. | |
| id | number | yes | Identyfikator wartości (licznik inkrementacyjny używany do sprawdzania zduplikowanych wartości w przypadku problemów sieciowych). | |
| itemid | number | yes | Identyfikator pozycji. | |
| value | string | no | Wartość pozycji. | |
| lastlogsize | number | no | Wartość lastlogsize pozycji. | |
| mtime | number | no | Wartość mtime pozycji. | |
| state | number | no | Stan pozycji. | |
| source | string | no | Źródło dziennika zdarzeń dla wartości. | |
| eventid | number | no | Identyfikator zdarzenia dziennika zdarzeń dla wartości. | |
| severity | number | no | Poziom ważności dziennika zdarzeń dla wartości. | |
| timestamp | number | no | Sygnatura czasowa dziennika zdarzeń dla wartości. | |
| clock | number | yes | Sygnatura czasowa wartości (sekundy od początku epoki). | |
| ns | number | yes | Sygnatura czasowa wartości w nanosekundach. | |
| commands | array of objects | no | Wynik wykonania zdalnych poleceń. Należy pamiętać, że wykonywanie zdalnych poleceń na aktywnym agencie jest obsługiwane od Zabbix agent 7.0. Starsze aktywne agenty zignorują wszystkie zdalne polecenia zawarte w odpowiedzi serwera na aktywne kontrole. | |
| id | number | no | Identyfikator zdalnego polecenia. | |
| value | string | no | Wynik wykonania zdalnego polecenia, jeśli wykonanie zakończyło się powodzeniem. | |
| error | string | no | Komunikat błędu wykonania zdalnego polecenia, jeśli wykonanie nie powiodło się. | |
| session | string | yes | Unikalny identyfikator sesji generowany za każdym razem po uruchomieniu agenta. | |
| host | string | yes | Nazwa hosta. | |
| version | string | yes | Numer wersji agenta. | |
| variant | number | yes | Wariant agenta (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Każdej wartości przypisywany jest wirtualny identyfikator. Identyfikator wartości jest prostym licznikiem rosnącym, unikalnym w obrębie jednej sesji danych (identyfikowanej przez token sesji). Ten identyfikator służy do odrzucania zduplikowanych wartości, które mogą być wysyłane w środowiskach o słabej łączności.
Odpowiedź serwera
Odpowiedź na dane agenta jest wysyłana przez serwer z powrotem do agenta po przetworzeniu żądania danych agenta.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | Wyniki przetwarzania pozycji. |
Jeśli wysyłanie niektórych wartości nie powiedzie się na serwerze (na przykład dlatego, że host lub pozycja zostały wyłączone albo usunięte), agent nie będzie ponawiać wysyłania tych wartości.
Na przykład:
- Agent otwiera połączenie TCP
- Agent wysyła listę wartości
- Serwer przetwarza dane i odsyła status
- Połączenie TCP zostaje zamknięte
Komunikat błędu zostanie po stronie serwera skrócony do 2048 znaków.
Komunikat heartbeat
Agent wysyła
Komunikat heartbeat jest wysyłany przez aktywny agent do serwera/proxy Zabbix co HeartbeatFrequency sekund (zgodnie z plikiem konfiguracyjnym Zabbix agent/ agent 2).
Służy do monitorowania dostępności aktywnych kontroli.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "7.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | Nazwa hosta. |
| heartbeat_freq | number | yes | Częstotliwość heartbeat agenta (parametr konfiguracyjny HeartbeatFrequency). |
| version | string | yes | Numer wersji agenta. |
| variant | number | yes | Wariant agenta (1 - Zabbix agent, 2 - Zabbix agent 2). |
Odpowiedź przekierowania
Gdy host został przypisany ponownie, serwer może polecić agentowi przekierowanie jego heartbeat (oraz kolejnych aktywnych kontroli) do innej instancji proxy lub serwera.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Instrukcje przekierowania. | |
| revision | number | yes | Identyfikator rewizji konfiguracji. | |
| address | string | yes | Adres docelowego serwera/proxy. | |
Starszy protokół XML
Zabbix przyjmie do 16 MB danych XML zakodowanych w Base64, ale pojedyncza zdekodowana wartość nie powinna być dłuższa niż 64 KB, w przeciwnym razie zostanie obcięta do 64 KB podczas dekodowania.