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:

  1. Gehen Sie zu Datenerfassung > Hosts.
  2. Klicken Sie in der Zeile des Hosts auf Datenpunkte.
  3. Klicken Sie auf Datenpunkt erstellen.
  4. Geben Sie die Parameter des Datenpunkts im Formular ein.

Alle Pflichtfelder 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 sollen. Zum Beispiel:
https://www.example.com
http://www.example.com/download
Domänennamen können in Unicode-Zeichen angegeben werden. Sie werden beim Ausführen der HTTP-Prüfung automatisch in Punycode nach ASCII konvertiert.
Mit der Schaltfläche Parse können optionale Abfragefelder (wie ?name=Admin&password=mypassword) von der URL getrennt werden, wobei die Attribute und Werte in Query fields verschoben werden, damit die automatische URL-Kodierung erfolgt.
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, Makros der Low-Level-Erkennung.
Dies setzt die cURL-Option CURLOPT_URL.
Query fields Variablen für die URL (siehe oben).
Als Attribut-Wert-Paare 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-Erkennung.
Dies setzt die cURL-Option CURLOPT_URL.
Request type Wählen Sie den Anfragetyp: GET, POST, PUT oder HEAD
Request body type Wählen Sie den Typ des Anfragekörpers aus:
Raw data - benutzerdefinierter HTTP-Anfragekörper, Makros werden ersetzt, aber es erfolgt keine Kodierung
JSON data - HTTP-Anfragekörper im JSON-Format. Makros können als Zeichenfolge, Zahl, true und false verwendet werden; als Zeichenfolgen verwendete Makros müssen in doppelte Anführungszeichen eingeschlossen werden. Werte aus Makros werden aufgelöst und anschließend automatisch maskiert. Wenn "Content-Type" in den Headern nicht angegeben ist, wird standardmäßig "Content-Type: application/json" verwendet
XML data - HTTP-Anfragekörper 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" in den Headern nicht angegeben ist, wird standardmäßig "Content-Type: application/xml" verwendet
Hinweis: Für die Auswahl von XML data ist libxml2 erforderlich.
Request body Geben Sie den Anfragekörper 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-Erkennung.
Headers Benutzerdefinierte HTTP-Header, die beim Ausführen einer Anfrage gesendet werden.
Als Attribut-Wert-Paare 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-Erkennung.
Dies setzt die cURL-Option CURLOPT_HTTPHEADER.
Required status codes 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.
Zum Beispiel: 200,201,210-299
Unterstützte Makros in der Liste: Benutzermakros, Makros der Low-Level-Erkennung.
Dies verwendet die cURL-Option CURLINFO_RESPONSE_CODE.
Follow redirects Aktivieren Sie das Kontrollkästchen, um HTTP-Weiterleitungen zu folgen.
Dies setzt die cURL-Option CURLOPT_FOLLOWLOCATION.
Retrieve mode Wählen Sie den Teil der Antwort aus, der abgerufen werden soll:
Body - nur Body
Headers - nur Header
Body and headers - Body und Header
Convert to JSON Header werden als Attribut-Wert-Paare unter dem Schlüssel "header" gespeichert, wenn Retrieve mode 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 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, 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 HTTP-Proxy wird nur 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-Erkennung.
Dies setzt die cURL-Option CURLOPT_PROXY.
HTTP authentication Wählen Sie die Authentifizierungsoption aus:
None - keine Authentifizierung verwendet;
Basic - einfache Authentifizierung wird verwendet;
NTLM - NTLM-Authentifizierung (Windows NT LAN Manager) wird verwendet;
Kerberos - Kerberos-Authentifizierung wird verwendet (siehe auch: Kerberos mit Zabbix konfigurieren);
Digest - Digest-Authentifizierung wird verwendet.
Dies setzt die cURL-Option CURLOPT_HTTPAUTH.
User name Geben Sie den Benutzernamen ein (bis zu 255 Zeichen).
Dieses Feld ist verfügbar, wenn HTTP authentication auf Basic, NTLM, Kerberos oder Digest gesetzt ist. Benutzermakros und Makros der Low-Level-Erkennung werden unterstützt.
Password Geben Sie das Benutzerpasswort ein (bis zu 255 Zeichen).
Dieses Feld ist verfügbar, wenn HTTP authentication auf Basic, NTLM, Kerberos oder Digest gesetzt ist. Benutzermakros und Makros der Low-Level-Erkennung werden unterstützt.
SSL verify peer Aktivieren Sie das Kontrollkästchen, um das SSL-Zertifikat des Webservers zu überprüfen. 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 verify host 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 certificate file 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, Makros der Low-Level-Erkennung.
Dies setzt die cURL-Option CURLOPT_SSLCERT.
SSL key file 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, Makros der Low-Level-Erkennung.
Dies setzt die cURL-Option CURLOPT_SSLKEY.
SSL key password Passwort für die SSL-Datei mit dem privaten Schlüssel.
Unterstützte Makros: Benutzermakros, Makros der Low-Level-Erkennung.
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 die Herstellung einer Verbindung zur URL und die maximale Zeit für die Ausfü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 Datenpunkteigenschaften.
Enable trapping Wenn dieses Kontrollkästchen aktiviert ist, funktioniert der Datenpunkt auch als Trapper-Datenpunkt und akzeptiert Daten, die mit dem Dienstprogramm Zabbix sender oder dem Zabbix-sender-Protokoll an den Zabbix Server oder Proxy gesendet werden, oder akzeptiert 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.
Allowed hosts Nur sichtbar, wenn das Kontrollkästchen Enable trapping 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 IPv6-Unterstützung aktiviert ist, werden '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' als 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 werden, aber gemäß RFC4291 veraltet sind.
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, gibt es eine andere Möglichkeit, einen HTTP-Proxy zu verwenden, indem proxybezogene Umgebungsvariablen gesetzt werden.

Für HTTP - setzen Sie die Umgebungsvariable http_proxy für den Benutzer des Zabbix Server. 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, wenn Sie einen Shell-Befehl ausführen: # man curl.

[1] Zabbix unterstützt Zertifikats- und private Schlüsseldateien nur im PEM-Format. Falls Sie Ihre Zertifikats- und privaten Schlüsseldaten in einer Datei im PKCS #12-Format haben (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: