This is the documentation page for an unsupported version of Zabbix.
Is this not what you were looking for? Switch to the current version or choose one from the drop-down menu.

6 Capçalera

Vista general

La capçalera és present a tots els missatges de petició i de resposta entre els components de Zabbix. És necessari determinar la longitud del missatge, si és comprimit o no, i si és o no un paquet gros.

El protocol de comunicacions de Zabbix tenen una mida limitada de paquet d'1Go per connexió. El límit d'1Go s'aplica tant a la longitud de les dades del paquet rebut com a la de les dades no comprimides.

Quan s'envia la configuració al proxy de Zabbix, el límit de mida del paquet s'incrementa a 4Go per permetre sincronitzar configuracions grans. Quan la longitud de les dades abans de la compressió passa de 4Go, el servidor de Zabbix engega automàticament l'ús de format de paquets grans (flag 0x04), que augmenta el límit de la mida del paquet a 16Go.

Veieu que mentre un format de gran paquet pot emprar-se per enviar qualsevol informació, actualment només el sincronitzar de configuració del proxy Zabbix pot manejar els paquets superiors a 1Go.

Estructura

La capçalera es composa de quatre camps. Tots els nombres de la capçalera són amb format Little Endian.

Camp Mida Mida
(paquet gros)
Descripció
<PROTOCOL> 4 4 "ZBXD" or 5A 42 58 44
<FLAGS> 1 1 Indicadors de protocol:
0x01 - Protocol de comunicacions Zabbix
0x02 - compressió
0x04 - paquet gros
<DATALEN> 4 8 Longitud de les dades.
<RESERVED> 4 8 Quan la compressió sigui emprada (0x02 flag) - la longitud de les dades no comprimides
Quan no s'empra la compressió - 00 00 00 00

Exemples

Aquí hi ha alguns extractes de codi que ensenyen com afegir una capçalera de protocol Zabbix a les dades que volem enviar dins l'ordre per obtindre el paquet que hem d'enviar a Zabbix, per tal que sigui interpretat correctament. Aquestes mostres de codi suposen que les dades no són superiors a 1Go i, per tant, el format de paquet gros no s'empra pas.

Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data
Copy
✔ Copied

or

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
Copy
✔ Copied
Perl
my $packet = "ZBXD\1" . pack("(II)<", length($data), 0) . $data;
Copy
✔ Copied

or

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;
Copy
✔ Copied
PHP
$packet = "ZBXD\1" . pack("VV", strlen($data), 0) . $data;
Copy
✔ Copied

or

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;
Copy
✔ Copied
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"
Copy
✔ Copied
To toggle search highlight, press Ctrl+Alt+H
Have an improvement suggestion for this page? Select the text that could be improved and press Ctrl+Enter to send it to the editors.