2 Passive and active agent checks
Überblick
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 Anfragen/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 Datenanfrage. Der Zabbix Server oder Proxy fragt bestimmte Daten ab (zum Beispiel CPU-Auslastung), und der Zabbix Agent sendet das Ergebnis an den Server zurück.
Passive Prüfungen werden asynchron ausgeführt – es ist nicht erforderlich, die Antwort auf eine Anfrage zu erhalten, bevor andere Prüfungen 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, falls eine IP-Adresse nicht erreichbar ist, die nächste verfügbare Adresse ausprobiert, was die Wahrscheinlichkeit einer erfolgreichen Verbindung erhöht. Diese Verbesserung gilt sowohl für den Zabbix Server als auch für den Proxy.
Die maximale Parallelität asynchroner Prüfungen beträgt 1000 (definiert durch MaxConcurrentChecksPerPoller).
Die Anzahl asynchroner Agent-Poller wird durch den Parameter StartAgentPollers festgelegt.
Server-Anfrage
Für die Definition von Header und Datenlänge siehe Protokolldetails.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Feld | Type | Pflichtfeld | Wert | |
|---|---|---|---|---|
| request | string | ja | "passive checks" |
|
| data | array of object | ja | Passiver Prüfungs-Datenpunkt. | |
| key | string | ja | Datenpunktschlüssel mit erweiterten Makros. | |
| timeout | number | ja | Kommunikations-Timeout. | |
Agent-Antwort
{
"version": "8.0.0",
"variant": 2,
"data": [
{
"value": "8.0.0"
}
]
}
| Feld | Type | Pflichtfeld | Wert | |
|---|---|---|---|---|
| version | string | ja | Die Versionsnummer des Agent. | |
| variant | number | ja | Die Agent-Variante (1 - Zabbix Agent, 2 - Zabbix Agent 2). | |
| data | array of object | ja | Enthält das Ergebnis der Prüfung. | |
| value | string | nein | Der Datenpunktwert, wenn die Prüfung erfolgreich war. | |
| error | string | nein | Die Fehlermeldung, wenn die Prüfung nicht erfolgreich war. | |
Zum 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":"8.0.0","variant":2,"data":[{"value":1}]}
- Der Server verarbeitet die Daten, um den Wert zu erhalten, in unserem Fall „1“
- Die TCP-Verbindung wird geschlossen
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":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Der Server verarbeitet die Daten und ändert den Status des Datenpunkts auf „nicht unterstützt“ mit der angegebenen Fehlermeldung
- Die TCP-Verbindung wird geschlossen
Failover auf das alte Protokoll
Um sicherzustellen, dass Zabbix Server oder Proxy mit Agents aus Versionen vor 7.2 arbeiten können, die das Klartextprotokoll verwenden, wurde ein Failover auf das alte Protokoll implementiert.
Passive Prüfungen werden nach einem Neustart oder wenn die Schnittstellenkonfiguration geändert wird, 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 altes Protokoll im Cache und wiederholt die Prüfung, indem nur der Datenpunktschlüssel gesendet wird.
Beachten Sie, dass Zabbix Server/Proxy stündlich erneut versucht, mit allen Schnittstellen über das neue Protokoll zu arbeiten, 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 Agent angegeben. Die Häufigkeit, mit der diese Prüfungen abgefragt werden, wird durch den Parameter „RefreshActiveChecks“ in derselben Konfigurationsdatei festgelegt. Schlägt das Aktualisieren aktiver Prüfungen jedoch fehl, wird der Vorgang nach fest codierten 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 dann periodisch die neuen Werte an den/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 der Firewall befindet, sollten Sie erwägen, nur aktive Prüfungen zu verwenden, da Sie in diesem Fall die Firewall nicht ändern müssten, um eingehende Erstverbindungen zuzulassen.
Abrufen der Liste von Datenpunkten
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 danach in den 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 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 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 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 Fehlerfall. | |
| data | array of objects | no | Aktive Prüfungs-Datenpunkte. Wird weggelassen, wenn die Host-Konfiguration unverändert ist. | |
| key | string | no | Datenpunktschlüssel mit expandierten Makros. | |
| itemid | number | no | Datenpunktkennung. | |
| delay | string | no | Aktualisierungsintervall des Datenpunkts. Flexible/zeitgesteuerte Intervalle werden seit Zabbix 7.0 sowohl von Zabbix-Agent als auch von Zabbix-Agent 2 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 von Remote-Befehlen 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 Agents ignorieren alle Remote-Befehle, die in der Server-Antwort 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 Operationen von Aktionen; „1“ (wait) für Befehle aus der manuellen Ausführung von Skripten). | |
| config_revision | number | no | Konfigurationskennung für die inkrementelle Konfigurationssynchronisierung. Wird weggelassen, wenn die Host-Konfiguration unverändert ist. Wird erhöht, wenn sich die Host-Konfiguration ändert. | |
Der Server muss mit Erfolg 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 verarbeitet die Antwort
- Die TCP-Verbindung wird geschlossen
- Agent startet die periodische Datenerfassung und führt Remote-Befehle aus (unterstützt seit Zabbix-Agent 7.0)
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 nicht die Optionen für Verschlüsselung verwenden.
Senden gesammelter Daten
Agent sendet
Die Datenanfrage des Agent enthält die gesammelten Datenpunktwerte sowie 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 | Datenpunktwerte. | |
| id | number | yes | Die Wertkennung (inkrementeller Zähler, der zur Prüfung auf doppelte Werte bei Netzwerkproblemen verwendet wird). | |
| itemid | number | yes | Die Datenpunktkennung. | |
| value | string | no | Der Datenpunktwert. | |
| lastlogsize | number | no | Das lastlogsize des Datenpunkts. | |
| mtime | number | no | Das mtime des Datenpunkts. | |
| state | number | no | Der Status des Datenpunkts. | |
| source | string | no | Die Quelle des Ereignisprotokolls des Werts. | |
| eventid | number | no | Die eventid des Ereignisprotokolls des Werts. | |
| severity | number | no | Die severity des Ereignisprotokolls des Werts. | |
| timestamp | number | no | Der Zeitstempel des Ereignisprotokolls des Werts. | |
| clock | number | yes | Der Zeitstempel des Werts (Sekunden seit der Epoch). | |
| ns | number | yes | Die Nanosekunden des Zeitstempels des Werts. | |
| commands | array of objects | no | Ausführungsergebnis 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 Agenten ignorieren alle Remote-Befehle, die in der Server-Antwort für aktive Prüfungen enthalten sind. | |
| id | number | no | Kennung des Remote-Befehls. | |
| value | string | no | Ausführungsergebnis 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 | Eindeutige Sitzungskennung, die bei jedem Start des Agent generiert wird. | |
| host | string | yes | Host-Name. | |
| version | string | yes | Die Versionsnummer des Agent. | |
| variant | number | yes | Die Variante des Agent (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 Sitzungs- Token) eindeutig ist. Diese ID wird verwendet, um doppelte Werte zu verwerfen, die in Umgebungen mit schlechter Konnektivität gesendet werden könnten.
Server-Antwort
Die Antwort auf Agent-Daten wird vom Server nach der Verarbeitung der Agent-Datenanfrage 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 (zum Beispiel, weil der Host oder der Datenpunkt deaktiviert oder gelöscht wurde), wird der Agent nicht erneut versuchen, 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
- 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 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
}
| Feld | Typ | Obligatorisch | Wert |
|---|---|---|---|
| request | string | ja | active check heartbeat |
| host | string | ja | Der Host-Name. |
| heartbeat_freq | number | ja | Die Heartbeat-Frequenz des Agent (Konfigurationsparameter HeartbeatFrequency). |
| version | string | ja | Die Versionsnummer des Agent. |
| variant | number | ja | Die Variante des Agent (1 - Zabbix agent, 2 - Zabbix agent 2). |
Umleitungsantwort
Wenn ein Host neu zugewiesen wurde, kann der Server den Agent anweisen, seine Heartbeat-Nachricht (und nachfolgende aktive Prüfungen) an eine andere Proxy- oder Server-Instanz umzuleiten.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.0:10055"
}
}
| Feld | Typ | Obligatorisch | Wert | |
|---|---|---|---|---|
| response | string | ja | success | failed |
|
| redirect | object | ja | Umleitungsanweisungen. | |
| revision | number | ja | Kennung der Konfigurationsrevision. | |
| address | string | ja | Adresse des Ziel-Servers/Proxy. | |
Älteres XML-Protokoll
Zabbix akzeptiert bis zu 16 MB XML-Base64-kodierte Daten, aber ein einzelner dekodierter Wert sollte nicht länger als 64 KB sein, andernfalls wird er während der Dekodierung auf 64 KB gekürzt.