Zabbix Documentation 4.4

2.23.04.04.2 (current)In development:4.4 (devel)Unsupported:1.82.02.43.23.4

User Tools

Site Tools

This translation is older than the original page and might be outdated. See what has changed.

Sidebar

ru:manual:appendix:protocols:header_datalen

4 Длина заголовка и данных

Обзор

Заголовок и длина данных присутствуют в сообщениях ответа и запроса между компонентами Zabbix. Это требуется для определения длины сообщения.

<HEADER> - "ZBXD\x01" (5 байт)
<DATALEN> - размер данных (8 байт). число 1 отформатируется в 01/00/00/00/00/00/00/00 (восемь байт, 64-битное число в little-endian формате)

Чтобы не израсходовать память полностью (в теории) Zabbix протокол ограничен на прием данных только 128МБ за одно соединение.

Реализация

Здесь представлены выдержки кода, которые показывают как добавить заголовок Zabbix протокола к data, которые вы хотите отправить, чтобы получить packet вам необходимо отправлять на Zabbix, так чтобы он интерпретировался корректным образом.

ЯзыкКод
bash
printf -v LENGTH '%016x' "${#DATA}"
PACK=""
for i in {14..0..-2}; do PACK="$PACK\\x${LENGTH:$i:2}"; done
printf "ZBXD\1$PACK%s" $DATA
Java
byte[] header = new byte[] {
	'Z', 'B', 'X', 'D', '\1',
	(byte)(data.length & 0xFF),
	(byte)((data.length >> 8) & 0xFF),
	(byte)((data.length >> 16) & 0xFF),
	(byte)((data.length >> 24) & 0xFF),
	'\0', '\0', '\0', '\0'};
 
byte[] packet = new byte[header.length + data.length];
System.arraycopy(header, 0, packet, 0, header.length);
System.arraycopy(data, 0, packet, header.length, data.length);
PHP
$packet = "ZBXD\1" . pack('P', strlen($data)) . $data;
или
$packet = "ZBXD\1" . pack('V', strlen($data)) . "\0\0\0\0" . $data;
Perl
my $packet = "ZBXD\1" . pack('<Q', length($data)) . $data;
или
my $packet = "ZBXD\1" . pack('V', length($data)) . "\0\0\0\0" . $data;
Python
packet = "ZBXD\1" + struct.pack('<Q', len(data)) + data