2 Comprobaciones pasivas y activas del agente
Descripción general
Esta sección proporciona detalles sobre las comprobaciones pasivas y activas realizadas por Zabbix agent y Zabbix agent 2.
Zabbix utiliza un protocolo de comunicación basado en JSON para comunicarse con los agentes.
Los protocolos de Zabbix agent y Zabbix agent 2 están unificados desde Zabbix 7.0. La diferencia entre las solicitudes y respuestas de Zabbix agent y Zabbix agent 2 se expresa mediante el valor de la etiqueta "variant".
Comprobaciones pasivas
Una comprobación pasiva es una solicitud de datos simple.
El Zabbix server o el proxy solicita algunos datos (por ejemplo, la carga de la CPU) y el 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 de DNS también es asíncrona.
El sondeador de agent intentará conectarse a todas las direcciones devueltas por la búsqueda de DNS.
Esto garantiza que, si no se puede acceder a una dirección IP, el sondeador intentará con la siguiente dirección disponible, lo que aumenta la probabilidad de que la conexión se realice correctamente.
Esta mejora se aplica tanto al Zabbix server como al proxy.
La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller).
El número de sondeadores de agent asíncronos se define mediante el parámetro StartAgentPollers.
Solicitud del server
Para consultar la definición de la longitud del encabezado y de los datos, consulte los detalles del protocolo.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Item de comprobación pasiva. | |
| key | string | yes | Clave del item con macros expandidas. | |
| timeout | number | yes | Tiempo de espera de la comunicación. | |
Respuesta del agent
{
"version": "7.0.0",
"variant": 2,
"data": [
{
"value": "7.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | Número de versión del agent. | |
| variant | number | yes | Variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Contiene el resultado de la comprobación. | |
| value | string | no | Valor del item si la comprobación se realizó correctamente. | |
| error | string | no | Mensaje de error si la comprobación no se realizó correctamente. | |
Por ejemplo, para los items compatibles:
- El server abre una conexión TCP
- El server envía <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- El agent lee la solicitud y responde con <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"value":1}]}
- El server procesa los datos para obtener el valor, que en este caso es «1»
- Se cierra la conexión TCP
Para los items no compatibles:
- El server abre una conexión TCP
- El server envía <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- El agent lee la solicitud y responde con <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- El server procesa los datos y 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 garantizar que el server o el proxy de Zabbix puedan trabajar con agents de versiones anteriores a la 7.0, que utilizan el protocolo de texto sin formato, se ha implementado una conmutación por error al protocolo antiguo.
Las comprobaciones pasivas se realizan mediante el protocolo JSON (versión 7.0 y posteriores) después de reiniciar o cuando se modifica la configuración de la interfaz. Si no se recibe un JSON válido como respuesta (el agent envía "ZBX_NOTSUPPORTED"), Zabbix almacenará en caché la interfaz como perteneciente al protocolo antiguo y reintentará la comprobación enviando únicamente la clave del item.
Tenga en cuenta que cada hora el server/proxy de Zabbix volverá a intentar trabajar con el protocolo nuevo con todas las interfaces y cambiará al protocolo antiguo si es necesario.
Comprobaciones activas
Las comprobaciones activas requieren un procesamiento más complejo. El agent primero debe recuperar 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 agent envía periódicamente los valores nuevos al server o los servers. Si el agent recibió algún comando remoto para ejecutar, también se enviará el resultado de la ejecución. Ten en cuenta que la ejecución de comandos remotos en un agent activo es compatible desde Zabbix agent 7.0.
Si un agent está detrás de un firewall, puedes considerar usar únicamente comprobaciones activas, ya que en este caso no necesitarías modificar el firewall para permitir las conexiones entrantes iniciales.
Obtención de la lista de items
Solicitud del agent
La solicitud de comprobaciones activas se utiliza para obtener las comprobaciones activas que debe procesar el agent. El agent envía esta solicitud al iniciarse y, posteriormente, según los 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.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Campo | Tipo | Obligatorio | Valor |
|---|---|---|---|
| request | string | sí | active checks |
| host | string | sí | Nombre del host. |
| host_metadata | string | no | Valor del parámetro de configuración HostMetadata o de la métrica HostMetadataItem. |
| interface | string | no | Valor del parámetro de configuración HostInterface o de la métrica HostInterfaceItem. |
| ip | string | no | Primera IP del parámetro de configuración ListenIP, si está definida. |
| port | number | no | Valor del parámetro de configuración ListenPort, si está definido y no coincide con el puerto de escucha predeterminado del agent. |
| version | string | sí | Número de versión del agent. |
| variant | number | sí | Variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Identificador de configuración para la sincronización incremental de la configuración. |
| session | string | no | Identificador de sesión para la sincronización incremental de la configuración. |
Respuesta del server
El server envía la respuesta de comprobaciones activas al agent después de procesar la solicitud de comprobaciones activas.
{
"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
}
]
}
| Campo | Tipo | Obligatorio | Valor | |
|---|---|---|---|---|
| response | string | sí | success | failed |
|
| info | string | no | Información del error en caso de fallo. | |
| data | array of objects | no | items de comprobaciones activas. Se omite si la configuración del host no ha cambiado. | |
| key | string | no | Clave del item con las macros expandidas. | |
| itemid | number | no | Identificador del item. | |
| delay | string | no | Intervalo de actualización del item. Los intervalos flexibles y de programación son compatibles tanto con Zabbix agent como con 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 los 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 distinción entre mayúsculas y minúsculas de la expresión regular global. | |
| commands | array of objects | no | Comandos remotos que se ejecutarán. 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 agent activo es compatible desde Zabbix agent 7.0. Los agents activos más antiguos ignorarán los comandos remotos incluidos en la respuesta del server a las comprobaciones activas. | |
| 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 procedentes de operaciones de acciones; "1" (wait) para comandos procedentes de la ejecución manual de un 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 la sincronización incremental de la 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 éxito.
Por ejemplo:
- El agent abre una conexión TCP
- El agent solicita la lista de comprobaciones
- El server responde con una lista de items y comandos remotos que se ejecutarán
- El agent analiza la respuesta
- Se cierra la conexión TCP
- El agent inicia la recopilación periódica de datos y ejecuta los comandos remotos (compatible desde Zabbix agent 7.0)
Tenga en cuenta que los datos de configuración (confidenciales) pueden quedar disponibles para las partes que tengan acceso al puerto trapper del server de Zabbix al utilizar una comprobación activa. Esto es posible porque cualquiera puede hacerse pasar por un agent activo y solicitar datos de configuración de los items; no se realiza ninguna autenticación a menos que utilice las opciones de cifrado.
Envío de datos recopilados
El agent envía
La solicitud de datos del agent contiene los valores de los 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.0.0",
"variant": 2
}
| Campo | Tipo | Obligatorio | Valor | |
|---|---|---|---|---|
| request | string | sí | agent data |
|
| data | array of objects | sí | Valores de los item. | |
| id | number | sí | Identificador del valor (contador incremental utilizado para comprobar si hay valores duplicados en caso de problemas de red). | |
| itemid | number | sí | Identificador del item. | |
| value | string | no | Valor del item. | |
| lastlogsize | number | no | lastlogsize del item. | |
| mtime | number | no | mtime del item. | |
| state | number | no | Estado del item. | |
| source | string | no | Origen del registro de eventos del valor. | |
| eventid | number | no | eventid del registro de eventos del valor. | |
| severity | number | no | Gravedad del registro de eventos del valor. | |
| timestamp | number | no | Marca de tiempo del registro de eventos del valor. | |
| clock | number | sí | Marca de tiempo del valor (segundos desde Epoch). | |
| ns | number | sí | 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 server a las comprobaciones activas. | |
| id | number | no | Identificador del comando remoto. | |
| value | string | no | Resultado de la ejecución del comando remoto si la ejecución se realizó correctamente. | |
| error | string | no | Mensaje de error de la ejecución del comando remoto si la ejecución falló. | |
| session | string | sí | Identificador de sesión único generado cada vez que se inicia el agent (32 dígitos hexadecimales). | |
| host | string | sí | Nombre del host. | |
| version | string | sí | Número de versión del agent. | |
| variant | number | sí | Variante del agent (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Se asigna un ID virtual a cada valor. El ID del valor es un contador ascendente simple, único dentro de una sesión de datos (identificada por el token de sesión). Este ID se utiliza para descartar valores duplicados que podrían enviarse en entornos con conectividad deficiente.
Respuesta del server
El server envía la respuesta de datos del agent 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"
}
| Campo | Tipo | Obligatorio | Valor |
|---|---|---|---|
| response | string | sí | success | failed |
| info | string | sí | Resultados del procesamiento de los item. |
Si el envío de algunos valores falla en el server (por ejemplo, porque el host o el item se han deshabilitado o eliminado), el agent no volverá a intentar enviar esos valores.
Por ejemplo:
- El agent abre una conexión TCP
- El agent envía una lista de valores
- El server procesa los datos y devuelve el estado
- Se cierra la conexión TCP
El mensaje de error se truncará a 2048 símbolos en el lado del server.
Mensaje de latido
El agent envía
El mensaje de latido se envía desde 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.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | El nombre del host. |
| heartbeat_freq | number | yes | La frecuencia de latido del agent (parámetro de configuración HeartbeatFrequency). |
| 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). |
Respuesta de redirección
Cuando se reasigna un host, el server puede indicar al agent que redirija su latido (y las comprobaciones activas posteriores) a otra instancia de proxy o server.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Instrucciones de redirección. | |
| revision | number | yes | Identificador de revisión de la configuración. | |
| address | string | yes | 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.