9 HTTP Agent
Übersicht
Dieser Datenpunkt-Typ ermöglicht das Abrufen von Daten über das HTTP/HTTPS-Protokoll.
Auch Trapping ist möglich, entweder mit dem Dienstprogramm Zabbix sender oder dem Zabbix sender-Protokoll (zum Senden von Daten an den Zabbix Server oder Proxy) oder mit der API-Methode history.push (zum Senden von Daten an den Zabbix Server).
HTTP-Datenpunkt-Prüfungen werden vom Zabbix Server ausgeführt. Wenn Hosts jedoch von einem Zabbix Proxy überwacht werden, werden HTTP-Datenpunkt-Prüfungen vom Proxy ausgeführt.
HTTP-Datenpunkt-Prüfungen erfordern keinen auf dem überwachten Host laufenden Agent.
HTTP agent unterstützt sowohl HTTP als auch HTTPS. Zabbix folgt optional Weiterleitungen (siehe die Option Weiterleitungen folgen unten). Die maximale Anzahl von Weiterleitungen ist fest auf 10 codiert (unter Verwendung der cURL-Option CURLOPT_MAXREDIRS).
Zabbix Server/Proxy muss zunächst mit Unterstützung für cURL (libcurl) konfiguriert sein.
HTTP-Prüfungen werden asynchron ausgeführt - es ist nicht erforderlich, die Antwort auf eine Anfrage zu erhalten, bevor weitere Prüfungen gestartet werden. Auch die DNS-Auflösung erfolgt asynchron.
Die maximale Parallelität asynchroner Prüfungen beträgt 1000 (definiert durch MaxConcurrentChecksPerPoller).
Die Anzahl der asynchronen HTTP agent Poller wird durch den Parameter StartHTTPAgentPollers definiert.
Die cURL-Funktion für persistente Verbindungen wurde seit Zabbix 7.0 zu HTTP agent-Prüfungen hinzugefügt.
Konfiguration
So konfigurieren Sie einen HTTP-Datenpunkt:
- Gehen Sie zu Datensammlung > Hosts.
- Klicken Sie in der Zeile des Hosts auf Datenpunkte.
- Klicken Sie auf Datenpunkt erstellen.
- Geben Sie die Parameter des Datenpunkts im Formular ein.

