A fejléc minden kérés- és válaszüzenetben megtalálható a Zabbix-komponensek között. Meg kell határozni az üzenet hosszát, hogy tömörített-e vagy sem, nagy csomag-e vagy sem.
A Zabbix kommunikációs protokoll kapcsolatonként 1 GB-os csomagméret-korláttal rendelkezik. A korlát 1 GB egyaránt vonatkozik a vett csomagadatok hosszára és a tömörítetlen adathosszra.
Amikor konfigurációt küld a Zabbix proxynak, a csomagméret 4 GB-ra nő, hogy lehetővé tegye nagy konfigurációk szinkronizálása. Ha a tömörítés előtti adathossz meghaladja a 4 GB-ot, a Zabbix automatikusan kiszolgál elkezdi használni a nagy csomagformátumot (0x04 jelző), amely 16 GB-ra növeli a csomag méretkorlátját.
Vegye figyelembe, hogy míg a nagy csomagformátum bármilyen adat küldésére használható, jelenleg csak a Zabbix proxy A konfigurációs szinkronizáló képes kezelni az 1 GB-nál nagyobb csomagokat.
A fejléc négy mezőből áll. A fejlécben szereplő összes szám little-endian formátumú.
Mező | Méret | Méret (nagy csomag) |
Leírás |
---|---|---|---|
<PROTOKOLL> |
4 | 4 | "ZBXD" vagy 5A 42 58 44 |
<FLAGS> |
1 | 1 | Protokolljelzők:0x01 - Zabbix kommunikációs protokoll0x02 - tömörítés0x04 - nagy csomag |
<ADATOK> |
4 | 8 | Adathossz. |
<FOGLALVA> |
4 | 8 | Tömörítés használata esetén (0x02 jelző) – a tömörítetlen adatok hossza.Ha nincs tömörítés – 00 00 00 00 |
Here are some code snippets showing how to add Zabbix protocol header to the data you want to send in order to obtain the packet you should send to Zabbix so that it is interpreted correctly. These code snippets assume that the data is not larger than 1GB, thus the large packet format is not used.
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
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;
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;