4 Zabbix procesi
Pārskats
Zabbix sastāv no vairākiem procesiem, kas darbojas kopā, lai uzraudzītu sistēmas un nosūtītu paziņojumus. Katram procesam uzraudzības infrastruktūrā ir noteikta loma.
Pamata procesi
- Server - centrālais process, kas veic datu aptauju un uztveršanu, aprēķina trigerus un nosūta paziņojumus lietotājiem.
- Agent - apkopo datus no uzraudzītajiem hosts.
- Agent 2 - jaunās paaudzes aģents ar spraudņu arhitektūru un paplašinātām iespējām.
- Proxy - apkopo uzraudzības datus no uzraudzītajām ierīcēm un nosūta informāciju uz Zabbix serveri.
- Java gateway - nodrošina Java lietojumprogrammu uzraudzību.
Virsraksts
Galvene ir iekļauta visos pieprasījuma un atbildes ziņojumos starp Zabbix komponentēm.
Tā ir nepieciešama, lai noteiktu ziņojuma garumu, to, vai tas ir saspiests, un to, vai tas ir liels pakotnes formāts.
Zabbix saziņas protokolam ir 1 GB pakotnes lieluma ierobežojums vienam savienojumam. 1 GB ierobežojums
tiek piemērots gan saņemtās pakotnes datu garumam, gan nesaspiesto datu garumam.
Nosūtot konfigurāciju uz Zabbix starpniekserveris, pakotnes lieluma ierobežojums tiek palielināts līdz 4 GB, lai ļautu
sinhronizēt lielas konfigurācijas. Ja datu garums pirms saspiešanas pārsniedz 4 GB, Zabbix serveris automātiski
sāk izmantot lielas pakotnes formātu (0x04 karodziņš), kas palielina pakotnes lieluma ierobežojumu līdz 16 GB.
Ņemiet vērā, ka, lai gan lielas pakotnes formātu var izmantot jebkuru datu nosūtīšanai, pašlaik tikai Zabbix starpniekservera
konfigurācijas sinhronizētājs var apstrādāt pakotnes, kas ir lielākas par 1 GB.
Galvenes struktūra
Galvene sastāv no četriem laukiem. Visi skaitļi galvenē ir formatēti kā little-endian.
| Field | Size | Size (large packet) |
Description |
|---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" vai 5A 42 58 44 |
<FLAGS> |
1 | 1 | Protokola karodziņi:0x01 - Zabbix sakaru protokols0x02 - saspiešana0x04 - liels pakotnes izmērs |
<DATALEN> |
4 | 8 | Datu garums. |
<RESERVED> |
4 | 8 | Ja tiek izmantota saspiešana (0x02 karodziņš) - nesaspiesto datu garumsJa saspiešana netiek izmantota - 00 00 00 00 |
Galvenes piemēri
Šeit ir daži koda fragmenti, kas parāda, kā pievienot Zabbix protokola galveni datiem, kurus vēlaties nosūtīt, lai iegūtu paketi, kas jānosūta uz Zabbix, lai tā tiktu interpretēta pareizi. Šie koda fragmenti pieņem, ka datu apjoms nav lielāks par 1 GB, tāpēc lielās paketes formāts netiek izmantots.
Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data
vai
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;
vai
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;
vai
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"