Alle Pflichtfelder sind mit einem roten Sternchen gekennzeichnet.
Die Felder, die spezifische Informationen für HTTP-Datenpunkte erfordern, sind:
| Parameter | Beschreibung |
|---|---|
| Typ | Wählen Sie hier HTTP agent aus. |
| Schlüssel | Geben Sie einen eindeutigen Datenpunktschlüssel ein. |
| URL | URL, zu der eine Verbindung hergestellt und von der Daten abgerufen werden sollen. Beispiele: https://www.example.com http://www.example.com/download Domänennamen können in Unicode-Zeichen angegeben werden. Sie werden bei der Ausführung der HTTP-Prüfung automatisch in Punycode und anschließend in ASCII konvertiert. Mit der Schaltfläche Analysieren können optionale Abfragefelder (z. B. ?name=Admin&password=mypassword) von der URL getrennt werden. Dabei werden die Attribute und Werte in Abfragefelder verschoben, um sie automatisch URL-kodieren zu können. Auf 2048 Zeichen begrenzt. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_URL. |
| Abfragefelder | Variablen für die URL (siehe oben). Als Paare aus Attribut und Wert angegeben. Werte werden automatisch URL-kodiert. Werte aus Makros werden aufgelöst und anschließend automatisch URL-kodiert. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_URL. |
| Anforderungstyp | Wählen Sie den Typ der Anforderungsmethode aus: GET, POST, PUT oder HEAD |
| Typ des Anforderungstexts | Wählen Sie den Typ des Anforderungstexts aus: Rohdaten - benutzerdefinierter HTTP-Anforderungstext; Makros werden ersetzt, aber es wird keine Kodierung durchgeführt JSON-Daten - HTTP-Anforderungstext im JSON-Format. Makros können als Zeichenkette, Zahl, true und false verwendet werden; als Zeichenketten verwendete Makros müssen in doppelte Anführungszeichen eingeschlossen werden. Werte aus Makros werden aufgelöst und anschließend automatisch maskiert. Wenn in den Headern kein "Content-Type" angegeben ist, wird standardmäßig "Content-Type: application/json" verwendet. XML-Daten - HTTP-Anforderungstext im XML-Format. Makros können als Textknoten, Attribut oder CDATA-Abschnitt verwendet werden. Werte aus Makros werden aufgelöst und anschließend in Textknoten und Attributen automatisch maskiert. Wenn in den Headern kein "Content-Type" angegeben ist, wird standardmäßig "Content-Type: application/xml" verwendet. Hinweis: Für die Auswahl von XML-Daten ist libxml2 erforderlich. |
| Anforderungstext | Geben Sie den Anforderungstext ein. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. |
| Header | Benutzerdefinierte HTTP-Header, die beim Ausführen einer Anforderung gesendet werden. Als Paare aus Attribut und Wert angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_HTTPHEADER. |
| Erforderliche Statuscodes | Liste der erwarteten HTTP-Statuscodes. Wenn Zabbix einen Code erhält, der nicht in der Liste enthalten ist, wird der Datenpunkt nicht unterstützt. Wenn das Feld leer ist, wird keine Prüfung durchgeführt. Beispiel: 200,201,210-299 Unterstützte Makros in der Liste: Benutzermakros, Makros der Low-Level-Discovery. Hierfür wird die cURL-Option CURLINFO_RESPONSE_CODE verwendet. |
| Weiterleitungen folgen | Aktivieren Sie das Kontrollkästchen, um HTTP-Weiterleitungen zu folgen. Dies setzt die cURL-Option CURLOPT_FOLLOWLOCATION. |
| Abrufmodus | Wählen Sie den Teil der Antwort aus, der abgerufen werden soll: Text - nur Text Header - nur Header Text und Header - Text und Header |
| In JSON konvertieren | Header werden unter dem Schlüssel "header" als Paare aus Attribut und Wert gespeichert, wenn Abrufmodus nicht auf Text gesetzt ist. Wenn 'Content-Type: application/json' erkannt wird, wird der Text als Objekt gespeichert; andernfalls wird er als Zeichenkette gespeichert, zum Beispiel: ![]() |
| HTTP-Proxy | Sie können einen HTTP-Proxy im Format [protocol://][username[:password]@]proxy.example.com[:port] angeben.Das optionale Präfix protocol:// kann verwendet werden, um alternative Proxy-Protokolle anzugeben (z. B. https, socks4, socks5; siehe Dokumentation; die Unterstützung für das Protokollpräfix wurde in cURL 7.21.7 hinzugefügt). Wenn kein Protokoll angegeben ist, wird der Proxy als HTTP-Proxy behandelt. Wenn Sie das falsche Protokoll angeben, schlägt die Verbindung fehl und der Datenpunkt wird nicht unterstützt.Standardmäßig wird Port 1080 verwendet. Wenn angegeben, überschreibt der Proxy proxybezogene Umgebungsvariablen wie http_proxy und HTTPS_PROXY. Wenn kein Proxy angegeben ist, überschreibt der Proxy keine proxybezogenen Umgebungsvariablen. Der eingegebene Wert wird unverändert übernommen; es findet keine Plausibilitätsprüfung statt. Hinweis: Für HTTP-Proxy wird nur die einfache Authentifizierung unterstützt. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_PROXY. |
| HTTP-Authentifizierung | Wählen Sie die Authentifizierungsoption aus: Keine - keine Authentifizierung; Basic - Basic-Authentifizierung; NTLM - NTLM-Authentifizierung (Windows NT LAN Manager); Kerberos - Kerberos-Authentifizierung (siehe auch: Kerberos mit Zabbix konfigurieren); Digest - Digest-Authentifizierung. Dies setzt die cURL-Option CURLOPT_HTTPAUTH. |
| Benutzername | Geben Sie den Benutzernamen ein (bis zu 255 Zeichen). Dieses Feld ist verfügbar, wenn HTTP-Authentifizierung auf Basic, NTLM, Kerberos oder Digest gesetzt ist. Benutzermakros und Makros der Low-Level-Discovery werden unterstützt. |
| Passwort | Geben Sie das Benutzerpasswort ein (bis zu 255 Zeichen). Dieses Feld ist verfügbar, wenn HTTP-Authentifizierung auf Basic, NTLM, Kerberos oder Digest gesetzt ist. Benutzermakros und Makros der Low-Level-Discovery werden unterstützt. |
| SSL-Peer überprüfen | Aktivieren Sie das Kontrollkästchen, um das SSL-Zertifikat des Webservers zu überprüfen. Das Serverzertifikat wird anhand der vertrauenswürdigen Zertifikate der Zertifizierungsstellen (CA) am systemweiten CA-Speicherort überprüft. Den Speicherort der CA-Dateien können Sie mit dem Zabbix-Konfigurationsparameter SSLCALocation des Servers oder Proxys überschreiben. Dies setzt die cURL-Option CURLOPT_SSL_VERIFYPEER. |
| SSL-Host überprüfen | Aktivieren Sie das Kontrollkästchen, um zu überprüfen, ob das Feld „Common Name“ oder das Feld „Subject Alternate Name“ des Webserverzertifikats übereinstimmt. Dies setzt die cURL-Option CURLOPT_SSL_VERIFYHOST. |
| SSL-Zertifikatsdatei | Name der SSL-Zertifikatsdatei, die für die Clientauthentifizierung verwendet wird. Die Zertifikatsdatei muss im PEM1-Format vorliegen. Wenn die Zertifikatsdatei auch den privaten Schlüssel enthält, lassen Sie das Feld für die SSL-Schlüsseldatei leer. Wenn der Schlüssel verschlüsselt ist, geben Sie das Passwort im Feld für das SSL-Schlüsselpasswort an. Das Verzeichnis, das diese Datei enthält, wird durch den Zabbix-Konfigurationsparameter SSLCertLocation des Servers oder Proxys angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_SSLCERT. |
| SSL-Schlüsseldatei | Name der privaten SSL-Schlüsseldatei, die für die Clientauthentifizierung verwendet wird. Die private Schlüsseldatei muss im PEM1-Format vorliegen. Das Verzeichnis, das diese Datei enthält, wird durch den Zabbix-Konfigurationsparameter SSLKeyLocation des Servers oder Proxys angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_SSLKEY. |
| SSL-Schlüsselpasswort | Passwort der privaten SSL-Schlüsseldatei. Unterstützte Makros: Benutzermakros, Makros der Low-Level-Discovery. Dies setzt die cURL-Option CURLOPT_KEYPASSWD. |
| Zeitüberschreitung | Zabbix verwendet für die Verarbeitung der URL nicht mehr als die festgelegte Zeit (1-600 Sekunden). Tatsächlich definiert dieser Parameter die maximale Zeit für den Verbindungsaufbau zur URL und die maximale Zeit für die Ausführung einer HTTP-Anforderung. Daher verwendet Zabbix für eine Prüfung nicht mehr als 2 x Zeitüberschreitung Sekunden. Dies setzt die cURL-Option CURLOPT_TIMEOUT. Weitere Informationen zum Parameter Zeitüberschreitung finden Sie unter Allgemeine Datenpunktattribute. |
| Trapping aktivieren | Wenn dieses Kontrollkästchen aktiviert ist, funktioniert der Datenpunkt auch als Trapper-Datenpunkt und akzeptiert Daten, die mit dem Dienstprogramm Zabbix sender oder dem Protokoll von Zabbix sender an den Zabbix-Server oder Proxy gesendet werden, oder Daten, die mit der API-Methode history.push an den Zabbix-Server gesendet werden. Weitere Informationen zum Senden von Daten finden Sie unter: Trapper-Datenpunkte. |
| Zulässige Hosts | Nur sichtbar, wenn das Kontrollkästchen Trapping aktivieren aktiviert ist. Liste durch Kommas getrennter IP-Adressen, optional in CIDR-Notation, oder DNS-Namen. Wenn angegeben, werden eingehende Verbindungen nur von den hier aufgeführten Hosts akzeptiert. Wenn die IPv6-Unterstützung aktiviert ist, werden '127.0.0.1', '::127.0.0.1' und '::ffff:127.0.0.1' gleich behandelt, und '::/0' erlaubt jede IPv4- oder IPv6-Adresse. '0.0.0.0/0' kann verwendet werden, um jede IPv4-Adresse zuzulassen. Beachten Sie, dass „IPv4-kompatible IPv6-Adressen“ (Präfix 0000::/96) unterstützt, aber durch RFC4291 als veraltet eingestuft werden. Beispiel: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST} Leerzeichen und Benutzermakros sind in diesem Feld zulässig. Hostmakros: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} sind in diesem Feld zulässig. |
Wenn das Feld HTTP-Proxy leer bleibt, können Sie einen HTTP-Proxy auch über proxybezogene Umgebungsvariablen verwenden.
Für HTTP - setzen Sie die Umgebungsvariable http_proxy für den Zabbix-Serverbenutzer. Beispiel:
http_proxy=http://proxy_ip:proxy_port.
Für HTTPS - setzen Sie die Umgebungsvariable HTTPS_PROXY. Beispiel:
HTTPS_PROXY=http://proxy_ip:proxy_port. Weitere Informationen erhalten Sie,
indem Sie einen Shell-Befehl ausführen: # man curl.
[1] Zabbix unterstützt Zertifikats- und private Schlüsseldateien nur im PEM-Format. Wenn Ihre Zertifikats- und privaten Schlüsseldaten in einer PKCS #12-Datei vorliegen (normalerweise mit der Erweiterung *.p12 oder *.pfx), können Sie daraus mit den folgenden Befehlen eine PEM-Datei erzeugen:
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key
Beispiele
Beispiel 1
Senden Sie einfache GET-Anfragen, um Daten von Diensten wie Elasticsearch abzurufen:
- Erstellen Sie einen GET-Datenpunkt mit der URL:
localhost:9200/?pretty - Beachten Sie die Antwort:
{
"name" : "YQ2VAY-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
"version" : {
"number" : "6.1.3",
"build_hash" : "af51318",
"build_date" : "2018-01-26T18:22:55.523Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You know, for search"
}
- Extrahieren Sie nun die Versionsnummer mithilfe eines JSONPath-Vorverarbeitungsschritts:
$.version.number
Beispiel 2
Senden Sie einfache POST-Anfragen, um Daten von Diensten wie Elasticsearch abzurufen:
- Erstellen Sie einen POST-Datenpunkt mit URL:
http://localhost:9200/str/values/_search?scroll=10s - Konfigurieren Sie den folgenden POST-Body, um die Prozessorlast zu ermitteln (1 Min. Durchschnitt pro Kern)
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
- Empfangen:
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [{
"_index": "dbl",
"_type": "values",
"_id": "dqX9VWEBV6sEKSMyk6sw",
"_score": 1.0,
"_source": {
"itemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Verwenden Sie nun einen JSONPath-Vorverarbeitungsschritt, um den Datenpunktwert abzurufen:
$.hits.hits[0]._source.value
Beispiel 3
Prüfen, ob die Zabbix API aktiv ist, unter Verwendung von apiinfo.version.
- Datenpunktkonfiguration:

Beachten Sie die Verwendung der POST-Methode mit JSON-Daten, das Setzen von Anfrage-Headern und die Anforderung, nur Header zurückzugeben:
- Datenpunkt-Wertvorverarbeitung mit regulärem Ausdruck, um den HTTP-Code zu ermitteln:

- Überprüfung des Ergebnisses unter Neueste Daten:

Beispiel 4
Abrufen von Wetterinformationen durch Verbindung mit dem öffentlichen Openweathermap-Dienst.
- Konfigurieren Sie einen Master-Datenpunkt für die Sammelerfassung von Daten in einem einzelnen JSON:

Beachten Sie die Verwendung von Makros in den Abfragefeldern. Informationen zum Ausfüllen finden Sie in der Openweathermap API.
Beispiel-JSON, das als Antwort vom HTTP agent zurückgegeben wird:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
Die nächste Aufgabe besteht darin, abhängige Datenpunkte zu konfigurieren, die Daten aus dem JSON extrahieren.
- Konfigurieren Sie einen Beispiel-abhängigen Datenpunkt für die Luftfeuchtigkeit:

Andere Wettermetriken wie 'Temperature' werden auf die gleiche Weise hinzugefügt.
- Beispiel für die Vorverarbeitung des Werts eines abhängigen Datenpunkts mit JSONPath:

- Prüfen Sie das Ergebnis der Wetterdaten unter Latest data:

Beispiel 5
Verbindung zur Nginx-Statusseite herstellen und deren Metriken gesammelt abrufen.
- Konfigurieren Sie Nginx gemäß der offiziellen Anleitung.
- Konfigurieren Sie einen Master-Datenpunkt für die Sammlung von Massendaten:

Beispielausgabe des Nginx-Stub-Status:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
Die nächste Aufgabe besteht darin, abhängige Datenpunkte zu konfigurieren, die Daten extrahieren.
- Konfigurieren Sie einen Beispiel-abhängigen Datenpunkt für Anfragen pro Sekunde:

- Beispiel für die Vorverarbeitung des Werts eines abhängigen Datenpunkts mit regulärem Ausdruck
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Prüfen Sie das vollständige Ergebnis des Stub-Moduls unter Neueste Daten:

