Aquesta secció detalla les verificacions actives i passives que fa l'agent Zabbix.
Zabbix empra un protocol de comunicacions basat en JSON per comunicar-se amb l'agent Zabbix.
Veieu també els detalls del protocol de l'Agent Zabbix 2.
Una verificació passiva és una petició simple de dades. El servidor o el proxy Zabbix demanen dades (per exemple, la càrrega del processador) i l'agent Zabbix retorna el resultat al sevidor.
Les comprovacions passives s'executen de manera asíncrona - no cal rebre la resposta a una petició abans que s'iniciïn altres comprovacions. La resolució de DNS també és asíncrona.
La concurrència màxima de comprovacions asíncrones és 1000 (definida per MaxConcurrentChecksPerPoller).
El nombre de pollers d'agents asíncrons el defineix el paràmetre StartAgentPollers.
Petició al servidor
Per la definició de l'encapçalament i la longitud de les dades, veieu els detalls del protocol.
Agent response
Per exemple, per elements admesos:
Per els elements no admesos:
El servidor obre una connexió TCP
El servidor envia <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
L'agent llegeix la petició i respon amb
<HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
El servidor tracta les dades i modifica l'estat de l'element a no suportat, amb el missatge d'error especificat.
Es tanca la connexió TCP
Per assegurar-vos que el servidor o el proxy Zabbix puguin funcionar amb agents de versions anteriors a la 7.2, que tenen protocol de text pla, s'implementa una migració per error al protocol antic.
Les comprovacions passives es realitzen mitjançant el protocol JSON (7.2 i posteriors) després del reinici o quan es canvia la configuració de la interfície. Si no es rep un JSON vàlid com a resposta (l'agent ha enviat "ZBX_NOTSUPPORTED"), Zabbix emmagatzemarà la interfície com a protocol antic i torna a provar la comprovació enviant només la clau de l'element.
Tingueu en compte que cada hora el servidor/proxy Zabbix tornarà a intentar executar amb el nou protocol amb totes les interfícies, tornant al protocol antic si és necessari.
Les verificacions actives tenen un tractament més complexe. L'agent primer ha de recuperar dels servidors una llista d'elements o comandes remotes for independent processingper un tractament independent.
Els servidors/proxys des d'on obtenim les verificacions actives són llistats al paràmetre 'ServerActive' de l'arxiu de configuració de l'agent. La freqüència de les peticions per les verificacions es defineix amb el paràmetre 'RefreshActiveChecks' del mateix arxiu de configuració. Tanmateix, si el refresc de les verificacions actives falla, es tornarà a provar després de 60 segons.
Des de Zabbix 6.4, l'agent (en mode actiu) ja no rep del servidor/proxy una còpia completa de la configuració un cop cada dos minuts (per defecte). Ara, per tal de disminuir el trànsit de la xarxa i l'ús de recursos, es fa una sincronització de configuració incremental cada 5 segons (per defecte) on el servidor/proxy proporciona una còpia completa de la configuració només si l'agent encara no l'ha rebuda, o si alguna cosa ha canviat de la configuració de l'equip, les macros globals o les expressions regulars globals.
L'agent envia periòdicament els nous valors als servidors. Si l'agent rep qualsevol comanda remota per executar, també enviarà el resultat de l'execució. Tingueu en compte que l'execució de comandes remotes en un agent actiu és compatible des de l'agent Zabbix 7.0.
Si hi ha un agent darrere del tallafoc, podeu considerar emprar només comprovacions actives perquè en aquest cas no caldria modificar el tallafoc per permetre les connexions entrants inicials.
Petició de l'agent
La petició de les verificacions actives s'empra per obtindre les verificacions actives a tractar per l'agent. Aquesta petició s'envia per l'agent a l'iniciar, i després amb els intervals RefreshActiveChecks.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"hostinterface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "7.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
Camp | Tipus | Obligatori | Valor |
---|---|---|---|
request | string | sí | active checks |
host | string | sí | Nom d'equip. |
host_metadata | string | no | El paràmetre de configuració HostMetadata o el valor de mètrica HostMetadataItem. |
hostinterface | string | no | El valor de mètrica del paràmetre de configuració HostInterface o HostInterfaceItem. |
ip | string | no | El paràmetre de configuració ListenIP first IP, si s'ha definit. |
port | number | no | El valor del paràmetre de configuració ListenPort si s'ha definit i no pas el port d'escola per defecte de l'agent. |
version | string | sí | Nombre de versió de l'agent. |
variant | number | sí | variant de l'agent (1 - Agent Zabbix, 2 - Agent 2 Zabbix). |
config_revision | number | no | Identificador de configuració per sincronització incremental de la configuració. |
session | string | no | Identificador de la sessió per sincronització incremental de la configuració. |
Resposta del servidor
La resposta de les verificacions actives s'envien per el servidor a l'agent després del tractament de la petició de verificacions actives.
{
"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
}
]
}
Camp | Tipus | Obligatori | Valor | |
---|---|---|---|---|
response | string | sí | success | failed |
|
info | string | no | Informacions d'error en cas de fallida. | |
data | array of objects | no | Elements de verificacions actius. | |
key | string | no | Clau d'element amb macros esteses. | |
itemid | number | no | Identificador d'element. | |
delay | string | no | Interval d'actualització de l'element. | |
lastlogsize | number | no | Darrera mida del registre de l'element. | |
mtime | number | no | Mtime de l'element. | |
timeout | string | no | Temps d'espera de l'element. | |
refresh_unsupported | number | no | Interval d'actualització dels elements no suportats. | |
regexp | array of objects | no | Expressions regulars globals. | |
name | string | no | Nom de l'expressió regular global. | |
expression | string | no | Expression régulière globale. | |
expression_type | number | no | Tipus de l'expressió regular global. | |
exp_delimiter | string | no | Delimitador de l'expressió regular global. | |
case_sensitive | number | no | Paràmetre global de sensibilitat a majúscules de les expressions regulars. | |
commands | array of objects | no | Comandes remotes a executar. S'inclouen si l'execució de la comanda remota ha estat disparada per una operació d'acció o un script manual. Veieu que l'execució de les comandes remotes a un agent actiu és suportada des de l'agent de Zabbix 7.0. Agents actius més antics ingnoraran qualsevol comanda remota inclosa al les respostes del servidor de comprovacions actives. | |
command | string | no | Comanda remota. | |
id | number | no | ID de la comanda remota. | |
wait | number | no | Mode d'execució de la comanda remota ("0" (nowait) per comandes d'operació d'acció; "1" (wait) per comandes d'scripts manuals). | |
config_revision | number | no | Identificador de la configuració per sincronització incremental de la configuració. Omès si la configuració de l'equip no s'ha canviat. S'incrementa si la configuració de l'equip ha canviat. |
El servidor ha de respondre amb èxit.
Per exemple:
Veieu que les dades de configuració (sensibles) poden ésser disponibles per a les persones que tinguin accés al port del trapper del servidor Zabbix quan emprin verificació activa. Això és possible perquè tot el món pot pretendre tindre un agent actiu i demanar informació de configuració d'elements. L'autenticació no té lloc excepte que empreu les opcions de xifrat.
Enviament de l'agent
La petició de dades de l'agent conté els valors recollits de l'element.
{
"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": "1234456akdsjhfoui",
"host": "Zabbix server",
"version": "7.0.0",
"variant": 2
}
Camp | Tipus | Obligatori | Valor | |
---|---|---|---|---|
request | string | yes | dades de l'agent |
|
data | array of objects | yes | Valors de l'element. | |
id | number | yes | L'identificador del valor (comptador incremental emprat per comprovar els valors duplicats en cas de problemes de xarxa). | |
itemid | string | yes | Identificador de l'element. | |
value | string | no | Valor de l'article. | |
lastlogsize | number | no | Darrera mida del registre. | |
mtime | number | no | Element mtime. | |
state | number | no | Estat de l'element. | |
source | string | no | Font del registre d'esdeveniments del valor. | |
eventid | number | no | El valor del registre d'esdeveniments eventd. | |
severity | number | no | El valor de gravetat del registre d'esdeveniments. | |
timestamp | number | no | La marca de temps del registre d'esdeveniments del valor. | |
clock | number | yes | La marca de temps del valor (segons des de l'Època. | |
ns | number | yes | El valor de marca de temps nanosegons. | |
commands | array of objects | no | Resultat de l'execució de la comanda remota. Fixeu-vos que l'execució de la comanda remota a un agent actiu s'admet des de l'agent de Zabbix 7.0. Els agents actius més antics ignoraran qualsevol comanda inclosa a la resposta del servidor de les comprovacions actives. | |
id | number | no | Identificador de la comanda remota. | |
value | string | no | Resultat de l'execució de la comanda remota, si l'execució ha funcionat. | |
error | string | no | Missatge d'error d'execució de la comanda, si ha fallat l'execució. | |
session | string | yes | Identificador de sessió únic generat cada vegada que s'inicia l'agent. | |
host | string | yes | Nom de l'equip. | |
version | string | yes | Nombre de versió de l'agent. | |
variant | number | yes | Variant de l'agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
S'assigna un identificador virtual a cada valor. El valor ID és un comptador ascendent simple, únic dins d'una sessió de dades (identificat per el token de la sessió). Aquest identificador s'empra per descartar els valors duplicats que es poden enviar a entorns de connectivitat pobra.
Resposta del servidor
El servidor torna a enviar la resposta de dades de l'agent a l'agent després de processar la petició de dades de l'agent.
Camp | Tipus | Obligatori | Valor |
---|---|---|---|
resposta | string | sí | success | failed |
informació | string | sí | Resultats del processament d'elements. |
::: noteimportant Si l'enviament d'alguns valors falla al servidor (per exemple, perquè l'equip o l'element s'ha desactivat o suprimit), l'agent no tornarà a provar d'enviar aquests valors. :::
Per exemple:
Tingueu en compte com a l'exemple anterior l'estat no compatible per vfs.fs.size[/nono] s'indica amb el valor "estat" 1 i el missatge d'error a la propietat "valor".
El missatge d'error es retallarà a 2048 símbols de la banda del servidor.
El missatge de heartbeat l'envia un agent actiu al servidor/proxy de Zabbix cada segons de HeartbeatFrequency (configurat a l'arxiu de configuració de l'agent de Zabbix/agent 2).
S'empra per controlar la disponibilitat de controls actius.
{
"request": "active check heartbeat",
"host": "Servidor Zabbix",
"heartbeat_freq": 60,
"version": "7.2.0",
"variant": 2
}
Camp | Tipus | Obligatori | Valor |
---|---|---|---|
petició | string | sí | comprovació activa del heartbeat |
host | string | sí | El nom de l'equip. |
heartbeat_freq | number | sí | Freqüència de heartbeat de l'agent (paràmetre de configuració HeartbeatFrequency). |
versió | string | sí | Nombre de versió de l'agent. |
variant | number | sí | Variant de l'agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Zabbix prendrà fins a 16Mo de dades codificades en XML Base64, però un sol valor descodificat no haurà de passar els 64Ko, sinó es retallarà a 64Ko mentre es descodifiqui.