Заглавље је присутно у свим порукама захтева и одговора између Zabbix компоненти. Потребно је одредити дужину поруке, да ли је компримована или не, да ли је велики пакет или не.
Zabbix комуникациони протокол има ограничење величине пакета од 1GB по конекцији. Ограничење од 1GB примењује се и на дужину примљеног пакета података и на дужину некомпримованих података.
Приликом слања конфигурације на Zabbix прокси, ограничење величине пакета се повећава на 4GB да би се то омогућило синхронизовање великих конфигурација. Када дужина података пре компресије пређе 4GB, Zabbix сервер аутоматски почиње да користи формат великог пакета (0x04 flag) који повећава ограничење величине пакета на 16GB.
Имајте на уму да иако се велики формат пакета може користити за слање било каквих података, тренутно само Zabbix прокси конфигурациони синхронизатор може да обрађује пакете који су већи од 1GB.
Заглавље се састоји од четири поља. Сви бројеви у заглављу су форматирани у формату little-endian.
Field | Size | Size (large packet) |
Description |
---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" или 5А 42 58 44 |
< FLAGS > |
1 | 1 | Заставице протокола:0x01 - Zabbix комуникациони протокол0x02 - компресија0x04 - велики пакет |
<DATALEN> |
4 | 8 | Дужина података. |
<RESERVED> |
4 | 8 | Када се користи компресија (заставица 0x02 ) - дужина некомпримованих податакаКада се компресија не користи - 00 00 00 00 |
Ево неких исечака кода који показују како додати заглавље Zabbix протокола подацима које желите да пошаљете да бисте добили пакет који треба да пошаљете Zabbix-у како би се исправно интерпретирао. Ови исечци кода претпостављају да подаци нису већи од 1GB, тако да се формат великог пакета не користи.
или
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
или
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;
или
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;