6 Header标头
概述
Zabbix 通信协议每个连接的数据包大小限制为 1GB。 1GB 的限制适用于接收到的数据包数据长度和未压缩的数据长度。
将配置发送到 Zabbix 代理时,数据包大小限制增加到 4GB 以允许同步大型配置。 当压缩前的数据长度超过 4GB 时,Zabbix 服务器自动开始使用大数据包格式(0x04 标志),将数据包大小限制增加到 16GB。
结构
标头由四个字段组成。 标头中的所有数字都采用小端格式。
例子
以下是一些代码片段,展示了如何将 Zabbix 协议标头添加到您要发送的数据中,以便获得您应该发送到 Zabbix 的数据包,从而正确解释它。 这些代码片段假定数据不大于 1GB,因此不使用大数据包格式。
Python
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)
Perl
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;
· }
my $packet = zbx_create_header(length($data)) . $data;
PHP
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;