Passive und aktive Prüfprotokolle
Dieser Abschnitt enthält Protokolldetails zu passiven und aktiven Prüfungen, die von Zabbix Agent und Zabbix agent 2 durchgeführt werden.
Zabbix verwendet für die Kommunikation mit den Agents ein JSON-basiertes Kommunikationsprotokoll.
Die Protokolle von Zabbix Agent und Zabbix agent 2 sind seit Zabbix 7.0 vereinheitlicht. Der Unterschied zwischen Anfragen und Antworten von Zabbix Agent und Zabbix agent 2 wird durch den Wert des Tags "variant" ausgedrückt.
Passive checks
Ein passiver Check ist eine einfache Datenanforderung. Zabbix Server oder Proxy fragt nach bestimmten Daten (zum Beispiel CPU-Auslastung), und der Zabbix Agent sendet das Ergebnis an den Server zurück.
Passive Checks werden asynchron ausgeführt - es ist nicht erforderlich, die Antwort auf eine Anfrage zu erhalten, bevor weitere Checks gestartet werden. Auch die DNS-Auflösung erfolgt asynchron.
Der Agent-Poller versucht, eine Verbindung zu allen Adressen herzustellen, die von der DNS-Abfrage zurückgegeben werden. Dadurch wird sichergestellt, dass der Poller bei einer nicht erreichbaren IP-Adresse die nächste verfügbare Adresse versucht, was die Wahrscheinlichkeit einer erfolgreichen Verbindung erhöht. Diese Verbesserung gilt sowohl für Zabbix Server als auch für Proxy.
Die maximale Parallelität asynchroner Checks beträgt 1000 (definiert durch MaxConcurrentChecksPerPoller).
Die Anzahl der asynchronen Agent-Poller wird durch den Parameter StartAgentPollers definiert.
Server-Anfrage
Für die Definition von Header und Datenlänge siehe Protokolldetails.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Passive check item. | |
| key | string | yes | Item key with expanded macros. | |
| timeout | number | yes | Communication timeout. | |
Agent-Antwort
{
"version": "8.0.0",
"variant": 2,
"data": [
{
"value": "8.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | The agent version number. | |
| variant | number | yes | The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Contains the result of the check. | |
| value | string | no | The item value if the check was successful. | |
| error | string | no | The error message if the check was not successful. | |
Zum Beispiel für unterstützte Items:
- Server öffnet eine TCP-Verbindung
- Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
- Server verarbeitet die Daten, um den Wert zu erhalten, in unserem Fall '1'
- TCP-Verbindung wird geschlossen
Für nicht unterstützte Items:
- Server öffnet eine TCP-Verbindung
- Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Server verarbeitet die Daten, ändert den Item-Status auf nicht unterstützt mit der angegebenen Fehlermeldung
- TCP-Verbindung wird geschlossen
Failover auf das alte Protokoll
Damit der Zabbix-Server oder Proxy mit Agents aus Versionen vor 7.2 zusammenarbeiten kann, die das Klartextprotokoll verwenden, ist ein Failover auf das alte Protokoll implementiert.
Passive Prüfungen werden nach einem Neustart oder bei einer Änderung der Schnittstellenkonfiguration über das JSON-Protokoll (7.0 und neuer) ausgeführt.
Wenn als Antwort kein gültiges JSON empfangen wird (der Agent sendet "ZBX_NOTSUPPORTED"), speichert Zabbix die Schnittstelle als altes Protokoll im Cache und wiederholt die Prüfung, indem nur der Datenpunkt-Schlüssel gesendet wird.
Beachten Sie, dass der Zabbix-Server/Proxy jede Stunde erneut versucht, mit allen Schnittstellen das neue Protokoll zu verwenden, und bei Bedarf auf das alte Protokoll zurückfällt.
Aktive Prüfungen
Aktive Prüfungen erfordern eine komplexere Verarbeitung. Der Agent muss zunächst vom Server/Proxy eine Liste von Datenpunkten und/oder Remote-Befehlen zur unabhängigen Verarbeitung abrufen.
Die Server/Proxys, von denen die aktiven Prüfungen abgerufen werden, sind im Parameter 'ServerActive' der Konfigurationsdatei des Agenten aufgeführt. Die Häufigkeit der Abfrage dieser Prüfungen wird durch den Parameter 'RefreshActiveChecks' in derselben Konfigurationsdatei festgelegt. Wenn die Aktualisierung aktiver Prüfungen jedoch fehlschlägt, wird der Versuch nach fest kodierten 60 Sekunden wiederholt.
Seit Zabbix 6.4 erhält der Agent (im aktiven Modus) vom Server/Proxy nicht mehr alle zwei Minuten (Standard) eine vollständige Kopie der Konfiguration. Stattdessen wird, um den Netzwerkverkehr und den Ressourcenverbrauch zu verringern, alle 5 Sekunden (Standard) eine inkrementelle Konfigurationssynchronisierung durchgeführt, bei der der Server/Proxy eine vollständige Kopie der Konfiguration nur dann bereitstellt, wenn der Agent sie noch nicht erhalten hat oder sich etwas in der Host-Konfiguration, den globalen Makros oder den globalen regulären Ausdrücken geändert hat.
Der Agent sendet dann regelmäßig die neuen Werte an den Server(n). Wenn der Agent einen Remote-Befehl zur Ausführung erhalten hat, wird auch das Ausführungsergebnis gesendet. Beachten Sie, dass die Ausführung von Remote-Befehlen auf einem aktiven Agent seit Zabbix agent 7.0 unterstützt wird.
Wenn sich ein Agent hinter der Firewall befindet, sollten Sie möglicherweise nur aktive Prüfungen verwenden, da Sie in diesem Fall die Firewall nicht anpassen müssten, um eingehende Erstverbindungen zuzulassen.
Abrufen der Liste der Datenpunkte
Agent-Anfrage
Die Anfrage für aktive Prüfungen wird verwendet, um die aktiven Prüfungen abzurufen, die vom Agent verarbeitet werden sollen.
Diese Anfrage wird vom Agent beim Start und anschließend in Intervallen von RefreshActiveChecks gesendet.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "8.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | Host name. |
| host_metadata | string | no | Der Konfigurationsparameter HostMetadata oder der Metrikwert von HostMetadataItem. |
| interface | string | no | Der Konfigurationsparameter HostInterface oder der Metrikwert von HostInterfaceItem. |
| ip | string | no | Die erste IP-Adresse des Konfigurationsparameters ListenIP, falls gesetzt. |
| port | number | no | Der Wert des Konfigurationsparameters ListenPort, falls gesetzt und nicht der Standard-Listening-Port des Agent. |
| version | string | yes | Die Versionsnummer des Agent. |
| variant | number | yes | Die Variante des Agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Konfigurationskennung für inkrementelle Konfigurationssynchronisierung. |
| session | string | no | Sitzungskennung für inkrementelle Konfigurationssynchronisierung. |
Serverantwort
Die Antwort auf aktive Prüfungen wird vom Server nach der Verarbeitung der Anfrage für aktive Prüfungen an den Agent zurückgesendet.
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| info | string | no | Fehlerinformationen im Falle eines Fehlers. | |
| data | array of objects | no | Datenpunkte für aktive Prüfungen. Wird ausgelassen, wenn die Host-Konfiguration unverändert ist. | |
| key | string | no | Datenpunkt-Schlüssel mit erweiterten Makros. | |
| itemid | number | no | Datenpunkt-ID. | |
| delay | string | no | Aktualisierungsintervall des Datenpunkts. Flexible/Planungsintervalle werden von Zabbix agent und Zabbix agent 2 seit Zabbix 7.0 unterstützt. |
|
| lastlogsize | number | no | lastlogsize des Datenpunkts. | |
| mtime | number | no | mtime des Datenpunkts. | |
| timeout | string | no | Timeout des Datenpunkts. | |
| refresh_unsupported | number | no | Aktualisierungsintervall für nicht unterstützte Datenpunkte. | |
| regexp | array of objects | no | Globale reguläre Ausdrücke. | |
| name | string | no | Name des globalen regulären Ausdrucks. | |
| expression | string | no | Globaler regulärer Ausdruck. | |
| expression_type | number | no | Typ des globalen regulären Ausdrucks. | |
| exp_delimiter | string | no | Trennzeichen des globalen regulären Ausdrucks. | |
| case_sensitive | number | no | Einstellung zur Groß-/Kleinschreibung des globalen regulären Ausdrucks. | |
| commands | array of objects | no | Auszuführende Remote-Befehle. Enthalten, wenn die Ausführung eines Remote-Befehls durch eine Aktions-Operation oder die manuelle Ausführung eines Skripts ausgelöst wurde. Beachten Sie, dass die Ausführung von Remote-Befehlen auf einem aktiven Agent seit Zabbix agent 7.0 unterstützt wird. Ältere aktive Agenten ignorieren alle Remote-Befehle, die in der Serverantwort auf aktive Prüfungen enthalten sind. | |
| command | string | no | Remote-Befehl. | |
| id | number | no | Kennung des Remote-Befehls. | |
| wait | number | no | Ausführungsmodus des Remote-Befehls ("0" (nowait) für Befehle aus Aktions-Operationen; "1" (wait) für Befehle aus der manuellen Ausführung eines Skripts). | |
| timeout | number | no | Timeout für die Ausführung des Remote-Befehls in der Konfiguration von Server/Proxy. | |
| config_revision | number | no | Konfigurationskennung für inkrementelle Konfigurationssynchronisierung. Wird ausgelassen, wenn die Host-Konfiguration unverändert ist. Wird erhöht, wenn die Host-Konfiguration geändert wurde. | |
Der Server muss mit success antworten.
Zum Beispiel:
- Agent öffnet eine TCP-Verbindung
- Agent fragt die Liste der Prüfungen ab
- Server antwortet mit einer Liste von Datenpunkten und auszuführenden Remote-Befehlen
- Agent analysiert die Antwort
- TCP-Verbindung wird geschlossen
- Agent beginnt mit der periodischen Datenerfassung und führt Remote-Befehle aus (seit Zabbix agent 7.0 unterstützt)
Beachten Sie, dass (sensible) Konfigurationsdaten für Parteien verfügbar werden können, die Zugriff auf den Trapper-Port des Zabbix Server haben, wenn eine aktive Prüfung verwendet wird. Dies ist möglich, weil sich jeder als aktiver Agent ausgeben und Konfigurationsdaten von Datenpunkten anfordern kann; eine Authentifizierung findet nicht statt, sofern Sie keine Verschlüsselungs-Optionen verwenden.
Senden der gesammelten Daten
Agent sendet
Die Anforderung für Agent-Daten enthält die gesammelten Datenpunktwerte und die Werte für ausgeführte Remote-Befehle (falls vorhanden).
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "8495cd52070e6ca52b371f29c8574165",
"host": "Zabbix server",
"version": "8.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | agent data |
|
| data | array of objects | yes | Item values. | |
| id | number | yes | The value identifier (incremental counter used for checking duplicated values in the case of network problems). | |
| itemid | number | yes | The item identifier. | |
| value | string | no | The item value. | |
| lastlogsize | number | no | The item lastlogsize. | |
| mtime | number | no | The item mtime. | |
| state | number | no | The item state. | |
| source | string | no | The value event log source. | |
| eventid | number | no | The value event log eventid. | |
| severity | number | no | The value event log severity. | |
| timestamp | number | no | The value event log timestamp. | |
| clock | number | yes | The value timestamp (seconds since Epoch). | |
| ns | number | yes | The value timestamp nanoseconds. | |
| commands | array of objects | no | Remote commands execution result. Note that remote command execution on an active agent is supported since Zabbix agent 7.0. Older active agents will ignore any remote commands included in the active checks server response. | |
| id | number | no | Remote command identifier. | |
| value | string | no | Remote command execution result if the execution was successful. | |
| error | string | no | Remote command execution error message if the execution failed. | |
| session | string | yes | Unique session identifier generated each time when agent is started. | |
| host | string | yes | Host name. | |
| version | string | yes | The agent version number. | |
| variant | number | yes | The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Jedem Wert wird eine virtuelle ID zugewiesen. Die Wert-ID ist ein einfacher aufsteigender Zähler, der innerhalb einer Datensitzung eindeutig ist (identifiziert durch das Sitzungstoken). Diese ID wird verwendet, um doppelte Werte zu verwerfen, die in Umgebungen mit schlechter Konnektivität gesendet werden können.
Serverantwort
Die Antwort auf Agent-Daten wird vom Server nach der Verarbeitung der Agent-Datenanforderung an den Agent zurückgesendet.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | Item processing results. |
Wenn das Senden einiger Werte auf dem Server fehlschlägt (zum Beispiel, weil Host oder Datenpunkt deaktiviert oder gelöscht wurde), versucht der Agent nicht erneut, diese Werte zu senden.
Zum Beispiel:
- Agent öffnet eine TCP-Verbindung
- Agent sendet eine Liste von Werten
- Server verarbeitet die Daten und sendet den Status zurück
- TCP-Verbindung wird geschlossen
Die Fehlermeldung wird serverseitig auf 2048 Zeichen gekürzt.
Heartbeat-Nachricht
Agent sendet
Die Heartbeat-Nachricht wird von einem aktiven Agent an den Zabbix Server/Proxy alle HeartbeatFrequency Sekunden gesendet (konfiguriert in der Konfigurationsdatei von Zabbix agent/ agent 2).
Sie wird verwendet, um die Verfügbarkeit aktiver Prüfungen zu überwachen.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "8.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | Der Hostname. |
| heartbeat_freq | number | yes | Die Heartbeat-Frequenz des Agent (Konfigurationsparameter HeartbeatFrequency). |
| version | string | yes | Die Versionsnummer des Agent. |
| variant | number | yes | Die Variante des Agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Umleitungsantwort
Wenn ein Host neu zugewiesen wurde, kann der Server den Agent anweisen, seinen Heartbeat (und die nachfolgenden aktiven Prüfungen) an eine andere Proxy- oder Server-Instanz umzuleiten.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Umleitungsanweisungen. | |
| revision | number | yes | Kennung der Konfigurationsrevision. | |
| address | string | yes | Adresse des Ziel-Server/Proxy. | |
Älteres XML-Protokoll
Zabbix verarbeitet bis zu 16 MB Base64-codierte XML-Daten, aber ein einzelner dekodierter Wert sollte nicht länger als 64 KB sein, da er andernfalls beim Dekodieren auf 64 KB gekürzt wird.