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 odebranie odpowiedzi na jedno żądanie przed rozpoczęciem innych sprawdzeń. Rozwiązywanie DNS również odbywa się asynchronicznie.

Agent poller będzie próbował połączyć się ze wszystkimi adresami zwróconymi przez wyszukiwanie DNS. Zapewnia to, że jeśli jeden adres IP jest nieosiągalny, poller spróbuje użyć kolejnego 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 agent pollerów jest określana 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
    }
  ]
}
Pole Typ Wymagane Wartość
request string tak "passive checks"
data array of object tak Pasywna pozycja sprawdzenia.
key string tak Klucz pozycji z rozwiniętymi makrami.
timeout number tak Limit czasu komunikacji.

Odpowiedź agenta

{
  "version": "8.0.0",
  "variant": 2,
  "data": [
    {
      "value": "8.0.0"
    }
  ]
}
Pole Typ Wymagane Wartość
version string tak Numer wersji agenta.
variant number tak Wariant agenta (1 - agent Zabbix, 2 - agent Zabbix 2).
data array of object tak Zawiera wynik sprawdzenia.
value string nie Wartość pozycji, jeśli sprawdzenie zakończyło się powodzeniem.
error string nie Komunikat błędu, jeśli sprawdzenie nie zakończyło się powodzeniem.

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 <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
  4. Serwer przetwarza dane, aby uzyskać wartość, w naszym przypadku „1”
  5. Połączenie TCP zostaje zamknięte

Na przykład dla 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 <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Serwer przetwarza dane, zmienia stan pozycji na nieobsługiwaną z określonym komunikatem błędu
  5. Połączenie TCP zostaje zamknięte
Przełączenie awaryjne na stary protokół

Aby upewnić się, że serwer lub proxy Zabbix mogą współpracować z agentami z wersji wcześniejszych niż 7.2, które używają protokołu tekstowego, zaimplementowano przełączenie awaryjne na stary protokół.

Pasywne kontrole są wykonywane z użyciem protokołu JSON (7.0 i nowsze) po restarcie lub po zmianie konfiguracji interfejsu. 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/proxy Zabbix ponownie spróbuje pracować z nowym protokołem na wszystkich interfejsach, w razie potrzeby przełączając się z powrotem na stary protokół.

Kontrole aktywne

Kontrole aktywne 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, z których mają być pobierane kontrole aktywne, 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żenie kontroli aktywnych się nie powiedzie, ponowna próba nastąpi po zakodowanych na stałe 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 agent

