Esta sección proporciona detalles sobre las comprobaciones pasivas y activas realizadas por el Agente Zabbix y el Agente 2 Zabbix.
Zabbix utiliza un protocolo de comunicación basado en JSON para comunicarse con los agentes.
Los protocolos del agente Zabbix y del agente 2 Zabbix se han unificado desde Zabbix 7.0. La diferencia entre las solicitudes/respuestas del agente Zabbix y del agente 2 Zabbix se expresa mediante el valor de la etiqueta "variante".
Un chequeo pasivo es una simple solicitud de datos. El servidor o proxy de Zabbix solicita algunos datos (por ejemplo, la carga de la CPU) y el agente de Zabbix envía de vuelta el resultado al servidor.
Los chequeos pasivos se ejecutan de forma asíncrona: no es necesario recibir la respuesta a una solicitud antes de que se inicien otros chequeos. La resolución de 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 es accesible, el poller intentará la siguiente dirección disponible, aumentando la probabilidad de una conexión exitosa. Esta mejora se aplica tanto al servidor como al proxy de Zabbix.
La concurrencia máxima de chequeos asíncronos es 1000 (definida por MaxConcurrentChecksPerPoller).
El número de pollers de agente asíncronos se define mediante el parámetro StartAgentPollers.
Solicitud del servidor
Para la definición de la cabecera y la longitud de los datos, consulte los detalles del protocolo.
Campo | Tipo | Obligatorio | Valor | |
---|---|---|---|---|
request | string | sí | "passive checks" |
|
data | array de objeto | sí | Elemento de chequeo pasivo. | |
key | string | sí | Clave del elemento con macros expandidas. | |
timeout | string | sí | Tiempo de espera del elemento. |
Respuesta del agente
Campo | Tipo | Obligatorio | Valor | |
---|---|---|---|---|
version | string | sí | El número de versión del agente. | |
variant | number | sí | Variante del agente (1 - Zabbix agent, 2 - Zabbix agent 2). | |
data | array de objeto | sí | Contiene el resultado del chequeo. | |
value | string | no | El valor del elemento si el chequeo fue exitoso. | |
error | string | no | El mensaje de error si el chequeo no fue exitoso. |
Por ejemplo, para elementos soportados:
Para elementos no soportados:
Para asegurarse de que el servidor o proxy de Zabbix pueda funcionar con agentes de versiones anteriores a la 7.0, que tienen protocolo de texto sin formato, se implementa una conmutación por error al protocolo anterior.
Las comprobaciones pasivas se realizan utilizando el protocolo JSON (7.0 y posteriores) después del reinicio o cuando se cambia la configuración de la interfaz. Si no se recibe un JSON válido como respuesta (el agente envió "ZBX_NOTSUPPORTED"), Zabbix almacenará en caché la interfaz como protocolo anterior y reintenta la comprobación enviando solo la clave de la métrica.
Tenga en cuenta que cada hora el servidor/proxy Zabbix volverá a intentar trabajar con el nuevo protocolo con todas las interfaces, recurriendo al protocolo anterior si es necesario.
Las comprobaciones activas requieren un procesamiento más complejo. El agente primero debe recuperar del servidor/proxy una lista de métricas y/o comandos remotos para su procesamiento independiente.
Los servidores/proxies de los que obtener las comprobaciones activas se enumeran en el parámetro 'ServerActive' del archivo de configuración del agente. La frecuencia con la que se solicitan estas comprobaciones la establece el parámetro 'RefreshActiveChecks' en el mismo archivo de configuración. Sin embargo, si falla la actualización de las comprobaciones activas, se vuelve a intentar después de 60 segundos prefijados.
Desde Zabbix 6.4, el agente (en modo activo) ya no recibe del servidor/proxy una copia completa de la configuración una vez cada dos minutos (predeterminado). En cambio, para disminuir el tráfico de red y el uso de recursos, se realiza una sincronización de configuración incremental cada 5 segundos (predeterminado) en la cual el servidor/proxy proporciona una copia completa de la configuración solo si el agente aún no la ha recibido. , o algo ha cambiado en la configuración del equipo, macros globales o expresiones regulares globales.
Luego, el agente envía periódicamente los nuevos valores a los servidores. Si el agente recibió algún comando remoto para ejecutar, también se enviará el resultado de la ejecución. Tenga en cuenta que la ejecución remota de comandos en un agente activo se admite desde el agente Zabbix 7.0.
Si un agente está detrás del firewall, puede considerar considerar solo comprobaciones activas porque en este caso no necesitaría modificar el firewall para permitir conexiones entrantes iniciales.
Solicitud del agente
La solicitud de comprobaciones activas se utiliza para obtener las comprobaciones activas que debe procesar el agente. Esta solicitud es enviada por el agente al iniciar 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.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 | 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á establecido. |
port | number | no | El valor del parámetro de configuración ListenPort si está establecido y no es el puerto de escucha por defecto del agente. |
version | string | sí | El número de versión del agente. |
variant | number | sí | Variante del agente (1 - Zabbix agent, 2 - Zabbix agent 2). |
config_revision | number | no | Identificador de configuración para la sincronización incremental de configuración. |
session | string | no | Identificador de sesión para la sincronización incremental de configuración. |
Respuesta del servidor
La respuesta de comprobaciones activas es enviada por el servidor de vuelta al agente 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 de error en caso de fallo. | |
data | array de objetos | no | Elementos de comprobación activa. Se omite si la configuración del host no ha cambiado. | |
key | string | no | Clave del elemento con macros expandidas. | |
itemid | number | no | Identificador del elemento. | |
delay | string | no | Intervalo de actualización del elemento. Los intervalos flexibles/de programación son compatibles tanto por Zabbix agent como por Zabbix agent 2 desde Zabbix 7.0. |
|
lastlogsize | number | no | lastlogsize del elemento. | |
mtime | number | no | mtime del elemento. | |
timeout | string | no | timeout del elemento. | |
refresh_unsupported | number | no | Intervalo de actualización de elementos no soportados. | |
regexp | array de objetos | 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/minúsculas de la expresión regular global. | |
commands | array de objetos | no | Comandos remotos a ejecutar. Se incluyen si la ejecución de comandos remotos ha sido activada por una operación de acción o por la ejecución manual de un script. Tenga en cuenta que la ejecución de comandos remotos en un agente activo es compatible desde Zabbix agent 7.0. Los agentes activos más antiguos ignorarán cualquier comando remoto incluido en la respuesta de comprobaciones activas del servidor. | |
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; "1" (wait) para comandos de ejecución manual de script). | |
config_revision | number | no | Identificador de configuración para la 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 ha cambiado. |
El servidor debe responder con éxito.
Por ejemplo:
Tenga en cuenta que los datos de configuración (sensibles) pueden estar disponibles para las partes que tengan acceso al puerto trapper del servidor Zabbix al utilizar una comprobación activa. Esto es posible porque cualquiera puede hacerse pasar por un agente activo y solicitar datos de configuración de elementos; no se realiza autenticación a menos que utilice opciones de cifrado.
El agente envía
La solicitud de datos del agente contiene los valores de las métricas recopiladas 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": "1234456akdsjhfoui",
"host": "Zabbix server",
"version": "7.0.0",
"variant": 2
}
Campo | Tipo | Obligatorio | Valor | |
---|---|---|---|---|
request | cadena | si | agent data |
|
data | conjunto de objetos | si | Valores de las métricas. | |
id | número | si | El identificador de valor (contador incremental utilizado para comprobar valores duplicados en caso de problemas de red). | |
itemid | cadena | si | El identificador de la métrica. | |
value | cadena | no | El valor de la métrica. | |
lastlogsize | número | no | El último tamaño del registro de la métrica. | |
mtime | número | no | El valor mtime de la métrica. | |
state | número | no | El estado de la métrica. | |
source | cadena | no | El origen del registro de eventos de valor. | |
eventid | número | no | El valor del registro de eventos eventid. | |
severity | número | no | El valor de gravedad del registro de eventos. | |
timestamp | número | no | La marca de tiempo del registro de eventos del valor. | |
clock | número | si | La marca de tiempo del valor (segundos desde la época). | |
ns | número | si | La marca de tiempo del valor es nanosegundos. | |
comandos | conjunto de objetos | no | Resultado de la ejecución de comandos remotos. Tenga en cuenta que la ejecución remota de comandos en un agente activo se admite desde el agente Zabbix 7.0. Los agentes activos más antiguos ignorarán cualquier comando remoto incluido en la respuesta del servidor de comprobaciones activas. | |
id | número | no | Identificador de comando remoto. | |
value | cadena | no | Resultado de la ejecución remota del comando si la ejecución fue exitosa. | |
error | cadena | no | Mensaje de error de ejecución remota del comando si la ejecución falló. | |
session | cadena | si | Identificador de sesión único generado cada vez que se inicia el agente. | |
host | cadena | si | Nombre del equipo. | |
version | cadena | si | El número de versión del agente. | |
variant | número | si | La variante del agente (1 - agente Zabbix, 2 - agente Zabbix 2). |
Se asigna una identificación virtual a cada valor. El ID del valor es un contador ascendente simple, único dentro de una sesión de datos (identificado por el token de la sesión). Este ID se utiliza para descartar valores duplicados que puedan enviarse en entornos con mala conectividad.
Respuesta del servidor
El servidor envía la respuesta de datos del agente al agente después de procesar la solicitud de datos del agente.
Campo | Tipo | Obligatorio | Valor |
---|---|---|---|
response | cadena | si | success | failed |
info | cadena | si | Resultados del procesamiento de las métricas. |
Si el envío de algunos valores falla en el servidor (por ejemplo, porque el equipo o la métrica han sido deshabilitados o eliminados), el agente no vuelva a intentar enviar esos valores.
Por ejemplo:
Observe cómo en el ejemplo anterior el estado no admitido para vfs.fs.size[/nono] se indica mediante el valor de "estado" de 1 y el mensaje de error en la propiedad "value".
El mensaje de error se recortará a 2048 símbolos por parte del servidor.
El agente envía
El mensaje de latido es enviado por un agente activo al servidor/proxy de Zabbix cada HeartbeatFrequency segundos (configurado en el archivo de configuración del agente Zabbix/ agente 2).
Se utiliza para monitorizar la disponibilidad de las comprobaciones activas.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "7.0.0",
"variant": 2
}
Campo | Tipo | Obligatorio | Valor |
---|---|---|---|
request | cadena | sí | active check heartbeat |
host | cadena | sí | El nombre del equipo. |
heartbeat_freq | número | sí | La frecuencia de latido del agente (parámetro de configuración HeartbeatFrequency). |
version | cadena | sí | El número de versión del agente. |
variant | número | sí | La variante del agente (1 - agente Zabbix, 2 - agente Zabbix 2). |
Respuesta de redirección
Cuando un equipo ha sido reasignado, el servidor puede indicar al agente que redirija su latido (y las comprobaciones activas posteriores) a otra instancia de proxy o servidor.
Campo | Tipo | Obligatorio | Valor | |
---|---|---|---|---|
response | cadena | sí | success | failed |
|
redirect | objeto | sí | Instrucciones de redirección. | |
revision | número | sí | Identificador de revisión de configuración. | |
address | cadena | sí | Dirección del servidor/proxy de destino. |
Zabbix ocupará hasta 16 MB de datos codificados en XML Base64, pero un único valor decodificado no debe tener más de 64 KB, de lo contrario se truncará a 64 KB durante la decodificación.