Prozesse
Übersicht
Zabbix besteht aus mehreren Prozessen, die zusammenarbeiten, um Systeme zu überwachen und Benachrichtigungen zu senden. Jeder Prozess hat eine spezifische Rolle in der Überwachungsinfrastruktur.
Kernprozesse
- Server - der zentrale Prozess, der Daten abfragt und entgegennimmt, Auslöser berechnet und Benachrichtigungen an Benutzer sendet.
- Agent - sammelt Daten von überwachten Hosts.
- Agent 2 - ein Agent der neuen Generation mit Plugin-Architektur und erweiterten Funktionen.
- Proxy - sammelt Überwachungsdaten von überwachten Geräten im Auftrag des Zabbix Servers und sendet die Informationen in einer verteilten Umgebung an einen zentralen Zabbix Server.
- Java gateway - ermöglicht die Überwachung von Java-Anwendungen.
Für den einfachen Zugriff auf Zabbix von überall und von jeder Plattform aus wird die webbasierte Oberfläche bereitgestellt. Die Oberfläche ist Teil des Zabbix Servers und läuft in der Regel (aber nicht zwingend) auf demselben physischen Rechner wie der Server.
Alle Konfigurationsinformationen sowie die von Zabbix gesammelten Daten werden in einer Datenbank gespeichert.
Überschrift
Der Header ist in allen Anfrage- und Antwortnachrichten zwischen Zabbix-Komponenten vorhanden.
Er wird benötigt, um die Nachrichtenlänge zu bestimmen, ob die Nachricht komprimiert ist oder nicht und ob es sich um ein großes Paket handelt oder nicht.
Das Zabbix-Kommunikationsprotokoll hat pro Verbindung ein Paketgrößenlimit von 1 GB. Das Limit von 1 GB
gilt sowohl für die Länge der empfangenen Paketdaten als auch für die Länge der unkomprimierten Daten.
Beim Senden der Konfiguration an den Zabbix-Proxy wird das Paketgrößenlimit auf 4 GB erhöht, um
die Synchronisierung großer Konfigurationen zu ermöglichen. Wenn die Datenlänge vor der Komprimierung 4 GB überschreitet, verwendet der Zabbix-Server automatisch
das große Paketformat (0x04-Flag), wodurch das Paketgrößenlimit auf 16 GB erhöht wird.
Beachten Sie, dass das große Paketformat zwar zum Senden beliebiger Daten verwendet werden kann, derzeit jedoch nur der Zabbix-Proxy
configuration syncer Pakete verarbeiten kann, die größer als 1 GB sind.
Headerstruktur
Der Header besteht aus vier Feldern. Alle Zahlen im Header sind im Little-Endian-Format dargestellt.
| Field | Size | Size (large packet) |
Description |
|---|---|---|---|
<PROTOCOL> |
4 | 4 | "ZBXD" oder 5A 42 58 44 |
<FLAGS> |
1 | 1 | Protokoll-Flags:0x01 - Zabbix-Kommunikationsprotokoll0x02 - Komprimierung0x04 - großes Paket |
<DATALEN> |
4 | 8 | Datenlänge. |
<RESERVED> |
4 | 8 | Bei Verwendung von Komprimierung (Flag 0x02) - die Länge der unkomprimierten DatenWenn keine Komprimierung verwendet wird - 00 00 00 00 |
Header-Beispiele
Hier sind einige Codeausschnitte, die zeigen, wie Sie dem zu sendenden Datenpaket den Zabbix-Protokoll-Header hinzufügen, um das Paket zu erhalten, das Sie an Zabbix senden sollten, damit es korrekt interpretiert wird. Diese Codeausschnitte gehen davon aus, dass die Daten nicht größer als 1 GB sind, sodass das Format für große Pakete nicht verwendet wird.
Python
packet = b"ZBXD\1" + struct.pack("<II", len(data), 0) + data
oder
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;
oder
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;
oder
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"