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ā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 viena pieprasījuma atbildi, pirms tiek sākta nākamā pārbaude. 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, palielinot veiksmīga savienojuma iespējamību. Šis uzlabojums attiecas gan uz Zabbix serveri, gan uz starpniekserveri.
Asinhrono pārbaužu maksimālais paralēlais izpildes skaits ir 1000 (definēts ar 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": "7.0.0",
"variant": 2,
"data": [
{
"value": "7.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:
- Serveris atver TCP savienojumu
- Serveris nosūta <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Aģents nolasa pieprasījumu un atbild ar <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"value":1}]}
- Serveris apstrādā datus, lai iegūtu vērtību, mūsu gadījumā - '1'
- TCP savienojums tiek slēgts
Neatbalstītiem vienumiem:
- Serveris atver TCP savienojumu
- Serveris nosūta <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Aģents nolasa pieprasījumu un atbild ar <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Serveris apstrādā datus, maina vienuma stāvokli uz neatbalstītu ar norādīto kļūdas ziņojumu
- TCP savienojums tiek slēgts
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.0, kuri izmanto vienkāršteksta protokolu, ir ieviesta pārslēgšanās uz veco protokolu.
Pasīvās pārbaudes pēc restartēšanas vai, kad tiek mainīta interfeisa konfigurācija, 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 kešos saglabās interfeisu kā vecā protokola interfeisu 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 ar visiem interfeisiem, vajadzības gadījumā 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 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 jāapstrādā aģentam.
Š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": "7.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:
- Aģents atver TCP savienojumu
- Aģents pieprasa pārbaužu sarakstu
- Serveris atbild ar vienumu un izpildāmo attālo komandu sarakstu
- Aģents parsē atbildi
- TCP savienojums tiek aizvērts
- 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 pusēm, kurām ir piekļuve Zabbix servera trapper porta. Tas ir iespējams, jo ikviens var izlikties par aktīvu aģentu un pieprasīt vienuma konfigurācijas datus; autentifikācija nenotiek, ja vien netiek izmantotas šifrēšanas opcijas.
Nosūtīšana ar savāktajiem datiem
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": "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, lai pārbaudītu dublētas vērtības 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ālināto komandu izpildes rezultāts. Ņemiet vērā, ka attālināto komandu izpilde aktīvajā aģentā tiek atbalstīta kopš Zabbix aģents 7.0. Vecāki aktīvie aģenti ignorēs jebkuras attālinātās komandas, kas iekļautas aktīvo pārbaužu servera atbildē. | |
| id | number | no | Attālinātās komandas identifikators. | |
| value | string | no | Attālinātās komandas izpildes rezultāts, ja izpilde bija veiksmīga. | |
| error | string | no | Attālinātā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. | |
| 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). | |
Katram vērtības ierakstam 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 (identificēts ar sesijas tokenu). Šis ID tiek izmantots, lai atmestu dublētas vērtības, kas var tikt nosūtītas sliktas savienojamības vidēs.
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"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | 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:
- Aģents atver TCP savienojumu
- Aģents nosūta vērtību sarakstu
- Serveris apstrādā datus un nosūta statusu atpakaļ
- TCP savienojums tiek aizvērts
Kļūdas ziņojums servera pusē tiks saīsināts līdz 2048 simboliem.
Sirdspējas ziņojums
Aģents nosūta
Sirdspējas ziņojumu aktīvs aģents nosūta Zabbix serverim/starpniekserverim ik pēc HeartbeatFrequency sekundēm (konfigurēts Zabbix agent/ 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": "7.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 sirdspējas biežums (HeartbeatFrequency konfigurācijas parametrs). |
| version | string | yes | Aģenta versijas numurs. |
| variant | number | yes | Aģenta variants (1 - Zabbix agent, 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ā sirdspēju (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.