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 checks

Ein passiver Check ist eine einfache Datenanfrage. Der Zabbix Server oder Proxy fragt einige Daten ab (zum Beispiel die 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 den Zabbix Server als auch für den 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.

Serveranfrage

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-Element.
key string yes Item-Schlüssel mit erweiterten 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 Agent.
variant number yes Die Agent-Variante (1 - Zabbix agent, 2 - Zabbix agent 2).
data array of object yes Enthält das Ergebnis des Checks.
value string no Der Item-Wert, wenn der Check erfolgreich war.
error string no Die Fehlermeldung, wenn der Check nicht erfolgreich war.

Zum Beispiel bei unterstützten Items:

  1. Server öffnet eine TCP-Verbindung
  2. Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"value":1}]}
  4. Server verarbeitet die Daten, um den Wert zu erhalten, in unserem Fall '1'
  5. TCP-Verbindung wird geschlossen

Bei nicht unterstützten Items:

  1. Server öffnet eine TCP-Verbindung
  2. Server sendet <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. Agent liest die Anfrage und antwortet mit <HEADER><DATALEN>{"version":"7.4.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Server verarbeitet die Daten und ändert den Item-Status auf nicht unterstützt mit der angegebenen Fehlermeldung
  5. 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 der Datenpunkte

Agent-Anfrage

Die Anfrage für aktive Prüfungen wird verwendet, um die aktiven Prüfungen zu ermitteln, die vom Agent verarbeitet werden sollen. Diese Anfrage wird vom Agent beim Start und anschließend in Intervallen gemäß RefreshActiveChecks 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 The configuration parameter HostMetadata or HostMetadataItem metric value.
interface string no The configuration parameter HostInterface or HostInterfaceItem metric value.
ip string no The configuration parameter ListenIP first IP if set.
port number no The configuration parameter ListenPort value if set and not default agent listening port.
version string yes The agent version number.
variant number yes The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2).
config_revision number no Configuration identifier for incremental configuration sync.
session string no Session identifier for incremental configuration sync.

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 Error information in case of failure.
data array of objects no Active check items. Omitted if host configuration is unchanged.
key string no Item key with expanded macros.
itemid number no Item identifier.
delay string no Item update interval.
Flexible/scheduling intervals are supported by both Zabbix agent and Zabbix agent 2 since Zabbix 7.0.
lastlogsize number no Item lastlogsize.
mtime number no Item mtime.
timeout string no Item timeout.
refresh_unsupported number no Unsupported item refresh interval.
regexp array of objects no Global regular expressions.
name string no Global regular expression name.
expression string no Global regular expression.
expression_type number no Global regular expression type.
exp_delimiter string no Global regular expression delimiter.
case_sensitive number no Global regular expression case sensitivity setting.
commands array of objects no Remote commands to execute. Included if remote command execution has been triggered by an action operation or manual script execution. 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.
command string no Remote command.
id number no Remote command identifier.
wait number no Remote command mode of execution ("0" (nowait) for commands from action operations; "1" (wait) for commands from manual script execution).
timeout number no Remote command execution timeout in server/proxy configuration.
config_revision number no Configuration identifier for incremental configuration sync. Omitted if host configuration is unchanged. Incremented if host configuration is changed.

Der Server muss mit success antworten.

Zum Beispiel:

  1. Agent öffnet eine TCP-Verbindung
  2. Agent fragt die Liste der Prüfungen an
  3. Server antwortet mit einer Liste von Datenpunkten und auszuführenden Remote-Befehlen
  4. Agent analysiert die Antwort
  5. TCP-Verbindung wird geschlossen
  6. Agent beginnt mit der periodischen Datenerfassung und führt Remote-Befehle aus (seit Zabbix agent 7.0 unterstützt)

Beachten Sie, dass (sensible) Konfigurationsdaten Parteien zugänglich werden können, die Zugriff auf den Zabbix-Server-Trapper-Port 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 Datenanforderung des Agenten 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": "7.4.0",
  "variant": 2
}
Field < Type Mandatory Value
request < string yes agent data
data < array of objects yes Datenpunktwerte.
id < number yes Die Wert-ID (inkrementeller Zähler, der zur Prüfung doppelter Werte bei Netzwerkproblemen verwendet wird).
^ itemid number yes Die Datenpunkt-ID.
^ value string no Der Datenpunktwert.
^ lastlogsize number no Die lastlogsize des Datenpunkts.
^ mtime number no Die mtime des Datenpunkts.
^ state number no Der Zustand 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 timestamp des Ereignisprotokolls des Werts.
^ clock number yes Der Zeitstempel des Werts (Sekunden seit Epoch).
^ ns number yes Die 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 Agenten 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.
id < number no Kennung des Remote-Befehls.
^ value string no Ergebnis der Ausführung des Remote-Befehls, wenn die Ausführung erfolgreich war.
^ error string no Fehlermeldung der Ausführung des Remote-Befehls, wenn die Ausführung fehlgeschlagen ist.
session < string yes Eindeutige Sitzungskennung, die jedes Mal generiert wird, wenn der Agent gestartet wird.
host < string yes Hostname.
version < string yes Die Versionsnummer des Agenten.
variant < number yes Die Agent-Variante (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 Daten-Sitzung eindeutig ist (identifiziert durch das Sitzungs-Token). Diese ID wird verwendet, um doppelte Werte zu verwerfen, die in Umgebungen mit schlechter Konnektivität gesendet werden können.

Serverantwort

Die Antwort auf die Agent-Daten wird vom Server nach der Verarbeitung der Agent-Datenanforderung an den Agenten 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 Verarbeitung der Datenpunkte.

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:

  1. Agent öffnet eine TCP-Verbindung
  2. Agent sendet eine Liste von Werten
  3. Server verarbeitet die Daten und sendet den Status zurück
  4. 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 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 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 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.