16 HTTP-Agent
Übersicht
Dieser Datenpunkttyp ermöglicht die Datenabfrage über das HTTP/HTTPS-Protokoll.
Auch Trapping ist mit dem Hilfsprogramm 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) möglich.
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 Agent, der auf einem überwachten Host ausgeführt wird.
HTTP Agent unterstützt sowohl HTTP als auch HTTPS. Zabbix folgt Weiterleitungen optional (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 andere 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 asynchroner HTTP-Agent-Poller wird durch den Parameter StartHTTPAgentPollers festgelegt.
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 erforderlichen Eingabefelder sind mit einem roten Sternchen markiert.
Die Felder, die für HTTP-Datenpunkte spezifische Informationen 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. Zum Beispiel: https://www.example.com http://www.example.com/download Domainnamen können mit Unicode-Zeichen angegeben werden. Sie werden bei der Ausführung der HTTP-Prüfung automatisch per Punycode in ASCII umgewandelt. Mit der Schaltfläche Parse können optionale Abfragefelder (wie ?name=Admin&password=mypassword) von der URL getrennt werden, wobei die Attribute und Werte zur automatischen URL-Kodierung in Abfragefelder verschoben werden. Begrenzt auf 2048 Zeichen. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_URL. |
| Abfragefelder | Variablen für die URL (siehe oben). Werden als Attribut- und Wertpaare 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, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_URL. |
| Anfragetyp | Wählen Sie den Typ der Anfragemethode: GET, POST, PUT oder HEAD |
| Typ des Anfragetexts | Wählen Sie den Typ des Anfragetexts aus: Rohdaten - benutzerdefinierter HTTP-Anfragetext, Makros werden ersetzt, aber es wird keine Kodierung durchgeführt JSON-Daten - HTTP-Anfragetext im JSON-Format. Makros können als Zeichenfolge, Zahl, true und false verwendet werden; Makros, die als Zeichenfolgen verwendet werden, müssen in doppelte Anführungszeichen gesetzt werden. Werte aus Makros werden aufgelöst und anschließend automatisch maskiert. Wenn "Content-Type" nicht in den Headern angegeben ist, wird standardmäßig "Content-Type: application/json" verwendet XML-Daten - HTTP-Anfragetext im XML-Format. Makros können als Textknoten, Attribut oder CDATA-Abschnitt verwendet werden. Werte aus Makros werden aufgelöst und anschließend in einem Textknoten und Attribut automatisch maskiert. Wenn "Content-Type" nicht in den Headern angegeben ist, wird standardmäßig "Content-Type: application/xml" verwendet |
| Anfragetext | Geben Sie den Anfragetext ein. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. |
| Header | Benutzerdefinierte HTTP-Header, die beim Ausführen einer Anfrage gesendet werden. Werden als Attribut- und Wertpaare angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. 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 leer, wird keine Prüfung durchgeführt. Zum Beispiel: 200,201,210-299 Unterstützte Makros in der Liste: Benutzermakros, Low-Level-Discovery-Makros. Dies verwendet die cURL-Option CURLINFO_RESPONSE_CODE. |
| 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: Body - nur Body Header - nur Header Body und Header - Body und Header |
| In JSON umwandeln | Header werden unter dem Schlüssel "header" als Attribut- und Wertpaare gespeichert, wenn Abrufmodus nicht auf Body gesetzt ist. Wenn 'Content-Type: application/json' erkannt wird, wird der Body als Objekt gespeichert, andernfalls als Zeichenfolge, 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 für Protokollpräfixe 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. Falls angegeben, überschreibt der Proxy proxy-bezogene Umgebungsvariablen wie http_proxy, HTTPS_PROXY. Falls nicht angegeben, überschreibt der Proxy keine proxy-bezogenen Umgebungsvariablen. Der eingegebene Wert wird unverändert übergeben; es findet keine Plausibilitätsprüfung statt. Beachten Sie, dass beim HTTP-Proxy nur einfache Authentifizierung unterstützt wird. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_PROXY. |
| HTTP-Authentifizierung | Wählen Sie die Authentifizierungsoption aus: Keine - es wird keine Authentifizierung verwendet; Basic - Basic-Authentifizierung wird verwendet; NTLM - NTLM-Authentifizierung (Windows NT LAN Manager) wird verwendet; Kerberos - Kerberos-Authentifizierung wird verwendet (siehe auch: Konfigurieren von Kerberos mit Zabbix); Digest - Digest-Authentifizierung wird verwendet. 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 Low-Level-Discovery-Makros 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 Low-Level-Discovery-Makros werden unterstützt. |
| SSL Peer verifizieren | Aktivieren Sie das Kontrollkästchen, um das SSL-Zertifikat des Webservers zu verifizieren. Das Serverzertifikat wird automatisch aus dem systemweiten Speicherort der Zertifizierungsstelle (CA) übernommen. Sie können den Speicherort der CA-Dateien mit dem Konfigurationsparameter SSLCALocation von Zabbix Server oder Proxy überschreiben. Dies setzt die cURL-Option CURLOPT_SSL_VERIFYPEER. |
| SSL Host verifizieren | Aktivieren Sie das Kontrollkästchen, um zu verifizieren, dass das Feld Common Name oder Subject Alternate Name des Webserver-Zertifikats übereinstimmt. Dies setzt die cURL-Option CURLOPT_SSL_VERIFYHOST. |
| SSL-Zertifikatsdatei | Name der SSL-Zertifikatsdatei, die für die Client-Authentifizierung 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 Konfigurationsparameter SSLCertLocation von Zabbix Server oder Proxy angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_SSLCERT. |
| SSL-Schlüsseldatei | Name der SSL-Datei mit dem privaten Schlüssel, die für die Client-Authentifizierung verwendet wird. Die Datei mit dem privaten Schlüssel muss im PEM1-Format vorliegen. Das Verzeichnis, das diese Datei enthält, wird durch den Konfigurationsparameter SSLKeyLocation von Zabbix Server oder Proxy angegeben. Unterstützte Makros: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, Benutzermakros, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_SSLKEY. |
| SSL-Schlüsselpasswort | Passwort der Datei mit dem privaten SSL-Schlüssel. Unterstützte Makros: Benutzermakros, Low-Level-Discovery-Makros. Dies setzt die cURL-Option CURLOPT_KEYPASSWD. |
| Timeout | Zabbix verwendet nicht mehr als die festgelegte Zeit für die Verarbeitung der URL (1-600 Sekunden). Tatsächlich definiert dieser Parameter die maximale Zeit für den Verbindungsaufbau zur URL und die maximale Zeit für die Durchführung einer HTTP-Anfrage. Daher verwendet Zabbix für eine Prüfung nicht mehr als 2 x Timeout Sekunden. Dies setzt die cURL-Option CURLOPT_TIMEOUT. Weitere Informationen zum Parameter Timeout 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 Zabbix-sender-Protokoll an Zabbix Server oder Proxy gesendet werden, oder akzeptiert Daten, die mit der API-Methode history.push an Zabbix Server gesendet werden. Weitere Informationen zum Senden von Daten finden Sie unter: Trapper-Datenpunkte. |
| Erlaubte Hosts | Nur sichtbar, wenn das Kontrollkästchen Trapping aktivieren aktiviert ist. Liste von durch Kommas getrennten IP-Adressen, optional in CIDR-Notation, oder DNS-Namen. Falls angegeben, werden eingehende Verbindungen nur von den hier aufgeführten Hosts akzeptiert. Wenn IPv6-Unterstützung aktiviert ist, werden '127.0.0.1', '::127.0.0.1', '::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 erlaubt. Host-Makros: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} sind in diesem Feld erlaubt. |
Wenn das Feld HTTP-Proxy leer gelassen wird, besteht eine weitere Möglichkeit zur Verwendung eines HTTP-Proxys darin, proxy-bezogene Umgebungsvariablen zu setzen.
Für HTTP - setzen Sie die Umgebungsvariable http_proxy für den Zabbix
Server-Benutzer. 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 Details erhalten Sie
durch Ausführen des Shell-Befehls: # man curl.
[1] Zabbix unterstützt Zertifikats- und private Schlüsseldateien nur im PEM-Format. Falls Ihre Zertifikats- und privaten Schlüsseldaten im Dateiformat PKCS #12 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 zum Abrufen von Daten von Diensten wie Elasticsearch:
- Erstellen Sie ein GET-Element mit 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 zum Abrufen von Daten von Diensten wie Elasticsearch:
- Erstellen Sie ein POST-Element mit URL:
http://localhost:9200/str/values/_search?scroll=10s - Konfigurieren Sie den folgenden POST-Body, um die Prozessorlast zu ermitteln (1 Minute-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 Elementwert zu erhalten:
$.hits.hits[0]._source.value
Beispiel 3
Prüfen, ob die Zabbix API aktiv ist, mit apiinfo.version.
- Konfiguration des Datenpunkts:

Beachten Sie die Verwendung der POST-Methode mit JSON-Daten, die Festlegung von Anforderungs-Headern und die Aufforderung, nur Header zurückzugeben:
- Vorverarbeitung von Elementwerten mit regulären Ausdrücken, um HTTP-Code zu erhalten:

- Prüfen des Ergebnisses in Latest Data:

Beispiel 4
Abruf von Wetterinformationen durch Verbindung mit dem öffentlichen Dienst Openweathermap.
- Konfigurieren Sie ein Hauptelement für die Massendatenerfassung in einem einzigen JSON:

Beachten Sie die Verwendung von Makros in Abfragefeldern. Beachten Sie die Openweathermap API for how to fill them.
Beispiel für JSON, das als Antwort an den HTTP-Agenten 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 Elemente zu konfigurieren, die Daten aus der JSON-Datei extrahieren.
- Konfigurieren Sie eine probenabhängige Position für Feuchtigkeit:

Andere Wetterdaten wie "Temperatur" werden auf die gleiche Weise hinzugefügt.
- Beispiel für die Vorverarbeitung abhängiger Positionswerte mit JSONPath:

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

Beispiel 5
Verbindung mit der Nginx-Statusseite herstellen und ihre Metriken gesammelt abrufen.
- Konfigurieren Sie Nginx gemäß der offiziellen Anleitung.
- Konfigurieren Sie einen Master-Datenpunkt für die Massendatenerfassung:

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 beispielhaften 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:

