Procesos
Descripción general
Zabbix consta de varios procesos que trabajan juntos para supervisar sistemas y enviar notificaciones. Cada proceso tiene una función específica en la infraestructura de supervisión.
Procesos principales
- Server - el proceso central que realiza el sondeo y la captura de datos, calcula triggers y envía notificaciones a los usuarios.
- agent - recopila datos de los hosts monitorizados.
- Agent 2 - un agent de nueva generación con arquitectura de complementos y capacidades mejoradas.
- proxy - recopila datos de monitorización de los dispositivos monitorizados y envía la información al server de Zabbix.
- Java gateway - permite la monitorización de aplicaciones Java.
Encabezado
El encabezado está presente en todos los mensajes de solicitud y respuesta entre los componentes de Zabbix.
Es necesario para determinar la longitud del mensaje, si está comprimido o no, y si es un paquete grande o no.
El protocolo de comunicaciones de Zabbix tiene un límite de tamaño de paquete de 1 GB por conexión. El límite de 1 GB
se aplica tanto a la longitud de los datos del paquete recibido como a la longitud de los datos sin comprimir.
Al enviar la configuración a Zabbix proxy, el límite de tamaño de paquete se incrementa a 4 GB para permitir
la sincronización de configuraciones grandes. Cuando la longitud de los datos antes de la compresión supera los 4 GB, Zabbix server automáticamente
empieza a usar el formato de paquete grande (marca 0x04), lo que aumenta el límite de tamaño de paquete a 16 GB.
Tenga en cuenta que, aunque el formato de paquete grande puede usarse para enviar cualquier dato, actualmente solo el sincronizador de configuración de Zabbix proxy
puede manejar paquetes de más de 1 GB.
Estructura del encabezado
El encabezado consta de cuatro campos. Todos los números del encabezado están formateados en little-endian.
| Field | Size | Size (large packet) |
Description |
|---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" o 5A 42 58 44 |
<FLAGS> |
1 | 1 | Banderas del protocolo:0x01 - protocolo de comunicaciones de Zabbix0x02 - compresión0x04 - paquete grande |
<DATALEN> |
4 | 8 | Longitud de los datos. |
<RESERVED> |
4 | 8 | Cuando se usa compresión (bandera 0x02) - la longitud de los datos sin comprimirCuando no se usa compresión - 00 00 00 00 |
Ejemplos de encabezado
Aquí hay algunos fragmentos de código que muestran cómo agregar el encabezado del protocolo Zabbix a los datos que desea enviar para obtener el paquete que debe enviar a Zabbix para que se interprete correctamente. Estos fragmentos de código asumen que los datos no son mayores que 1 GB, por lo que no se utiliza el formato de paquete grande.
Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data
o
def zbx_create_header(plain_data_size, compressed_data_size=None):
protocol = b"ZBXD"
flags = 0x01
if compressed_data_size is None:
datalen = plain_data_size
reserved = 0
else:
flags |= 0x02
datalen = compressed_data_size
reserved = plain_data_size
return protocol + struct.pack("<BII", flags, datalen, reserved)
packet = zbx_create_header(len(data)) + data
Perl
my $packet = "ZBXD\1" . pack("(II)<", length($data), 0) . $data;
o
sub zbx_create_header($;$)
{
my $plain_data_size = shift;
my $compressed_data_size = shift;
my $protocol = "ZBXD";
my $flags = 0x01;
my $datalen;
my $reserved;
if (!defined($compressed_data_size))
{
$datalen = $plain_data_size;
$reserved = 0;
}
else
{
$flags |= 0x02;
$datalen = $compressed_data_size;
$reserved = $plain_data_size;
}
return $protocol . chr($flags) . pack("(II)<", $datalen, $reserved);
}
my $packet = zbx_create_header(length($data)) . $data;
PHP
$packet = "ZBXD\1" . pack("VV", strlen($data), 0) . $data;
o
function zbx_create_header($plain_data_size, $compressed_data_size = null)
{
$protocol = "ZBXD";
$flags = 0x01;
if (is_null($compressed_data_size))
{
$datalen = $plain_data_size;
$reserved = 0;
}
else
{
$flags |= 0x02;
$datalen = $compressed_data_size;
$reserved = $plain_data_size;
}
return $protocol . chr($flags) . pack("VV", $datalen, $reserved);
}
$packet = zbx_create_header(strlen($data)) . $data;
Bash
datalen=$(printf "%08x" ${#data})
datalen="\\x${datalen:6:2}\\x${datalen:4:2}\\x${datalen:2:2}\\x${datalen:0:2}"
printf "ZBXD\1${datalen}\0\0\0\0%s" "$data"