4 Procesy Zabbix
Przegląd
Zabbix składa się z kilku procesów, które współpracują ze sobą, aby monitorować systemy i wysyłać powiadomienia. Każdy proces pełni określoną rolę w infrastrukturze monitorowania.
Procesy główne
- Server - centralny proces, który wykonuje odpytywanie i przechwytywanie danych, oblicza wyzwalacze i wysyła powiadomienia do użytkowników.
- Agent - zbiera dane z monitorowanych hostów.
- Agent 2 - agent nowej generacji z architekturą wtyczek i rozszerzonymi możliwościami.
- Proxy - zbiera dane monitorujące z monitorowanych urządzeń i wysyła informacje do serwera Zabbix.
- Java gateway - umożliwia monitorowanie aplikacji Java.
Nagłówek
Nagłówek jest obecny we wszystkich wiadomościach żądań i odpowiedzi między komponentami Zabbix.
Jest wymagany do określenia długości wiadomości, tego, czy jest skompresowana, oraz tego, czy jest to duży pakiet.
Protokół komunikacji Zabbix ma limit rozmiaru pakietu 1 GB na połączenie. Limit 1 GB
jest stosowany zarówno do długości odebranych danych pakietu, jak i do długości danych nieskompresowanych.
Podczas wysyłania konfiguracji do Zabbix proxy limit rozmiaru pakietu jest zwiększany do 4 GB, aby umożliwić
synchronizację dużych konfiguracji. Gdy długość danych przed kompresją przekracza 4 GB, serwer Zabbix automatycznie
zaczyna używać formatu dużego pakietu (flaga 0x04), który zwiększa limit rozmiaru pakietu do 16 GB.
Należy pamiętać, że chociaż format dużego pakietu może być używany do wysyłania dowolnych danych, obecnie tylko synchronizator konfiguracji Zabbix proxy
może obsługiwać pakiety większe niż 1 GB.
Struktura nagłówka
Nagłówek składa się z czterech pól. Wszystkie liczby w nagłówku są sformatowane w kolejności little-endian.
| Field | Size | Size (large packet) |
Description |
|---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" lub 5A 42 58 44 |
<FLAGS> |
1 | 1 | Flagi protokołu:0x01 - protokół komunikacyjny Zabbix0x02 - kompresja0x04 - duży pakiet |
<DATALEN> |
4 | 8 | Długość danych. |
<RESERVED> |
4 | 8 | Gdy używana jest kompresja (flaga 0x02) - długość nieskompresowanych danychGdy kompresja nie jest używana - 00 00 00 00 |
Przykłady nagłówka
Poniżej znajdują się przykładowe fragmenty kodu pokazujące, jak dodać nagłówek protokołu Zabbix do danych, które chcesz wysłać, aby uzyskać pakiet, który należy wysłać do Zabbix, tak aby został poprawnie zinterpretowany. Te fragmenty kodu zakładają, że rozmiar danych nie przekracza 1 GB, więc nie jest używany format dużego pakietu.
Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data
lub
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
Perl
my $packet = "ZBXD\1" . pack("(II)<", length($data), 0) . $data;
lub
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;
PHP
$packet = "ZBXD\1" . pack("VV", strlen($data), 0) . $data;
lub
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;
Bash
datalen=$(printf "%08x" ${#data})
datalen="\\x${datalen:6:2}\\x${datalen:4:2}\\x${datalen:2:2}\\x${datalen:0:2}"
printf "ZBXD\1${datalen}\0\0\0\0%s" "$data"