De header is aanwezig in antwoord- en verzoekberichten tussen Zabbix componenten. Het is vereist om de lengte van het bericht te bepalen, als dit het geval is gecomprimeerd of niet en het formaat van bericht lengte velden. De kop bestaat uit:
<PROTOCOL> - "ZBXD" (4 bytes).
<FLAGS> - de protocol vlaggen, (1 byte). 0x01 - Zabbix-communicatieprotocol, 0x02 - compressie, 0x04 - groot pakket).
<DATALEN> - gegevenslengte (4 bytes of 8 bytes voor groot pakket). 1 wordt geformatteerd als 01/00/00/00 (vier bytes, 32-bits getal in little-endian-formaat) of 01/00/00/00/00/00/00/00 (acht bytes, 64-bits getal in kleine -endian formaat) voor grote pakketten.
<RESERVED> - ongecomprimeerde gegevenslengte (4 bytes of 8 bytes voor grote pakketten). 1 wordt geformatteerd als 01/00/00/00 (vier bytes, 32-bits getal in little-endian-formaat) of 01/00/00/00/00/00/00/00 (acht bytes, 64-bits getal in kleine -endian formaat) voor grote pakketten.
Wanneer compressie is ingeschakeld (0x02 vlag) de <RESERVED> bytes bevat niet-gecomprimeerde gegevensgrootte.
Het Zabbix-protocol heeft een pakket grootte limiet van 1 GB per verbinding. De limiet van 1 GB wordt toegepast voor de lengte van ontvangen pakketgegevens en voor niet-gecomprimeerde gegevens lengte, maar wanneer groot pakket is ingeschakeld (0x04 vlag) is het mogelijk voor Zabbix-proxy om configuratie te ontvangen met een grootte tot 16 GB; Opmerking dat grote pakket kan alleen worden gebruikt voor Zabbix proxy configuratie, en Zabbix-server wordt automatisch ingesteld (vlag (0x04) en verzendt lengtevelden als 8 bytes elk wanneer de gegevenslengte vóór compressie 4GB overschrijdt.
The header consists of four fields. All numbers in the header are formatted as little-endian.
Field | Size | Size (large packet) |
Description |
---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" or 5A 42 58 44 |
<FLAGS> |
1 | 1 | Protocol flags:0x01 - Zabbix communications protocol0x02 - compression0x04 - large packet |
<DATALEN> |
4 | 8 | Data length. |
<RESERVED> |
4 | 8 | When compression is used (0x02 flag) - the length of uncompressed dataWhen compression is not used - 00 00 00 00 |
Hier zijn codefragmenten die laten zien hoe u de Zabbix-protocolheader kunt toevoegen aan de gegevens
die u wilt verzenden om pakket
te verkrijgen dat u moet verzenden naar Zabbix zodat het correct wordt geïnterpreteerd.
Taal | Code |
---|---|
bash | printf -v LENGTE '%016x' "${#DATA}"PACK=""for (( i=14; i>=0; i-=2 )); do PACK="$PACK\\x${LENGTH:$i:2}"; doneprintf "ZBXD\1$PACK%s" "$DATA" |
Java | byte[] header = nieuwe 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[] pakket = nieuwe byte[header.length + data.length];System.arraycopy(header, 0, packet, 0, header.length);System.arraycopy(data, 0, packet, header.length, data .lengte); |
|
PHP | $pakket = "ZBXD\1" . pack('P', strlen($data)) . $data; or$packet = "ZBXD\1" . pack('V', strlen($data)) . "\0\0\0\0" . $gegevens; |
Perl | mijn $pakket = "ZBXD\1" . pack('<Q', lengte($data)) . $data; ofmijn $pakket = "ZBXD\1" . pack('V', lengte($data)) . "\0\0\0\0" . $gegevens; |
Python | packet = "ZBXD\1" + struct.pack('<Q', len(data)) + data |