9 HTTP Agent
Übersicht
Dieser Datenpunkttyp ermöglicht das Abrufen von Daten über das HTTP/HTTPS-Protokoll.
Das Trapping ist auch mit dem Dienstprogramm Zabbix sender oder dem Zabbix sender-Protokoll möglich (zum Senden von Daten an den Zabbix server oder Proxy) oder über die API-Methode history.push (zum Senden von Daten an den Zabbix server).
HTTP-Datenpunktprüfungen werden vom Zabbix server ausgeführt. Wenn Hosts jedoch von einem Zabbix Proxy überwacht werden, werden HTTP-Datenpunktprüfungen vom Proxy ausgeführt.
HTTP-Datenpunktprü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 werden.
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 Datenerfassung > 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. Zum Beispiel: https://www.example.com http://www.example.com/download Domänennamen können in Unicode-Zeichen angegeben werden. Bei der Ausführung der HTTP-Prüfung werden sie automatisch in Punycode und anschließend in ASCII konvertiert. Mit der Schaltfläche Parsen können optionale Abfragefelder (wie ?name=Admin&password=mypassword) von der URL getrennt werden. Dabei werden die Attribute und Werte zur automatischen URL-Kodierung in Abfragefelder verschoben. Begrenzt auf 2048 Zeichen. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_URL gesetzt. |
| 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}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_URL gesetzt. |
| 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 in einem Textknoten und Attribut aufgelöst und anschließend 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}, {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}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_HTTPHEADER gesetzt. |
| 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. Damit wird die cURL-Option CURLOPT_FOLLOWLOCATION gesetzt. |
| 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 als Zeichenkette, zum Beispiel: ![]() |
| HTTP-Proxy | Sie können einen zu verwendenden 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 des Protokollpräfixes 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 nicht angegeben, überschreibt der Proxy keine proxybezogenen Umgebungsvariablen. Der eingegebene Wert wird unverändert übernommen; es findet keine Plausibilitätsprüfung statt. Hinweis: Mit einem HTTP-Proxy wird nur die einfache Authentifizierung unterstützt. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_PROXY gesetzt. |
| HTTP-Authentifizierung | Wählen Sie die Authentifizierungsoption aus: Keine – keine Authentifizierung wird verwendet; Basic – die Basic-Authentifizierung wird verwendet; NTLM – die NTLM-Authentifizierung (Windows NT LAN Manager) wird verwendet; Kerberos – die Kerberos-Authentifizierung wird verwendet (siehe auch: Kerberos mit Zabbix konfigurieren); Digest – die Digest-Authentifizierung wird verwendet. Damit wird die cURL-Option CURLOPT_HTTPAUTH gesetzt. |
| 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. Benutzer- 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. Benutzer- 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. Sie können den Speicherort der CA-Dateien mit dem Zabbix-Konfigurationsparameter SSLCALocation des Servers oder Proxys überschreiben. Damit wird die cURL-Option CURLOPT_SSL_VERIFYPEER gesetzt. |
| SSL-Host überprüfen | Aktivieren Sie das Kontrollkästchen, um zu überprüfen, ob das Feld „Common Name“ oder „Subject Alternate Name“ des Webserverzertifikats übereinstimmt. Damit wird die cURL-Option CURLOPT_SSL_VERIFYHOST gesetzt. |
| 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}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_SSLCERT gesetzt. |
| 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}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_SSLKEY gesetzt. |
| SSL-Schlüsselpasswort | Passwort der privaten SSL-Schlüsseldatei. Unterstützte Makros: Benutzermakros, Makros der Low-Level-Discovery. Damit wird die cURL-Option CURLOPT_KEYPASSWD gesetzt. |
| 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 zum Herstellen einer Verbindung zur URL und die maximale Zeit zum Ausführen einer HTTP-Anforderung. Daher verwendet Zabbix für eine Prüfung nicht mehr als 2 x Zeitüberschreitung Sekunden. Damit wird die cURL-Option CURLOPT_TIMEOUT gesetzt. Weitere Informationen zum Parameter Zeitüberschreitung finden Sie unter Allgemeine Datenpunktattribute. |
| Trapping aktivieren | Wenn dieses Kontrollkästchen aktiviert ist, funktioniert der Datenpunkt zusätzlich 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. Zum Beispiel:
http_proxy=http://proxy_ip:proxy_port.
Für HTTPS - setzen Sie die Umgebungsvariable HTTPS_PROXY. Zum 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 ausschließlich im PEM-Format. Wenn Ihre Zertifikats- und privaten Schlüsseldaten in einer Datei im PKCS-#12-Format 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-Minuten-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 zu ermitteln:
$.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:
- Datenpunktwert-Vorverarbeitung mit regulärem Ausdruck, um den HTTP-Code zu ermitteln:

- Überprüfung des Ergebnisses in Latest data:

Beispiel 4
Abrufen von Wetterinformationen durch Verbindung mit dem öffentlichen Openweathermap-Dienst.
- Konfigurieren Sie einen Master-Datenpunkt für die Massendatenerfassung 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:

Weitere Wettermetriken wie „Temperatur“ 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 Neueste Daten:

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 von 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 dem regulären 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:

