2 Comprobaciones pasivas y activas del agente
Descripción general
Esta sección proporciona detalles sobre las comprobaciones pasivas y activas realizadas por el agente Zabbix y el agente Zabbix 2.
Zabbix utiliza un protocolo de comunicación basado en JSON para comunicarse con los agentes.
Los protocolos del agente Zabbix y del agente Zabbix 2 se han unificado desde Zabbix 7.0. La diferencia entre las solicitudes/respuestas del agente Zabbix y del agente Zabbix 2 se expresa mediante el valor de la etiqueta "variant".
Comprobaciones pasivas
Una comprobación pasiva es una simple solicitud de datos. Zabbix server o proxy solicita algunos datos (por ejemplo, la carga de CPU) y Zabbix agent devuelve el resultado al server.
Las comprobaciones pasivas se ejecutan de forma asíncrona: no es necesario recibir la respuesta a una solicitud antes de iniciar otras comprobaciones. La resolución DNS también es asíncrona.
El agente poller intentará conectarse a todas las direcciones devueltas por la búsqueda DNS. Esto garantiza que, si una dirección IP no está disponible, el poller intentará la siguiente dirección disponible, lo que aumenta la probabilidad de una conexión correcta. Esta mejora se aplica tanto a Zabbix server como a proxy.
La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller).
El número de agent pollers asíncronos se define mediante el parámetro StartAgentPollers.
Solicitud del server
Para la definición de la longitud de la cabecera y de los datos, consulte protocol details.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Passive check item. | |
| key | string | yes | Item key with expanded macros. | |
| timeout | number | yes | Communication timeout. | |
Respuesta del agent
{
"version": "7.4.0",
"variant": 2,
"data": [
{
"value": "7.4.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | The agent version number. | |
| variant | number | yes | The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Contiene el resultado de la comprobación. | |
| value | string | no | The item value if the check was successful. | |
| error | string | no | The error message if the check was not successful. | |
Por ejemplo, para items compatibles:
- Server abre una conexión TCP
- Server envía <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Agent lee la solicitud y responde con <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"value":1}]}
- Server procesa los datos para obtener el valor, '1' en nuestro caso
- Se cierra la conexión TCP
Para items no compatibles:
- Server abre una conexión TCP
- Server envía <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Agent lee la solicitud y responde con <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Server procesa los datos, cambia el estado del item a no compatible con el mensaje de error especificado
- Se cierra la conexión TCP
Conmutación por error al protocolo antiguo
Para asegurarse de que el servidor o proxy de Zabbix pueda trabajar con agentes de versiones anteriores a la 7.2, que utilizan el protocolo en texto plano, se implementa una conmutación por error al protocolo antiguo.
Las comprobaciones pasivas se realizan utilizando el protocolo JSON (7.0 y posteriores) después de reiniciar o cuando se cambia la configuración de la interfaz. Si no se recibe un JSON válido en respuesta (el agente envió "ZBX_NOTSUPPORTED"), Zabbix almacenará en caché la interfaz como protocolo antiguo y reintentará la comprobación enviando solo la clave de la métrica.
Tenga en cuenta que cada hora el servidor/proxy de Zabbix volverá a intentar trabajar con el nuevo protocolo en todas las interfaces, volviendo al protocolo antiguo si es necesario.
Comprobaciones activas
Las comprobaciones activas requieren un procesamiento más complejo. El agent debe recuperar primero del server/proxy una lista de items y/o comandos remotos para su procesamiento independiente.
Los servers/proxies desde los que se obtienen las comprobaciones activas se enumeran en el parámetro 'ServerActive' del archivo de configuración del agent. La frecuencia con la que se solicitan estas comprobaciones se establece mediante el parámetro 'RefreshActiveChecks' en el mismo archivo de configuración. Sin embargo, si la actualización de las comprobaciones activas falla, se reintenta después de 60 segundos fijos.
Desde Zabbix 6.4 el agente (en modo activo) ya no recibe del servidor/proxy una copia completa de la configuración cada dos minutos (por defecto). En su lugar, para disminuir el tráfico de red y el uso de recursos, se realiza una sincronización incremental de la configuración cada 5 segundos (por defecto), en la que el servidor/proxy proporciona una copia completa de la configuración solo si el agente aún no la ha recibido, o si algo ha cambiado en la configuración del equipo, macros globales o expresiones regulares globales.
El agente luego envía periódicamente los nuevos valores al/los servidor(es). Si el agente recibió algún comando remoto para ejecutar, el resultado de la ejecución también se enviará. Tenga en cuenta que la ejecución de comandos remotos en un agente activo es compatible desde Zabbix agent 7.0.
Si un agente está detrás de un firewall, podría considerar usar solo comprobaciones activas porque en este caso no necesitaría modificar el firewall para permitir conexiones entrantes iniciales.
Obtención de la lista de items
Solicitud del agent
La solicitud de active checks se utiliza para obtener los active checks que deben ser procesados por el agent.
Esta solicitud la envía el agent al iniciarse y luego en intervalos de RefreshActiveChecks.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "7.4.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | Nombre del host. |
| host_metadata | string | no | El parámetro de configuración HostMetadata o el valor de la métrica HostMetadataItem. |
| interface | string | no | El parámetro de configuración HostInterface o el valor de la métrica HostInterfaceItem. |
| ip | string | no | La primera IP del parámetro de configuración ListenIP, si está definido. |
| port | number | no | El valor del parámetro de configuración ListenPort, si está definido y no es el puerto de escucha predeterminado del agent. |
| version | string | yes | El número de versión del agent. |
| variant | number | yes | La variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Identificador de configuración para sincronización incremental de configuración. |
| session | string | no | Identificador de sesión para sincronización incremental de configuración. |
Respuesta del server
La respuesta de active checks la envía el server de vuelta al agent después de procesar la solicitud de 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 | Información de error en caso de fallo. | |
| data | array of objects | no | Items de active check. Se omite si la configuración del host no ha cambiado. | |
| key | string | no | Clave del item con macros expandidas. | |
| itemid | number | no | Identificador del item. | |
| delay | string | no | Intervalo de actualización del item. Los intervalos flexibles/de programación son compatibles con Zabbix agent y Zabbix agent 2 desde Zabbix 7.0. |
|
| lastlogsize | number | no | lastlogsize del item. | |
| mtime | number | no | mtime del item. | |
| timeout | string | no | Tiempo de espera del item. | |
| refresh_unsupported | number | no | Intervalo de actualización de items no compatibles. | |
| regexp | array of objects | no | Expresiones regulares globales. | |
| name | string | no | Nombre de la expresión regular global. | |
| expression | string | no | Expresión regular global. | |
| expression_type | number | no | Tipo de expresión regular global. | |
| exp_delimiter | string | no | Delimitador de la expresión regular global. | |
| case_sensitive | number | no | Configuración de sensibilidad a mayúsculas y minúsculas de la expresión regular global. | |
| commands | array of objects | no | Comandos remotos a ejecutar. Se incluyen si la ejecución de comandos remotos ha sido activada por una operación de una acción o por la ejecución manual de un script. Tenga en cuenta que la ejecución de comandos remotos en un active agent es compatible desde Zabbix agent 7.0. Los active agents anteriores ignorarán cualquier comando remoto incluido en la respuesta del server de active checks. | |
| command | string | no | Comando remoto. | |
| id | number | no | Identificador del comando remoto. | |
| wait | number | no | Modo de ejecución del comando remoto ("0" (nowait) para comandos de operaciones de una acción; "1" (wait) para comandos de ejecución manual de script). | |
| timeout | number | no | Tiempo de espera de ejecución del comando remoto en la configuración de server/proxy. | |
| config_revision | number | no | Identificador de configuración para sincronización incremental de configuración. Se omite si la configuración del host no ha cambiado. Se incrementa si la configuración del host cambia. | |
El server debe responder con success.
Por ejemplo:
- El agent abre una conexión TCP
- El agent solicita la lista de checks
- El server responde con una lista de items y comandos remotos a ejecutar
- El agent analiza la respuesta
- La conexión TCP se cierra
- El agent inicia la recopilación periódica de datos y ejecuta comandos remotos (compatible desde Zabbix agent 7.0)
Tenga en cuenta que los datos de configuración (sensibles) pueden quedar disponibles para partes que tengan acceso al puerto trapper del Zabbix server al usar un active check. Esto es posible porque cualquiera puede hacerse pasar por un active agent y solicitar datos de configuración de items; no se realiza autenticación a menos que utilice opciones de encryption.
Envío de datos recopilados
Agent envía
La solicitud de datos del agent contiene los valores de item recopilados y los valores de los comandos remotos ejecutados (si los hay).
{
"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.4.0",
"variant": 2
}
| Field | < | Type | Mandatory | Value | |
|---|---|---|---|---|---|
| request | < | string | yes | agent data |
|
| data | < | array of objects | yes | Valores de item. | |
| id | < | number | yes | El identificador del valor (contador incremental usado para comprobar valores duplicados en caso de problemas de red). | |
| ^ | itemid | number | yes | El identificador del item. | |
| ^ | value | string | no | El valor del item. | |
| ^ | lastlogsize | number | no | El lastlogsize del item. | |
| ^ | mtime | number | no | El mtime del item. | |
| ^ | state | number | no | El estado del item. | |
| ^ | source | string | no | El origen del registro de eventos del valor. | |
| ^ | eventid | number | no | El eventid del registro de eventos del valor. | |
| ^ | severity | number | no | La severidad del registro de eventos del valor. | |
| ^ | timestamp | number | no | La marca de tiempo del registro de eventos del valor. | |
| ^ | clock | number | yes | La marca de tiempo del valor (segundos desde Epoch). | |
| ^ | ns | number | yes | Los nanosegundos de la marca de tiempo del valor. | |
| commands | < | array of objects | no | Resultado de la ejecución de comandos remotos. Tenga en cuenta que la ejecución de comandos remotos en un agent activo es compatible desde Zabbix agent 7.0. Los agent activos anteriores ignorarán cualquier comando remoto incluido en la respuesta del servidor de comprobaciones activas. | |
| id | number | no | Identificador del comando remoto. | ||
| ^ | value | string | no | Resultado de la ejecución del comando remoto si la ejecución fue correcta. | |
| ^ | error | string | no | Mensaje de error de la ejecución del comando remoto si la ejecución falló. | |
| session | < | string | yes | Identificador único de sesión generado cada vez que se inicia el agent. | |
| host | < | string | yes | Nombre del host. | |
| version | < | string | yes | El número de versión del agent. | |
| variant | < | number | yes | La variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
A cada valor se le asigna un ID virtual. El ID del valor es un contador simple ascendente, único dentro de una sesión de datos (identificada por el token de sesión). Este ID se usa para descartar valores duplicados que podrían enviarse en entornos con conectividad deficiente.
Respuesta del server
La respuesta de datos del agent es enviada por el server al agent después de procesar la solicitud de datos del agent.
{
"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 | Resultados del procesamiento de item. |
Si el envío de algunos valores falla en el server (por ejemplo, porque host o item ha sido deshabilitado o eliminado), el agent no reintentará el envío de esos valores.
Por ejemplo:
- Agent abre una conexión TCP
- Agent envía una lista de valores
- Server procesa los datos y devuelve el estado
- La conexión TCP se cierra
El mensaje de error se truncará a 2048 símbolos en el lado del server.
Mensaje de heartbeat
El agent envía
El mensaje de heartbeat es enviado por un agent activo al server/proxy de Zabbix cada HeartbeatFrequency segundos (configurado en el archivo de configuración de Zabbix agent/agent 2).
Se utiliza para supervisar la disponibilidad de las comprobaciones activas.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "7.4.0",
"variant": 2
}
| Campo | Tipo | Obligatorio | Valor |
|---|---|---|---|
| request | string | sí | active check heartbeat |
| host | string | sí | El nombre del host. |
| heartbeat_freq | number | sí | La frecuencia de heartbeat del agent (parámetro de configuración HeartbeatFrequency). |
| version | string | sí | El número de versión del agent. |
| variant | number | sí | La variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Respuesta de redirección
Cuando un host ha sido reasignado, el server puede indicar al agent que redirija su heartbeat (y las comprobaciones activas posteriores) a otra instancia de proxy o server.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Campo | Tipo | Obligatorio | Valor | |
|---|---|---|---|---|
| response | string | sí | success | failed |
|
| redirect | object | sí | Instrucciones de redirección. | |
| revision | number | sí | Identificador de la revisión de configuración. | |
| address | string | sí | Dirección del server/proxy de destino. | |
Protocolo XML antiguo
Zabbix aceptará hasta 16 MB de datos XML codificados en Base64, pero un único valor decodificado no debe superar los 64 KB, de lo contrario se truncará a 64 KB durante la decodificación.