2 Passive and active agent checks
Übersicht
Dieser Abschnitt enthält Details zu passiven und aktiven Prüfungen, die vom Zabbix Agent und Zabbix Agent 2 durchgeführt werden.
Zabbix verwendet ein JSON-basiertes Kommunikationsprotokoll für die Kommunikation mit den Agents.
Die Protokolle von Zabbix Agent und Zabbix Agent 2 sind seit Zabbix 7.0 vereinheitlicht. Der Unterschied zwischen Anforderungen und Antworten von Zabbix Agent und Zabbix Agent 2 wird durch den Wert des Tags „variant“ ausgedrückt.
Passive Prüfungen
Eine passive Prüfung ist eine einfache Datenanforderung.
Der Zabbix-Server oder Proxy fordert Daten an (zum Beispiel die CPU-Auslastung), und der Zabbix-Agent sendet das Ergebnis an den Server zurück.
Passive Prüfungen werden asynchron ausgeführt – die Antwort auf eine Anfrage muss nicht empfangen werden, bevor andere Prüfungen gestartet werden.
Auch die DNS-Auflösung erfolgt asynchron.
Der Agent-Poller versucht, eine Verbindung zu allen von der DNS-Abfrage zurückgegebenen Adressen herzustellen.
Wenn eine IP-Adresse nicht erreichbar ist, versucht der Poller daher die nächste verfügbare Adresse. Dadurch steigt die Wahrscheinlichkeit einer erfolgreichen Verbindung.
Diese Verbesserung gilt sowohl für den Zabbix-Server als auch für den Proxy.
Die maximale Anzahl gleichzeitig ausgeführter asynchroner Prüfungen beträgt 1000 (definiert durch MaxConcurrentChecksPerPoller).
Die Anzahl der asynchronen Agent-Poller wird durch den Parameter StartAgentPollers festgelegt.
Serveranforderung
Informationen zur Definition der Header- und Datenlänge finden Sie unter 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 Prüfung des Datenpunkts. | |
| key | string | yes | Datenpunktschlüssel mit aufgelösten Makros. | |
| timeout | number | yes | Kommunikations-Timeout. | |
Agent-Antwort
{
"version": "7.4.0",
"variant": 2,
"data": [
{
"value": "7.4.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | Die Versionsnummer des Agents. | |
| variant | number | yes | Die Agent-Variante (1 – Zabbix-Agent, 2 – Zabbix-Agent 2). | |
| data | array of object | yes | Enthält das Ergebnis der Prüfung. | |
| value | string | no | Der Datenpunktwert, wenn die Prüfung erfolgreich war. | |
| error | string | no | Die Fehlermeldung, wenn die Prüfung nicht erfolgreich war. | |
Beispiel für unterstützte Datenpunkte:
- Der Server öffnet eine TCP-Verbindung.
- Der Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Der Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"value":1}]}
- Der Server verarbeitet die Daten, um den Wert zu erhalten – in diesem Fall „1“.
- Die TCP-Verbindung wird geschlossen.
Beispiel für nicht unterstützte Datenpunkte:
- Der Server öffnet eine TCP-Verbindung.
- Der Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Der Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Der Server verarbeitet die Daten und ändert den Status des Datenpunkts mit der angegebenen Fehlermeldung in „nicht unterstützt“.
- Die TCP-Verbindung wird geschlossen.
Failover auf das alte Protokoll
Damit der Zabbix Server oder Proxy mit Agents aus Versionen vor 7.2 arbeiten kann, die das Klartextprotokoll verwenden, wurde ein Failover auf das alte Protokoll implementiert.
Passive Prüfungen werden nach einem Neustart oder bei einer Änderung der Schnittstellenkonfiguration mit dem JSON-Protokoll (7.0 und höher) durchgeführt.
Wenn als Antwort kein gültiges JSON empfangen wird (der Agent hat „ZBX_NOTSUPPORTED“ gesendet), speichert Zabbix die Schnittstelle als Schnittstelle mit altem Protokoll und wiederholt die Prüfung, indem nur der Datenpunktschlü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 Agent-Konfigurationsdatei aufgeführt.
Die Häufigkeit, mit der diese Prüfungen abgerufen werden, wird durch den Parameter „RefreshActiveChecks“ in derselben Konfigurationsdatei festgelegt.
Wenn die Aktualisierung der aktiven Prüfungen jedoch fehlschlägt, wird sie nach fest vorgegebenen 60 Sekunden erneut versucht.
Seit Zabbix 6.4 erhält der Agent (im aktiven Modus) nicht mehr standardmäßig alle zwei Minuten eine vollständige Kopie der Konfiguration vom Server/Proxy. Stattdessen wird zur Verringerung des Netzwerkverkehrs und des Ressourcenverbrauchs standardmäßig alle 5 Sekunden eine inkrementelle Konfigurationssynchronisierung durchgeführt, bei der der Server/Proxy nur dann eine vollständige Kopie der Konfiguration bereitstellt, wenn der Agent sie noch nicht erhalten hat oder sich die Host-Konfiguration, globale Makros oder globale reguläre Ausdrücke geändert haben.
Der Agent sendet die neuen Werte anschließend regelmäßig an den bzw. die Server. Wenn der Agent Remote-Befehle 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 einer Firewall befindet, sollten Sie möglicherweise ausschließlich aktive Prüfungen verwenden, da Sie in diesem Fall die Firewall nicht ändern müssten, um eingehende Erstverbindungen zuzulassen.
Liste der Datenpunkte abrufen
Agent-Anfrage
Die Anfrage für aktive Prüfungen wird verwendet, um die vom Agent zu verarbeitenden aktiven Prüfungen abzurufen. Diese Anfrage wird vom Agent beim Start und anschließend in RefreshActiveChecks-Intervallen gesendet.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "7.4.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, sofern festgelegt. |
| port | number | no | Der Wert des Konfigurationsparameters ListenPort, sofern festgelegt und nicht der standardmäßige Überwachungsport des Agent. |
| version | string | yes | Die Versionsnummer des Agent. |
| variant | number | yes | Die Agent-Variante (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Konfigurationskennung für die inkrementelle Konfigurationssynchronisierung. |
| session | string | no | Sitzungskennung für die inkrementelle Konfigurationssynchronisierung. |
Server-Antwort
Die Antwort auf die aktiven 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 Fehlerfall. | |
| data | array of objects | no | Datenpunkte für aktive Prüfungen. Wird ausgelassen, wenn die Host-Konfiguration unverändert ist. | |
| key | string | no | Datenpunktschlüssel mit aufgelösten Makros. | |
| itemid | number | no | Datenpunktkennung. | |
| delay | string | no | Aktualisierungsintervall des Datenpunkts. Flexible/planmäßige Intervalle werden seit Zabbix 7.0 sowohl vom Zabbix agent als auch vom Zabbix agent 2 unterstützt. |
|
| lastlogsize | number | no | Lastlogsize des Datenpunkts. | |
| mtime | number | no | Mtime des Datenpunkts. | |
| timeout | string | no | Zeitüberschreitung 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 für die Groß-/Kleinschreibung des globalen regulären Ausdrucks. | |
| commands | array of objects | no | Auszuführende Remote-Befehle. Wird eingeschlossen, wenn die Ausführung eines Remote-Befehls durch eine Operation einer Aktion 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 Agent ignorieren alle in der Server-Antwort auf aktive Prüfungen enthaltenen Remote-Befehle. | |
| 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 Operationen von Aktionen; "1" (wait) für Befehle aus der Ausführung manueller Skripte). | |
| timeout | number | no | Zeitüberschreitung für die Ausführung des Remote-Befehls in der Konfiguration von Server/Proxy. | |
| config_revision | number | no | Konfigurationskennung für die inkrementelle Konfigurationssynchronisierung. Wird ausgelassen, wenn die Host-Konfiguration unverändert ist. Wird erhöht, wenn die Host-Konfiguration geändert wird. | |
Der Server muss mit Erfolg antworten.
Beispiel:
- Der Agent öffnet eine TCP-Verbindung
- Der Agent fordert die Liste der Prüfungen an
- Der Server antwortet mit einer Liste von Datenpunkten und auszuführenden Remote-Befehlen
- Der Agent analysiert die Antwort
- Die TCP-Verbindung wird geschlossen
- Der Agent beginnt mit der regelmäßigen Datenerfassung und führt Remote-Befehle aus (seit Zabbix agent 7.0 unterstützt)
Beachten Sie, dass (sensible) Konfigurationsdaten für Parteien zugänglich werden können, die Zugriff auf den Trapper-Port des Zabbix-Servers haben, wenn eine aktive Prüfung verwendet wird. Dies ist möglich, weil sich jeder als aktiver Agent ausgeben und Daten zur Datenpunktkonfiguration anfordern kann; eine Authentifizierung findet nicht statt, sofern Sie keine Verschlüsselungs-Optionen verwenden.
Senden der gesammelten Daten
Agent sendet
Die Datenanforderung des Agents enthält die erfassten Datenpunktwerte sowie die Werte der ausgeführten 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": "7.4.0",
"variant": 2
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | agent data |
|
| data | array of objects | yes | Datenpunktwerte. | |
| id | number | yes | Der Wertbezeichner (inkrementeller Zähler zur Prüfung auf doppelte Werte bei Netzwerkproblemen). | |
| itemid | number | yes | Der Datenpunktbezeichner. | |
| value | string | no | Der Datenpunktwert. | |
| lastlogsize | number | no | lastlogsize des Datenpunkts. | |
| mtime | number | no | mtime des Datenpunkts. | |
| state | number | no | Status des Datenpunkts. | |
| source | string | no | Quelle des Ereignisprotokolls des Werts. | |
| eventid | number | no | Ereignis-ID des Ereignisprotokolls des Werts. | |
| severity | number | no | Schweregrad des Ereignisprotokolls des Werts. | |
| timestamp | number | no | Zeitstempel des Ereignisprotokolls des Werts. | |
| clock | number | yes | Zeitstempel des Werts (Sekunden seit der Epoch). | |
| ns | number | yes | Nanosekunden des Zeitstempels des Werts. | |
| commands | array of objects | no | Ergebnis der Ausführung von Remote-Befehlen. Beachten Sie, dass die Ausführung von Remote-Befehlen auf einem aktiven Agent seit Zabbix Agent 7.0 unterstützt wird. Ältere aktive Agents ignorieren alle Remote-Befehle, die in der Serverantwort auf die aktiven Prüfungen enthalten sind. | |
| id | number | no | Bezeichner des Remote-Befehls. | |
| value | string | no | Ergebnis der Ausführung des Remote-Befehls, wenn die Ausführung erfolgreich war. | |
| error | string | no | Fehlermeldung zur Ausführung des Remote-Befehls, wenn die Ausführung fehlgeschlagen ist. | |
| session | string | yes | Eindeutiger Sitzungsbezeichner, der bei jedem Start des Agents generiert wird (32 hexadezimale Ziffern lang). | |
| host | string | yes | Hostname. | |
| version | string | yes | Versionsnummer des Agents. | |
| variant | number | yes | Variante des Agents (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 (identifiziert durch das Sitzungstoken) eindeutig ist. Diese ID wird verwendet, um doppelte Werte zu verwerfen, die bei schlechter Netzwerkverbindung gesendet werden könnten.
Serverantwort
Die Antwort auf die Agent-Datenanforderung 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 | Ergebnisse der Datenpunktverarbeitung. |
Wenn das Senden einiger Werte auf dem Server fehlschlägt (beispielsweise weil der Host oder der Datenpunkt deaktiviert oder gelöscht wurde), wird der Agent nicht versuchen, diese Werte erneut zu senden.
Beispiel:
- Der Agent öffnet eine TCP-Verbindung
- Der Agent sendet eine Liste von Werten
- Der Server verarbeitet die Daten und sendet den Status zurück
- Die 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 alle HeartbeatFrequency Sekunden an den Zabbix Server/Proxy gesendet (konfiguriert in der Konfigurationsdatei des 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": "7.4.0",
"variant": 2
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | Der Hostname. |
| heartbeat_freq | number | yes | Das Heartbeat-Intervall des Agent (Konfigurationsparameter HeartbeatFrequency). |
| version | string | yes | Die Versionsnummer des Agent. |
| variant | number | yes | Die Agent-Variante (1 - Zabbix Agent, 2 - Zabbix Agent 2). |
Antwort zur Umleitung
Wenn ein Host neu zugewiesen wurde, kann der Server den Agent anweisen, seinen Heartbeat (und nachfolgende aktive Prüfungen) an eine andere Proxy- oder Serverinstanz umzuleiten.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Anweisungen zur Umleitung. | |
| revision | number | yes | Kennung der Konfigurationsrevision. | |
| address | string | yes | Adresse des Ziel-Server/Proxy. | |
Älteres XML-Protokoll
Zabbix akzeptiert bis zu 16 MB Base64-kodierte XML-Daten, aber ein einzelner dekodierter Wert sollte nicht länger als 64 KB sein. Andernfalls wird er beim Dekodieren auf 64 KB gekürzt.