Żądanie active checks służy do pobrania aktywnych kontroli, które mają być przetwarzane przez agent. To żądanie jest wysyłane przez agent przy uruchomieniu, 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": "8.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 Parametr konfiguracyjny HostMetadata lub wartość metryki HostMetadataItem.
interface string no Parametr konfiguracyjny HostInterface lub wartość metryki HostInterfaceItem.
ip string no Pierwszy adres IP z parametru konfiguracyjnego ListenIP, jeśli jest ustawiony.
port number no Wartość parametru konfiguracyjnego ListenPort, jeśli jest ustawiona i nie jest domyślnym portem nasłuchiwania agent.
version string yes Numer wersji agent.
variant number yes Wariant agent (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ź active checks jest wysyłana przez serwer z powrotem do agent po przetworzeniu żądania active checks.

{
  "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/interwały harmonogramu 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 Timeout 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 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 agent jest obsługiwane od Zabbix agent 7.0. Starsze aktywne agenty zignorują wszelkie zdalne polecenia dołączone do odpowiedzi serwera active checks.
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).
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ć sukcesem.

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 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 trappera serwera Zabbix podczas korzystania z aktywnej kontroli. Jest to możliwe, ponieważ każdy może udawać aktywnego agenta i żądać danych konfiguracyjnych pozycji; uwierzytelnianie nie odbywa się, chyba że używane są opcje szyfrowania.

Wysyłanie zebranych danych

Wysyłanie przez agent

Żądanie danych agenta zawiera zebrane wartości pozycji oraz wartości dla 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": "8.0.0",
  "variant": 2
}
Pole Typ Wymagane Wartość
request string tak agent data
data array of objects tak Wartości pozycji.
id number tak Identyfikator wartości (inkrementowany licznik używany do sprawdzania zduplikowanych wartości w przypadku problemów z siecią).
itemid number tak Identyfikator pozycji.
value string nie Wartość pozycji.
lastlogsize number nie lastlogsize pozycji.
mtime number nie mtime pozycji.
state number nie Stan pozycji.
source string nie Źródło dziennika zdarzeń wartości.
eventid number nie eventid dziennika zdarzeń wartości.
severity number nie Poziom ważności dziennika zdarzeń wartości.
timestamp number nie Znacznik czasu dziennika zdarzeń wartości.
clock number tak Znacznik czasu wartości (sekundy od Epoch).
ns number tak Nanosekundy znacznika czasu wartości.
commands array of objects nie 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ą wszelkie zdalne polecenia zawarte w odpowiedzi serwera aktywnych testów.
id number nie Identyfikator zdalnego polecenia.
value string nie Wynik wykonania zdalnego polecenia, jeśli wykonanie zakończyło się powodzeniem.
error string nie Komunikat błędu wykonania zdalnego polecenia, jeśli wykonanie się nie powiodło.
session string tak Unikalny identyfikator sesji generowany przy każdym uruchomieniu agent.
host string tak Nazwa hosta.
version string tak Numer wersji agent.
variant number tak Wariant agent (1 - Zabbix agent, 2 - Zabbix agent 2).

Wirtualny identyfikator jest przypisywany do każdej wartości. Identyfikator wartości to prosty rosnący licznik, unikalny w obrębie jednej sesji danych (identyfikowanej przez token sesji). Ten identyfikator służy do odrzucania zduplikowanych wartości, które mogą zostać wysłane w środowiskach o słabej łączności.

Odpowiedź serwera

Odpowiedź na dane agenta jest wysyłana przez serwer z powrotem do agent po przetworzeniu żądania danych agenta.

{
  "response": "success",
  "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
Pole Typ Wymagane Wartość
response string tak success | failed
info string tak Wyniki przetwarzania pozycji.

Jeśli wysyłanie niektórych wartości nie powiedzie się po stronie serwera (na przykład dlatego, że host lub pozycja zostały wyłączone albo usunięte), agent nie podejmie ponownej próby wysłania 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 status
  4. Połączenie TCP zostaje zamknięte

Komunikat błędu zostanie przycięty do 2048 znaków po stronie serwera.

Wiadomość heartbeat

Agent wysyła

Wiadomość heartbeat jest wysyłana przez aktywnego agenta do serwera/proxy Zabbix co HeartbeatFrequency sekund (skonfigurowane w pliku konfiguracyjnym Zabbix agent/ agent 2).

Jest używana do monitorowania dostępności aktywnych kontroli.

{
  "request": "active check heartbeat",
  "host": "Zabbix server",
  "heartbeat_freq": 60,
  "version": "8.0.0",
  "variant": 2
}
Pole Typ Obowiązkowe Wartość
request string tak active check heartbeat
host string tak Nazwa hosta.
heartbeat_freq number tak Częstotliwość heartbeat agenta (parametr konfiguracyjny HeartbeatFrequency).
version string tak Numer wersji agenta.
variant number tak Wariant agenta (1 - Zabbix agent, 2 - Zabbix agent 2).

Odpowiedź przekierowująca

Gdy host został ponownie przypisany, serwer może polecić agentowi przekierowanie heartbeat (oraz kolejnych aktywnych kontroli) do innej instancji proxy lub serwera.

  {
    "response": "failed",
    "redirect": {
      "revision": 2,
      "address": "192.0.2.0:10055"
    }
  }
Pole Typ Obowiązkowe Wartość
response string tak success | failed
redirect object tak Instrukcje przekierowania.
revision number tak Identyfikator rewizji konfiguracji.
address string tak 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.