2 Pasywne i aktywne kontrole agenta
Przegląd
Ta sekcja zawiera szczegółowe informacje na temat kontroli 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 i odpowiedziami Zabbix agent oraz Zabbix agent 2 jest wyrażana przez wartość znacznika „variant”.
Sprawdzanie pasywne
Sprawdzanie pasywne to proste żądanie danych. Serwer Zabbix lub proxy żąda określonych danych (na przykład obciążenia procesora), a agent Zabbix odsyła wynik do serwera.
Sprawdzanie pasywne jest wykonywane asynchronicznie — nie trzeba otrzymać odpowiedzi na jedno żądanie przed rozpoczęciem innych sprawdzeń. Rozpoznawanie DNS również odbywa się asynchronicznie.
Proces odpytywania agenta spróbuje połączyć się ze wszystkimi adresami zwróconymi przez wyszukiwanie DNS. Gwarantuje to, że jeśli jeden adres IP jest nieosiągalny, proces odpytywania spróbuje użyć 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 liczba jednoczesnych sprawdzeń asynchronicznych wynosi 1000 (zdefiniowana przez parametr MaxConcurrentChecksPerPoller).
Liczbę asynchronicznych procesów odpytywania agentów definiuje parametr StartAgentPollers.
Żądanie serwera
Informacje na temat definicji nagłówka i długości danych można znaleźć w sekcji szczegóły 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 | Pozycja sprawdzania 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 — agent Zabbix, 2 — agent Zabbix 2). | |
| data | array of object | yes | Zawiera wynik sprawdzania. | |
| value | string | no | Wartość pozycji, jeśli sprawdzanie zakończyło się powodzeniem. | |
| error | string | no | Komunikat o błędzie, jeśli sprawdzanie nie zakończyło się powodzeniem. | |
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 tym 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 i zmienia stan pozycji na nieobsługiwaną, używając określonego komunikatu o błędzie
- Połączenie TCP zostaje zamknięte
Przełączanie awaryjne na stary protokół
Aby zapewnić możliwość współpracy serwera Zabbix lub proxy z agentami w wersjach wcześniejszych niż 7.0, które używają protokołu tekstowego, zaimplementowano przełączanie awaryjne na stary protokół.
Po ponownym uruchomieniu lub zmianie konfiguracji interfejsu kontrole pasywne są wykonywane przy użyciu protokołu JSON (wersja 7.0 i nowsze). Jeśli w odpowiedzi nie zostanie odebrany prawidłowy JSON (agent wysłał „ZBX_NOTSUPPORTED”), Zabbix zapisze interfejs w pamięci podręcznej jako używający starego protokołu i ponowi kontrolę, wysyłając tylko klucz pozycji.
Należy pamiętać, że co godzinę serwer Zabbix/proxy ponownie spróbuje użyć nowego protokołu dla wszystkich interfejsów, a w razie potrzeby przełączy się 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.
Następnie agent okresowo wysyła nowe wartości do serwera (serwerów). Jeśli agent otrzymał jakiekolwiek polecenia zdalne do wykonania, wynik ich wykonania również zostanie wysłany. Należy pamiętać, że wykonywanie poleceń zdalnych na aktywnym agencie jest obsługiwane od wersji Zabbix agent 7.0.
Jeśli agent znajduje się za zaporą sieciową, można rozważyć używanie wyłącznie kontroli aktywnych, 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ą być przetwarzane przez agenta. To żądanie jest wysyłane przez agenta podczas uruchamiania, a następnie w odstępach określonych przez 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 konfiguracji HostMetadata lub metryki HostMetadataItem. |
| interface | string | no | Wartość parametru konfiguracji HostInterface lub metryki HostInterfaceItem. |
| ip | string | no | Pierwszy adres IP parametru konfiguracji ListenIP, jeśli został ustawiony. |
| port | number | no | Wartość parametru konfiguracji ListenPort, jeśli została ustawiona i różni się od domyślnego portu nasłuchiwania agenta. |
| version | string | yes | Numer wersji agenta. |
| variant | number | yes | Wariant agenta (1 - agent Zabbix, 2 - agent Zabbix 2). |
| config_revision | number | no | Identyfikator konfiguracji dla przyrostowej synchronizacji konfiguracji. |
| session | string | no | Identyfikator sesji dla przyrostowej synchronizacji konfiguracji. |
Odpowiedź serwera
Odpowiedź dotycząca 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. Interwały elastyczne i harmonogramowe są obsługiwane zarówno przez agenta Zabbix, jak i agenta Zabbix 2 od wersji Zabbix 7.0. |
|
| lastlogsize | number | no | Wartość lastlogsize pozycji. | |
| mtime | number | no | Wartość 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 | Ogranicznik globalnego wyrażenia regularnego. | |
| case_sensitive | number | no | Ustawienie uwzględniania wielkości liter w globalnym wyrażeniu regularnym. | |
| commands | array of objects | no | Zdalne polecenia do wykonania. Uwzględniane, jeśli wykonanie zdalnego polecenia zostało wywołane przez operację akcji lub ręczne wykonanie skryptu. Należy pamiętać, że wykonywanie zdalnych poleceń na aktywnym agencie jest obsługiwane od wersji agenta Zabbix 7.0. Starsze aktywne agenty zignorują wszystkie zdalne polecenia zawarte w odpowiedzi serwera dotyczącej aktywnych kontroli. | |
| command | string | no | Zdalne polecenie. | |
| id | number | no | Identyfikator zdalnego polecenia. | |
| wait | number | no | Tryb wykonywania zdalnego polecenia („0” (nowait) dla poleceń z operacji akcji; „1” (wait) dla poleceń wykonywanych z ręcznego skryptu). | |
| timeout | number | no | Limit czasu wykonywania zdalnego polecenia określony w konfiguracji serwera/proxy. | |
| config_revision | number | no | Identyfikator konfiguracji dla przyrostowej synchronizacji konfiguracji. Pomijany, jeśli konfiguracja hosta nie uległa zmianie. Zwiększany, jeśli konfiguracja hosta uległa zmianie. | |
Serwer musi odpowiedzieć komunikatem o powodzeniu.
Na przykład:
- Agent otwiera połączenie TCP
- Agent żąda listy 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 wersji agenta Zabbix 7.0)
Należy pamiętać, że podczas korzystania z aktywnej kontroli dane konfiguracyjne (w tym poufne) mogą stać się dostępne dla stron mających dostęp do portu trappera serwera Zabbix. Jest to możliwe, ponieważ każdy może podszyć się pod aktywnego agenta i zażądać danych konfiguracyjnych pozycji; uwierzytelnianie nie odbywa się, chyba że zostaną użyte opcje szyfrowania.
Wysyłanie zebranych danych
Wysyłanie przez agent
Żądanie danych agenta zawiera zebrane wartości pozycji oraz wartości wykonanych poleceń zdalnych (jeśli istnieją).
{
"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 inkrementowany używany do sprawdzania zduplikowanych wartości w przypadku problemów z siecią). | |
| 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ń wartości. | |
| eventid | number | no | eventid dziennika zdarzeń wartości. | |
| severity | number | no | Ważność dziennika zdarzeń wartości. | |
| timestamp | number | no | Znacznik czasu dziennika zdarzeń wartości. | |
| clock | number | yes | Znacznik czasu wartości (liczba sekund od epoki). | |
| ns | number | yes | Nanosekundy znacznika czasu wartości. | |
| commands | array of objects | no | Wynik wykonania poleceń zdalnych. Należy pamiętać, że wykonywanie poleceń zdalnych na aktywnym agencie jest obsługiwane od wersji Zabbix agent 7.0. Starsze aktywne agenty zignorują wszystkie polecenia zdalne zawarte w odpowiedzi serwera dotyczącej aktywnych sprawdzeń. | |
| id | number | no | Identyfikator polecenia zdalnego. | |
| value | string | no | Wynik wykonania polecenia zdalnego, jeśli wykonanie zakończyło się powodzeniem. | |
| error | string | no | Komunikat o błędzie wykonania polecenia zdalnego, jeśli wykonanie zakończyło się niepowodzeniem. | |
| session | string | yes | Unikatowy identyfikator sesji generowany przy każdym uruchomieniu agenta (32 cyfry szesnastkowe). | |
| host | string | yes | Nazwa host. | |
| 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 rosnącym licznikiem, unikatowym w ramach jednej sesji danych (identyfikowanej przez token sesji). Identyfikator ten służy do odrzucania zduplikowanych wartości, które mogą być wysyłane w środowiskach o słabej łączności.
Odpowiedź serwera
Odpowiedź dotycząca danych 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 wysłanie niektórych wartości zakończy się niepowodzeniem na serwerze (na przykład dlatego, że host lub pozycja zostały wyłączone albo usunięte), agent nie ponowi 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 stan
- Połączenie TCP zostaje zamknięte
Komunikat o błędzie zostanie skrócony po stronie serwera do 2048 symboli.
Komunikat heartbeat
Agent wysyła
Komunikat heartbeat jest wysyłany przez aktywnego agenta do serwera/proxy Zabbix co HeartbeatFrequency sekund (konfigurowane w pliku 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 host. |
| heartbeat_freq | number | yes | Częstotliwość komunikatów 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ł ponownie przypisany, serwer może nakazać agentowi przekierowanie komunikatów heartbeat (oraz kolejnych aktywnych kontroli) do innego proxy lub wystąpienia 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 docelowy serwera/proxy. | |
Starszy protokół XML
Zabbix przyjmie do 16 MB danych XML zakodowanych w formacie Base64, ale pojedyncza zdekodowana wartość nie powinna być dłuższa niż 64 KB, w przeciwnym razie podczas dekodowania zostanie obcięta do 64 KB.