HTTP-Agent

Übersicht

Dieser Datentyp ermöglicht das Abrufen von Daten über das HTTP/HTTPS-Protokoll. Das Trapping ist auch mit dem Dienstprogramm Zabbix sender oder dem Protokoll von Zabbix sender möglich (zum Senden von Daten an den Zabbix Server oder Proxy) oder mithilfe der 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).

Der 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 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 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 ASCII-Punycode konvertiert.
Mit der Schaltfläche Analysieren 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}, {HOST.PORT}, {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).
Werden 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-Discovery.
Damit wird die cURL-Option CURLOPT_URL gesetzt.
Anfragetyp Wählen Sie den Typ der Anfragemethode aus: GET, POST, PUT oder HEAD
Typ des Anfrageinhalts Wählen Sie den Typ des Anfrageinhalts aus:
Rohdaten – benutzerdefinierter HTTP-Anfrageinhalt; Makros werden ersetzt, aber es wird keine Kodierung durchgeführt
JSON-Daten – HTTP-Anfrageinhalt 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-Anfrageinhalt im XML-Format. Makros können als Textknoten, Attribut oder CDATA-Abschnitt verwendet werden. Werte aus Makros werden in Textknoten und Attributen aufgelöst und anschließend automatisch maskiert. Wenn in den Headern kein „Content-Type“ angegeben ist, wird standardmäßig „Content-Type: application/xml“ verwendet.
Anfrageinhalt Geben Sie den Anfrageinhalt 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 Anfrage gesendet werden.
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-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:
Inhalt – nur Inhalt
Header – nur Header
Inhalt und Header – Inhalt und Header
In JSON konvertieren Header werden als Attribut-Wert-Paare unter dem Schlüssel „header“ gespeichert, wenn Abrufmodus nicht auf Inhalt gesetzt ist.
Wenn „Content-Type: application/json“ erkannt wird, wird der Inhalt als Objekt gespeichert; andernfalls wird er als Zeichenkette gespeichert, 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 kein Proxy angegeben ist, werden proxybezogene Umgebungsvariablen nicht überschrieben. Der eingegebene Wert wird unverändert übernommen; es findet keine Plausibilitätsprüfung statt.
Hinweis: Mit einem 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-Discovery.
Damit wird die cURL-Option CURLOPT_PROXY gesetzt.
HTTP-Authentifizierung Wählen Sie die Authentifizierungsoption aus:
Keine – keine Authentifizierung wird verwendet;
Basic – Basic-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.
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 Zertifizierungsstellenzertifikate (CA) aus dem systemweiten CA-Speicher überprüft. Den Speicherort der CA-Dateien können Sie mit dem Zabbix-Server- oder Proxy-Konfigurationsparameter SSLCALocation ü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-Server- oder Proxy-Konfigurationsparameter SSLCertLocation 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.
Damit wird die cURL-Option CURLOPT_SSLCERT gesetzt.
SSL-Schlüsseldatei Name der SSL-Datei mit dem privaten Schlüssel, die für die Clientauthentifizierung verwendet wird. Die Datei mit dem privaten Schlüssel muss im PEM1-Format vorliegen. Das Verzeichnis, das diese Datei enthält, wird durch den Zabbix-Server- oder Proxy-Konfigurationsparameter SSLKeyLocation 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.
Damit wird die cURL-Option CURLOPT_SSLKEY gesetzt.
SSL-Schlüsselpasswort Passwort der SSL-Datei mit dem privaten Schlüssel.
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 für den Verbindungsaufbau 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 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.

Der Standardwert ist das Benutzermakro {$TRAPPER.ALLOWED_HOSTS}. Standardmäßig lautet {$TRAPPER.ALLOWED_HOSTS} 127.0.0.1,::1. Sie können Adressen direkt in das Feld eingeben oder den Makrowert ändern. Wenn das Feld leer bleibt, werden eingehende Verbindungen von allen Hosts abgelehnt. Wenn ein Wert angegeben ist, 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 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 werden, aber durch RFC4291 als veraltet eingestuft 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 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 durch Ausführen des Shell-Befehls: # man curl.

[1] Zabbix unterstützt Zertifikats- und Dateien mit privaten Schlüsseln ausschließlich im PEM-Format. Wenn Ihre Zertifikats- und privaten Schlüsseldaten in einer Datei im PKCS-#12-Format vorliegen (üblicherweise 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-Preprocessing-Schritts: $.version.number
Beispiel 2

Senden Sie einfache POST-Anfragen, um Daten von Diensten wie Elasticsearch abzurufen:

  • Erstellen Sie einen POST-Datenpunkt mit der 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 Request-Headern und die Anforderung, nur Header zurückzugeben:

  • Datenpunkt-Vorverarbeitung mit regulärem Ausdruck, um den HTTP-Code zu ermitteln:

  • Prüfen 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:

Andere Wettermetriken wie "Temperatur" werden auf die gleiche Weise hinzugefügt.

  • Beispiel für die Wertvorverarbeitung eines abhängigen Datenpunkts mit JSONPath:

  • Prüfen Sie das Ergebnis der Wetterdaten unter Neueste Daten:

Beispiel 5

Verbindung mit der NGINX-Statusseite und Abrufen ihrer Metriken in großen Mengen.

  • Konfigurieren Sie NGINX gemäß der offiziellen Anleitung.
  • Konfigurieren Sie einen Master-Datenpunkt für die Erfassung von Daten in großen Mengen:

Beispielausgabe des NGINX-Stub-Status:

Active connections: 1 Active connections:
server accepts handled requests
 52 52 52 
Reading: 0 Writing: 1 Waiting: 0

Als Nächstes müssen Sie abhängige Datenpunkte 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]+):

  • Überprüfen Sie das vollständige Ergebnis des Stub-Moduls unter Latest data: