2 Pasīvās un aktīvās aģenta pārbaudes

Pārskats

Šajā sadaļā sniegta informācija par pasīvajām un aktīvajām pārbaudēm, ko veic Zabbix aģents un Zabbix aģents 2.

Zabbix saziņai ar aģentiem izmanto uz JSON balstītu saziņas protokolu.

Zabbix aģenta un Zabbix aģenta 2 protokoli ir apvienoti, sākot ar Zabbix 7.0. Atšķirība starp Zabbix aģenta un Zabbix aģenta 2 pieprasījumiem/atbildēm tiek izteikta ar taga "variant" vērtību.

Pasīvās pārbaudes

Pasīvā pārbaude ir vienkāršs datu pieprasījums.
Zabbix serveris vai starpniekserveris pieprasa noteiktus datus (piemēram, CPU noslodzi), un Zabbix aģents nosūta rezultātu atpakaļ serverim.

Pasīvās pārbaudes tiek izpildītas asinhroni — nav nepieciešams saņemt atbildi uz vienu pieprasījumu, pirms tiek sākta citu pārbaužu izpilde.
Arī DNS atrisināšana notiek asinhroni.

Aģentu aptaujātājs mēģinās izveidot savienojumu ar visām adresēm, kas atgrieztas DNS uzmeklēšanas rezultātā.
Tas nodrošina, ka gadījumā, ja viena IP adrese nav sasniedzama, aptaujātājs mēģinās izmantot nākamo pieejamo adresi, tādējādi palielinot veiksmīga savienojuma iespējamību.
Šis uzlabojums attiecas gan uz Zabbix serveri, gan starpniekserveri.

Asinhrono pārbaužu maksimālā vienlaicība ir 1000 (definēta ar parametru MaxConcurrentChecksPerPoller).

Asinhrono aģentu aptaujātāju skaitu nosaka parametrs StartAgentPollers.

Servera pieprasījums

Informāciju par galvenes un datu garuma definīciju skatiet sadaļā protokola informācija.

{
  "request": "passive checks",
  "data": [
    {
      "key": "agent.version",
      "timeout": 3
    }
  ]
}
Lauks Tips Obligāts Vērtība
request string yes "passive checks"
data array of object yes Pasīvās pārbaudes vienums.
key string yes Vienuma atslēga ar izvērstiem makro.
timeout number yes Saziņas taimauts.

Aģenta atbilde

{
  "version": "7.0.0",
  "variant": 2,
  "data": [
    {
      "value": "7.0.0"
    }
  ]
}
Lauks Tips Obligāts Vērtība
version string yes Aģenta versijas numurs.
variant number yes Aģenta variants (1 — Zabbix aģents, 2 — Zabbix aģents 2).
data array of object yes Satur pārbaudes rezultātu.
value string no Vienuma vērtība, ja pārbaude bija veiksmīga.
error string no Kļūdas ziņojums, ja pārbaude nebija veiksmīga.

Piemēram, atbalstītiem vienumiem:

  1. Serveris atver TCP savienojumu
  2. Serveris nosūta <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. Aģents nolasa pieprasījumu un atbild ar <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"value":1}]}
  4. Serveris apstrādā datus, lai iegūtu vērtību — šajā gadījumā “1”
  5. TCP savienojums tiek aizvērts

Neatbalstītiem vienumiem:

  1. Serveris atver TCP savienojumu
  2. Serveris nosūta <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. Aģents nolasa pieprasījumu un atbild ar <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Serveris apstrādā datus un maina vienuma stāvokli uz “neatbalstīts”, izmantojot norādīto kļūdas ziņojumu
  5. TCP savienojums tiek aizvērts
Atgriešanās pie vecā protokola

Lai nodrošinātu, ka Zabbix serveris vai starpniekserveris var darboties ar aģentiem no versijām, kas vecākas par 7.0 un izmanto vienkārša teksta protokolu, ir ieviesta atgriešanās pie vecā protokola.

