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

Pārskats

Šajā sadaļā ir sniegta detalizēta 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 komunikācijas protokolu.

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

Pasīvie pārbaužu pieprasījumi

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 viena pieprasījuma atbildi, pirms tiek sākta citu pārbaužu izpilde. DNS atrisināšana arī ir asinhrona.

Aģenta aptaujātājs mēģinās izveidot savienojumu ar visām adresēm, ko atgriež DNS uzmeklēšana. Tas nodrošina, ka, 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ālais paralēlais izpildes skaits ir 1000 (definēts ar parametru MaxConcurrentChecksPerPoller).

Asinhrono aģenta aptaujātāju skaits ir definēts ar parametru StartAgentPollers.

Servera pieprasījums

Galvenes un datu garuma definīciju skatiet protokola detaļās.

{
  "request": "passive checks",
  "data": [
    {
      "key": "agent.version",
      "timeout": 3
    }
  ]
}
Field Type Mandatory Value
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 Sakaru noildze.

Aģenta atbilde

{
  "version": "8.0.0",
  "variant": 2,
  "data": [
    {
      "value": "8.0.0"
    }
  ]
}
Field Type Mandatory Value
version string yes Aģenta versijas numurs.
variant number yes Aģenta variants (1 - Zabbix aģents, 2 - Zabbix agent 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":"8.0.0","variant":2,"data":[{"value":1}]}
  4. Serveris apstrādā datus, lai iegūtu vērtību, mūsu 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":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Serveris apstrādā datus, maina vienuma stāvokli uz neatbalstītu ar norādīto kļūdas ziņojumu
  5. TCP savienojums tiek aizvērts
Pārslēgšanās uz veco protokolu

Lai nodrošinātu, ka Zabbix serveris vai starpniekserveris var strādāt ar aģentiem no versijām pirms 7.2, kurās tiek izmantots vienkāršā teksta protokols, ir ieviesta pārslēgšanās uz veco protokolu.

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

Ņemiet vērā, ka katru stundu Zabbix serveris/starpniekserveris atkal mēģinās strādāt ar jauno protokolu visās saskarnēs, vajadzības gadījumā pārslēdzoties atpakaļ uz veco protokolu.

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 un/vai attālo komandu saraksts 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 parametrā '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 kopš Zabbix aģenta 7.0.

Ja aģents atrodas aiz ugunsmūra, varat apsvērt izmantot tikai aktīvās pārbaudes, jo šajā gadījumā nebūs nepieciešams mainīt ugunsmūra iestatījumus, 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 aģentam jāapstrādā.
Šo pieprasījumu aģents nosūta startēšanas laikā un pēc tam ar RefreshActiveChecks intervāliem.

{
  "request": "active checks",
  "host": "Zabbix serveris",
  "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 Host name.
host_metadata string no The configuration parameter HostMetadata or HostMetadataItem metric value.
interface string no The configuration parameter HostInterface or HostInterfaceItem metric value.
ip string no The configuration parameter ListenIP first IP if set.
port number no The configuration parameter ListenPort value if set and not default agent listening port.
version string yes The agent version number.
variant number yes The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2).
config_revision number no Configuration identifier for incremental configuration sync.
session string no Session identifier for incremental configuration sync.

Servera atbilde

Aktīvo pārbaužu atbilde tiek nosūtīta no servera atpakaļ 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 Error information in case of failure.
data array of objects no Active check items. Omitted if host configuration is unchanged.
key string no Item key with expanded macros.
itemid number no Item identifier.
delay string no Item update interval.
Flexible/scheduling intervals are supported by both Zabbix agent and Zabbix agent 2 since Zabbix 7.0.
lastlogsize number no Item lastlogsize.
mtime number no Item mtime.
timeout string no Item timeout.
refresh_unsupported number no Unsupported item refresh interval.
regexp array of objects no Global regular expressions.
name string no Global regular expression name.
expression string no Global regular expression.
expression_type number no Global regular expression type.
exp_delimiter string no Global regular expression delimiter.
case_sensitive number no Global regular expression case sensitivity setting.
commands array of objects no Remote commands to execute. Included if remote command execution has been triggered by an action operation or manual script execution. Note that remote command execution on an active agent is supported since Zabbix agent 7.0. Older active agents will ignore any remote commands included in the active checks server response.
command string no Remote command.
id number no Remote command identifier.
wait number no Remote command mode of execution ("0" (nowait) for commands from action operations; "1" (wait) for commands from manual script execution).
timeout number no Remote command execution timeout in server/proxy configuration.
config_revision number no Configuration identifier for incremental configuration sync. Omitted if host configuration is unchanged. Incremented if host configuration is changed.

Serverim jāatbild ar success.

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 vākšanu un izpilda attālās komandas (atbalstīts kopš Zabbix agent 7.0)

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

Savākto datu nosūtīšana

Aģents nosūta

Aģenta datu pieprasījums satur savāktās vienumu vērtības un izpildīto attālināto 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": "8.0.0",
  "variant": 2
}
Lauks Tips Obligāts Vērtība
request string agent data
data array of objects Vienumu vērtības.
id number Vērtības identifikators (pieaugošs skaitītājs, ko izmanto dublētu vērtību pārbaudei tīkla problēmu gadījumā).
itemid number Vienuma identifikators.
value string Vienuma vērtība.
lastlogsize number Vienuma lastlogsize.
mtime number Vienuma mtime.
state number Vienuma stāvoklis.
source string Vērtības notikumu žurnāla avots.
eventid number Vērtības notikumu žurnāla eventid.
severity number Vērtības notikumu žurnāla smaguma pakāpe.
timestamp number Vērtības notikumu žurnāla laikspiedols.
clock number Vērtības laikspiedols (sekundes kopš Epoch).
ns number Vērtības laikspiedola nanosekundes.
commands array of objects Attālināto komandu izpildes rezultāts. Ņemiet vērā, ka attālināto 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ālinātās komandas, kas iekļautas aktīvo pārbaužu servera atbildē.
id number Attālinātās komandas identifikators.
value string Attālinātās komandas izpildes rezultāts, ja izpilde bija veiksmīga.
error string Attālinātās komandas izpildes kļūdas ziņojums, ja izpilde neizdevās.
session string Unikāls sesijas identifikators, kas tiek ģenerēts katru reizi, kad aģents tiek palaists.
host string Hosta nosaukums.
version string Aģenta versijas numurs.
variant number Aģenta variants (1 - Zabbix aģents, 2 - Zabbix aģents 2).

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

Servera atbilde

Aģenta datu atbildi serveris nosūta 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"
}
Lauks Tips Obligāts Vērtība
response string success | failed
info string Vienumu apstrādes rezultāti.

Ja dažu vērtību nosūtīšana serverī neizdodas (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

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

Sirdsdarbības ziņojums

Aģents nosūta

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

To izmanto, lai uzraudzītu aktīvo pārbaužu pieejamību.

{
  "request": "active check heartbeat",
  "host": "Zabbix server",
  "heartbeat_freq": 60,
  "version": "8.0.0",
  "variant": 2
}
Field Type Mandatory Value
request string yes active check heartbeat
host string yes Saimniekdatora nosaukums.
heartbeat_freq number yes Aģenta sirdsdarbības 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 agent 2).

Pāradresācijas atbilde

Ja hosts ir pārdalīts, serveris var norādīt aģentam pāradresēt tā sirdsdarbības ziņojumu (un turpmākās aktīvās pārbaudes) uz citu starpniekservera 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 Pāradresācijas 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 atkodēta vērtība nedrīkst būt lielāka par 64 KB, pretējā gadījumā tā atkodēšanas laikā tiks saīsināta līdz 64 KB.