2 Pasywne i aktywne kontrole agenta

Przegląd

W tej sekcji przedstawiono szczegółowe informacje na temat kontroli pasywnych i aktywnych wykonywanych przez Zabbix agent oraz 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 wartością 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.

Moduł odpytujący 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, moduł odpytujący 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).

Liczba asynchronicznych modułów odpytujących agenta jest definiowana przez parametr StartAgentPollers.

Żądanie serwera

Informacje na temat definicji długości nagłówka i danych znajdują się 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.4.0",
  "variant": 2,
  "data": [
    {
      "value": "7.4.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ę pomyślnie.
error string no Komunikat o błędzie, jeśli sprawdzanie nie zakończyło się pomyślnie.

Na przykład dla obsługiwanych pozycji:

  1. Serwer otwiera połączenie TCP
  2. Serwer wysyła <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. Agent odczytuje żądanie i odpowiada za pomocą <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"value":1}]}
  4. Serwer przetwarza dane, aby uzyskać wartość — w tym przypadku „1”
  5. Połączenie TCP zostaje zamknięte

W przypadku nieobsługiwanych pozycji:

  1. Serwer otwiera połączenie TCP
  2. Serwer wysyła <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. Agent odczytuje żądanie i odpowiada za pomocą <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Serwer przetwarza dane i zmienia stan pozycji na nieobsługiwaną, używając określonego komunikatu o błędzie
  5. Połączenie TCP zostaje zamknięte
Przełączanie awaryjne na stary protokół

Aby zapewnić serwerowi Zabbix lub proxy możliwość współpracy z agentami w wersjach starszych niż 7.2, 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, przełączając się na stary protokół, jeśli będzie to wymagane.

Kontrole aktywne

Kontrole aktywne wymagają bardziej złożonego przetwarzania. agent musi najpierw pobrać z serwera/proxy listę pozycji i/lub poleceń zdalnych do niezależnego przetwarzania.

serwery/proxy, z których pobierane są kontrole aktywne, są wymienione w parametrze „ServerActive” w pliku konfiguracyjnym agenta. Częstotliwość żądania tych kontroli określa parametr „RefreshActiveChecks” w tym samym pliku konfiguracyjnym. Jeśli jednak odświeżenie kontroli aktywnych zakończy się niepowodzeniem, zostanie ponowione po zakodowanym na stałe czasie 60 sekund.

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. Agent wysyła to żądanie 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.4.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 - Zabbix agent, 2 - Zabbix agent 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 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 Zabbix agent, jak i Zabbix agent 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ługiwanych 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 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ę działania lub ręczne wykonanie skryptu. Należy pamiętać, że wykonywanie zdalnych poleceń na aktywnym agencie jest obsługiwane od wersji Zabbix agent 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 działania; „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:

  1. Agent otwiera połączenie TCP
  2. Agent żąda listy kontroli
  3. Serwer odpowiada listą pozycji i zdalnych poleceń do wykonania
  4. Agent analizuje odpowiedź
  5. Połączenie TCP zostaje zamknięte
  6. Agent rozpoczyna okresowe zbieranie danych i wykonuje zdalne polecenia (obsługiwane od wersji Zabbix agent 7.0)

Należy pamiętać, że podczas korzystania z aktywnej kontroli dane konfiguracyjne (w tym dane 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

Agent wysyła

Żą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.4.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 przyrostowy 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 kontroli.
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 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 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 przez serwer nie powiedzie się (na przykład dlatego, że host lub pozycja zostały wyłączone albo usunięte), agent nie spróbuje ponownie wysłać tych wartości.

Na przykład:

  1. Agent otwiera połączenie TCP
  2. Agent wysyła listę wartości
  3. Serwer przetwarza dane i odsyła stan
  4. Połączenie TCP zostaje zamknięte

Komunikat o błędzie zostanie skrócony po stronie serwera do 2048 znaków.

Komunikat heartbeat

Wysyłany przez agenta

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.4.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 konfiguracji 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 jego 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 wersji konfiguracji.
address string yes Adres docelowego 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.