Pasīvās pārbaudes pēc restartēšanas vai saskarnes konfigurācijas maiņas tiek veiktas, izmantojot JSON protokolu (7.0 un jaunākas versijas). Ja atbildē netiek saņemts derīgs JSON (aģents nosūtīja "ZBX_NOTSUPPORTED"), Zabbix saglabās saskarni kešatmiņā kā tādu, kas izmanto veco protokolu, un atkārtos pārbaudi, nosūtot tikai vienuma atslēgu.

Ņemiet vērā, ka katru stundu Zabbix serveris/starpniekserveris vēlreiz mēģinās izmantot jauno protokolu ar visām saskarnēm, ja nepieciešams, atgriežoties pie vecā protokola.

Aktīvās pārbaudes

Aktīvās pārbaudes prasa sarežģītāku apstrādi. Aģentam vispirms no servera/starpniekservera ir jāiegūst vienumu saraksts un/vai attālinātās komandas neatkarīgai apstrādei.

Serveri/starpniekserveri, no kuriem iegūt aktīvās pārbaudes, ir norādīti aģenta konfigurācijas faila parametrā 'ServerActive'. Šo pārbaužu pieprasīšanas biežumu nosaka tas pats konfigurācijas fails parametrs 'RefreshActiveChecks'. Tomēr, ja aktīvo pārbaužu atsvaidzināšana neizdodas, mēģinājums tiek atkārtots pēc fiksētām 60 sekundēm.

Sākot ar Zabbix 6.4, aģents (aktīvajā režīmā) vairs nesaņem no servera/starpniekservera pilnu konfigurācijas kopiju reizi divās minūtēs (pēc noklusējuma). Tā vietā, lai samazinātu tīkla datplūsmu un resursu izmantošanu, ik pēc 5 sekundēm (pēc noklusējuma) tiek veikta inkrementāla konfigurācijas sinhronizācija, kuras laikā serveris/starpniekserveris nodrošina pilnu konfigurācijas kopiju tikai tad, ja aģents to vēl nav saņēmis vai ir notikušas izmaiņas hosta konfigurācijā, globālajos makrosos vai globālajās regulārajās izteiksmēs.

Pēc tam aģents periodiski nosūta jaunās vērtības serverim(-iem). Ja aģents ir saņēmis izpildei kādas attālās komandas, tiks nosūtīts arī izpildes rezultāts. Ņemiet vērā, ka attālo komandu izpilde aktīvā aģentā tiek atbalstīta, sākot ar Zabbix aģentu 7.0.

Ja aģents atrodas aiz ugunsmūra, varat apsvērt iespēju izmantot tikai aktīvās pārbaudes, jo šādā gadījumā ugunsmūris nebūs jāmaina, lai atļautu sākotnējos ienākošos savienojumus.

Vienumu saraksta iegūšana

Aģenta pieprasījums

Aktīvo pārbaužu pieprasījums tiek izmantots, lai iegūtu aktīvās pārbaudes, kuras jāapstrādā aģentam. Šo pieprasījumu aģents nosūta startēšanas laikā un pēc tam ar RefreshActiveChecks intervālu.

{
  "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 Hosts nosaukums.
host_metadata string no Konfigurācijas parametra HostMetadata vai metrikas HostMetadataItem vērtība.
interface string no Konfigurācijas parametra HostInterface vai metrikas HostInterfaceItem vērtība.
ip string no Konfigurācijas parametra ListenIP pirmā IP adrese, ja tā ir iestatīta.
port number no Konfigurācijas parametra ListenPort vērtība, ja tā ir iestatīta un nav noklusējuma aģenta klausīšanās ports.
version string yes Aģenta versijas numurs.
variant number yes Aģenta variants (1 - Zabbix aģents, 2 - Zabbix aģents 2).
config_revision number no Konfigurācijas identifikators inkrementālajai konfigurācijas sinhronizācijai.
session string no Sesijas identifikators inkrementālajai konfigurācijas sinhronizācijai.

Servera atbilde

Aktīvo pārbaužu atbildi serveris nosūta aģentam pēc aktīvo pārbaužu pieprasījuma apstrādes.

{
  "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 Kļūdas informācija kļūmes gadījumā.
data array of objects no Aktīvās pārbaudes vienumi. Netiek iekļauts, ja hosts konfigurācija nav mainījusies.
key string no Vienuma atslēga ar izvērstiem makro.
itemid number no Vienuma identifikators.
delay string no Vienuma atjaunināšanas intervāls.
Elastīgos/plānošanas intervālus atbalsta gan Zabbix aģents, gan Zabbix aģents 2, sākot ar Zabbix 7.0.
lastlogsize number no Vienuma lastlogsize.
mtime number no Vienuma mtime.
timeout string no Vienuma taimauts.
refresh_unsupported number no Neatbalstīto vienumu atsvaidzināšanas intervāls.
regexp array of objects no Globālās regulārās izteiksmes.
name string no Globālās regulārās izteiksmes nosaukums.
expression string no Globālā regulārā izteiksme.
expression_type number no Globālās regulārās izteiksmes tips.
exp_delimiter string no Globālās regulārās izteiksmes atdalītājs.
case_sensitive number no Globālās regulārās izteiksmes reģistrjutības iestatījums.
commands array of objects no Izpildāmās attālās komandas. Tiek iekļautas, ja attālo komandu izpildi ir aktivizējusi darbības operācija vai manuāla skripta izpilde. Ņemiet vērā, ka attālo komandu izpilde aktīvā aģentā tiek atbalstīta, sākot ar Zabbix aģentu 7.0. Vecāki aktīvie aģenti ignorēs visas attālās komandas, kas iekļautas aktīvo pārbaužu servera atbildē.
command string no Attālā komanda.
id number no Attālās komandas identifikators.
wait number no Attālās komandas izpildes režīms ("0" (nowait) komandām no darbības operācijām; "1" (wait) komandām, kas izpildītas no manuāla skripta).
timeout number no Attālās komandas izpildes taimauts servera/starpniekservera konfigurācijā.
config_revision number no Konfigurācijas identifikators inkrementālajai konfigurācijas sinhronizācijai. Netiek iekļauts, ja hosts konfigurācija nav mainījusies. Tiek palielināts, ja hosts konfigurācija ir mainījusies.

Serverim jāatbild ar veiksmīgu rezultātu.

Piemēram:

  1. Aģents atver TCP savienojumu
  2. Aģents pieprasa pārbaužu sarakstu
  3. Serveris atbild ar vienumu sarakstu un izpildāmajām attālajām komandām
  4. Aģents parsē atbildi
  5. TCP savienojums tiek aizvērts
  6. Aģents sāk periodisku datu apkopošanu un izpilda attālās komandas (tiek atbalstīts, sākot ar Zabbix aģentu 7.0)

Ņemiet vērā, ka, izmantojot aktīvo pārbaudi, konfigurācijas dati (tostarp sensitīvi dati) var kļūt pieejami pusēm, kurām ir piekļuve Zabbix servera trapper portam. Tas ir iespējams tāpēc, ka ikviens var uzdoties par aktīvu aģentu un pieprasīt vienumu konfigurācijas datus; autentifikācija nenotiek, ja vien neizmantojat šifrēšanas opcijas.

Apkopoto datu nosūtīšana

Aģents nosūta

Aģenta datu pieprasījumā ir ietvertas apkopotās vienumu vērtības un izpildīto attālo komandu vērtības (ja tādas ir).

{
  "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 Vienumu vērtības.
id number yes Vērtības identifikators (inkrementāls skaitītājs, ko izmanto dublētu vērtību pārbaudei tīkla problēmu gadījumā).
itemid number yes Vienuma identifikators.
value string no Vienuma vērtība.
lastlogsize number no Vienuma lastlogsize.
mtime number no Vienuma mtime.
state number no Vienuma state.
source string no Vērtības notikumu žurnāla avots.
eventid number no Vērtības notikumu žurnāla eventid.
severity number no Vērtības notikumu žurnāla severity.
timestamp number no Vērtības notikumu žurnāla timestamp.
clock number yes Vērtības laikspiedols (sekundes kopš Epoch).
ns number yes Vērtības laikspiedola nanosekundes.
commands array of objects no Attālo komandu izpildes rezultāts. Ņemiet vērā, ka attālo komandu izpilde aktīvā aģentā tiek atbalstīta kopš Zabbix aģenta 7.0. Vecāki aktīvie aģenti ignorēs visas attālās komandas, kas ietvertas aktīvo pārbaužu servera atbildē.
id number no Attālās komandas identifikators.
value string no Attālās komandas izpildes rezultāts, ja izpilde bija veiksmīga.
error string no Attālās komandas izpildes kļūdas ziņojums, ja izpilde neizdevās.
session string yes Unikāls sesijas identifikators, kas tiek ģenerēts katru reizi, kad tiek palaists aģents (32 heksadecimālie cipari).
host string yes Hosts nosaukums.
version string yes Aģenta versijas numurs.
variant number yes Aģenta variants (1 - Zabbix aģents, 2 - Zabbix aģents 2).

Katrai vērtībai tiek piešķirts virtuāls ID. Vērtības ID ir vienkāršs augošs skaitītājs, kas ir unikāls vienas datu sesijas ietvaros (to identificē sesijas tokens). Šis ID tiek izmantots, lai atmestu dublētās vērtības, kas var tikt nosūtītas sliktas savienojamības apstākļos.

Servera atbilde

Serveris nosūta aģenta datu atbildi atpakaļ aģentam pēc aģenta datu pieprasījuma apstrādes.

{
  "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 Vienumu apstrādes rezultāti.

Ja serverī neizdodas nosūtīt dažas vērtības (piemēram, tāpēc, ka hosts vai vienums ir atspējots vai dzēsts), aģents nemēģinās šīs vērtības nosūtīt atkārtoti.

Piemēram:

  1. Aģents atver TCP savienojumu
  2. Aģents nosūta vērtību sarakstu
  3. Serveris apstrādā datus un nosūta statusu atpakaļ
  4. TCP savienojums tiek aizvērts

Servera pusē kļūdas ziņojums tiks saīsināts līdz 2048 simboliem.

Sirdspuksta ziņojums

Aģents nosūta

Sirdspuksta ziņojumu aktīvais aģents nosūta Zabbix serverim/starpniekserverim ik pēc HeartbeatFrequency sekundēm (konfigurēts Zabbix aģenta/aģenta 2 konfigurācijas failā).

To izmanto aktīvo pārbaužu pieejamības uzraudzībai.

{
  "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 Hosts nosaukums.
heartbeat_freq number yes Aģenta sirdspuksta biežums (HeartbeatFrequency konfigurācijas parametrs).
version string yes Aģenta versijas numurs.
variant number yes Aģenta variants (1 - Zabbix aģents, 2 - Zabbix aģents 2).

Novirzīšanas atbilde

Kad hosts ir piešķirts citam objektam, serveris var norādīt aģentam novirzīt sirdspuksta ziņojumus (un turpmākās aktīvās pārbaudes) uz citu starpniekserveri vai servera instanci.

  {
    "response": "failed",
    "redirect": {
      "revision": 2,
      "address": "192.0.2.1:10055"
    }
  }
Field Type Mandatory Value
response string yes success | failed
redirect object yes Novirzīšanas norādījumi.
revision number yes Konfigurācijas revīzijas identifikators.
address string yes Mērķa servera/starpniekservera adrese.

Vecāks XML protokols

Zabbix pieņems līdz 16 MB XML Base64 kodētu datu, taču viena dekodētā vērtība nedrīkst pārsniegt 64 KB, pretējā gadījumā dekodēšanas laikā tā tiks saīsināta līdz 64 KB.