16 HTTP agent

Overzicht

Dit itemtype maakt gegevenspolling mogelijk met behulp van het HTTP/HTTPS-protocol. Het is ook mogelijk om te trappen met behulp van de Zabbix-sender of het Zabbix-senderprotocol.

HTTP-itemcontrole wordt uitgevoerd door de Zabbix-server. Wanneer hosts echter worden gemonitord door een Zabbix-proxy, worden HTTP-itemcontroles uitgevoerd door de proxy.

HTTP-itemcontroles vereisen geen agent die wordt uitgevoerd op een host die wordt gemonitord.

De HTTP-agent ondersteunt zowel HTTP als HTTPS. Zabbix zal optioneel redirects volgen (zie de optie Volg redirects hieronder). Het maximale aantal redirects is hard-coded op 10 (met behulp van cURL-optie CURLOPT_MAXREDIRS).

Zabbix-server/-proxy moet aanvankelijk zijn geconfigureerd met cURL (libcurl) ondersteuning.

Configuratie

Om een HTTP-item te configureren:

  • Ga naar: DataverzamelingHosts
  • Klik op Items in de rij van de host
  • Klik op Create item
  • Voer de parameters van het item in op het formulier

Alle verplichte invoervelden zijn gemarkeerd met een rode asterisk.

De velden die specifieke informatie vereisen voor HTTP-items zijn:

Parameter Beschrijving
Type Selecteer hier HTTP-agent.
Key Voer een unieke itemsleutel in.
URL URL om verbinding mee te maken en gegevens op te halen. Bijvoorbeeld:
https://www.example.com
http://www.example.com/download
Domeinnamen kunnen worden gespecificeerd in Unicode-tekens. Ze worden automatisch omgezet in punycode naar ASCII bij het uitvoeren van de HTTP-check.
De knop Parse kan worden gebruikt om optionele queryvelden (zoals ?name=Admin&password=mypassword) van de URL te scheiden en de attributen en waarden naar Query fields te verplaatsen voor automatische URL-codering.
Beperkt tot 2048 tekens.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_URL cURL-optie in.
Query fields Variabelen voor de URL (zie hierboven).
Opgespecificeerd als attribuut- en waardeparen.
Waarden worden automatisch URL-gecodeerd. Waarden van macro's worden automatisch opgelost en vervolgens automatisch URL-gecodeerd.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_URL cURL-optie in.
Request type Selecteer het type aanvraagmethode: GET, POST, PUT of HEAD
Timeout Zabbix zal niet meer tijd besteden aan het verwerken van de URL dan de ingestelde hoeveelheid tijd (1-60 seconden). In feite bepaalt deze parameter de maximale tijd voor het maken van een verbinding met de URL en de maximale tijd voor het uitvoeren van een HTTP-aanvraag. Daarom zal Zabbix niet meer dan 2 x Time-out seconden besteden aan één controle.
Tijd bijvoegsels worden ondersteund, bijv. 30s, 1m.
Ondersteunde macro's: gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_TIMEOUT cURL-optie in.
Request body type Selecteer het type aanvraagbody:
Rauwe gegevens - aangepaste HTTP-aanvraagbody, macro's worden vervangen maar er wordt geen codering uitgevoerd
JSON-gegevens - HTTP-aanvraagbody in JSON-indeling. Macro's kunnen worden gebruikt als tekenreeks, getal, true en false; macro's die als tekenreeks worden gebruikt, moeten worden ingesloten in dubbele aanhalingstekens. Waarden van macro's worden automatisch opgelost en vervolgens automatisch ontsnapt. Als "Content-Type" niet is gespecificeerd in de koppen, wordt dit standaard "Content-Type: application/json"
XML-gegevens - HTTP-aanvraagbody in XML-indeling. Macro's kunnen worden gebruikt als tekstknooppunt, attribuut of CDATA-sectie. Waarden van macro's worden automatisch opgelost en vervolgens automatisch ontsnapt in een tekstknooppunt en attribuut. Als "Content-Type" niet is gespecificeerd in de koppen, wordt dit standaard "Content-Type: application/xml"
Let op dat het selecteren van XML-gegevens libxml2 vereist.
Request body Voer de aanvraagbody in.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Headers Aangepaste HTTP-koppen die worden verzonden bij het uitvoeren van een aanvraag.
Opgespecificeerd als attribuut- en waardeparen.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_HTTPHEADER cURL-optie in.
Required status codes Lijst van verwachte HTTP-statuscodes. Als Zabbix een code krijgt die niet in de lijst staat, wordt het item niet ondersteund. Als leeg, wordt geen controle uitgevoerd.
Bijvoorbeeld: 200,201,210-299
Ondersteunde macro's in de lijst: gebruikersmacro's, macros voor laagniveaudetectie.
Dit gebruikt de CURLINFO_RESPONSE_CODE cURL-optie.
Follow redirects Markeer het selectievakje om HTTP-omleidingen te volgen.
Dit stelt de CURLOPT_FOLLOWLOCATION cURL-optie in.
Retrieve mode Selecteer het deel van het antwoord dat moet worden opgehaald:
Body - alleen de body
Headers - alleen koppen
Body en headers - body en headers
Convert to JSON Koppen worden opgeslagen als attribuut- en waardeparen onder de sleutel "header".
Als 'Content-Type: application/json' wordt aangetroffen, wordt de body opgeslagen als een object, anders wordt deze opgeslagen als tekenreeks, bijvoorbeeld:
HTTP proxy Je kunt een HTTP-proxy specificeren die moet worden gebruikt, met behulp van het formaat [protocol://][username[:password]@]proxy.example.com[:port].
De optionele voorvoegsel protocol:// kan worden gebruikt om alternatieve proxy-protocollen op te geven (bijv. https, socks4, socks5; zie documentatie; de protocolvoorvoegselondersteuning is toegevoegd in cURL 7.21.7). Zonder gespecificeerd protocol wordt de proxy behandeld als een HTTP-proxy. Als je het verkeerde protocol opgeeft, mislukt de verbinding en wordt het item niet ondersteund.
Standaard wordt poort 1080 gebruikt.
Indien gespecificeerd, zal de proxy proxy-gerelateerde omgevingsvariabelen zoals http_proxy, HTTPS_PROXY overschrijven. Als niet gespecificeerd, zal de proxy proxy-gerelateerde omgevingsvariabelen niet overschrijven. De ingevoerde waarde wordt "zoals het is" doorgegeven, er vindt geen controle plaats.
Let op dat alleen eenvoudige verificatie wordt ondersteund met HTTP-proxy.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_PROXY cURL-optie in.
HTTP authentication Type authenticatie:
Geen - er wordt geen authenticatie gebruikt.
Basis - basisverificatie wordt gebruikt.
NTLM - NTLM (Windows NT LAN Manager)-verificatie wordt gebruikt.
Kerberos - Kerberos-verificatie wordt gebruikt. Zie ook: Kerberos configureren met Zabbix.
Digest - Digest-verificatie wordt gebruikt.
Het selecteren van een verificatiemethode zal twee extra velden bieden om een gebruikersnaam en wachtwoord in te voeren, waar gebruikersmacro's en laagniveaudetectie-macro's worden ondersteund.
Dit stelt de CURLOPT_HTTPAUTH cURL-optie in.
SSL verify peer Markeer het selectievakje om het SSL-certificaat van de webserver te verifiëren. Het servercertificaat wordt automatisch overgenomen uit de systeembrede locatie van de certificaatautoriteit (CA). Je kunt de locatie van CA-bestanden overschrijven met de Zabbix-server- of proxy-configuratieparameter SSLCALocation.
Dit stelt de CURLOPT_SSL_VERIFYPEER cURL-optie in.
SSL verify host Markeer het selectievakje om te verifiëren dat het veld Common Name of het veld Subject Alternate Name van het certificaat van de webserver overeenkomt.
Dit stelt de CURLOPT_SSL_VERIFYHOST cURL-optie in.
SSL certificate file Naam van het SSL-certificaatbestand dat wordt gebruikt voor clientverificatie. Het certificaatbestand moet in PEM-indeling zijn. Als het certificaatbestand ook de privésleutel bevat, laat dan het veld SSL-sleutelbestand leeg. Als de sleutel is versleuteld, geef dan het wachtwoord op in het veld SSL-sleutelwachtwoord. De map die dit bestand bevat, wordt gespecificeerd door de Zabbix-server- of proxy-configuratieparameter SSLCertLocation.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_SSLCERT cURL-optie in.
SSL key file Naam van het SSL-privésleutelbestand dat wordt gebruikt voor clientverificatie. Het privésleutelbestand moet in PEM-indeling zijn. De map die dit bestand bevat, wordt gespecificeerd door de Zabbix-server- of proxy-configuratieparameter SSLKeyLocation.
Ondersteunde macro's: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_SSLKEY cURL-optie in.
SSL key password Wachtwoord voor het SSL-privésleutelbestand.
Ondersteunde macro's: gebruikersmacro's, macros voor laagniveaudetectie.
Dit stelt de CURLOPT_KEYPASSWD cURL-optie in.
Enable trapping Met dit selectievakje gemarkeerd, zal het item ook functioneren als trapper-item en zal het gegevens accepteren die naar dit item zijn gestuurd door Zabbix-sender of met behulp van het Zabbix-senderprotocol.
Allowed hosts Alleen zichtbaar als het selectievakje Enable trapping is gemarkeerd.
Lijst van door komma's gescheiden IP-adressen, optioneel in CIDR-notatie, of DNS-namen.
Indien gespecificeerd, worden inkomende verbindingen alleen geaccepteerd van de hier vermelde hosts.
Indien IPv6-ondersteuning is ingeschakeld, worden '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' gelijk behandeld en '::/0' zal elk IPv4- of IPv6-adres toestaan.
'0.0.0.0/0' kan worden gebruikt om elk IPv4-adres toe te staan.
Merk op dat "IPv4-compatibele IPv6-adressen" (0000::/96-prefix) worden ondersteund maar verouderd zijn volgens RFC4291.
Voorbeeld: 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}
Spaties en gebruikersmacro's zijn toegestaan in dit veld.
Hostmacro's: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} zijn toegestaan in dit veld.

Als het veld HTTP proxy leeg wordt gelaten, is een andere manier om een HTTP-proxy te gebruiken om proxy-gerelateerde omgevingsvariabelen in te stellen.

Voor HTTP - stel de http_proxy-omgevingsvariabele in voor de Zabbix server-gebruiker. Bijvoorbeeld:
http_proxy=http://proxy_ip:proxy_port.

Voor HTTPS - stel de HTTPS_PROXY-omgevingsvariabele in. Bijvoorbeeld:
HTTPS_PROXY=http://proxy_ip:proxy_port. Meer details zijn beschikbaar door het uitvoeren van een shell-opdracht: # man curl.

[1] Zabbix ondersteunt alleen certificaat- en privésleutelbestanden in PEM-indeling. Als je je certificaat- en privésleutelgegevens in het bestandsformaat PKCS #12 hebt (meestal met de extensie *.p12 of *.pfx), kun je het PEM-bestand ervan genereren met behulp van de volgende opdrachten:

openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
       openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

Voorbeelden

Voorbeeld 1

Stuur eenvoudige GET-verzoeken om gegevens op te halen van diensten zoals Elasticsearch:

  • Maak een GET-item met URL: localhost:9200/?pretty
  • Let op de reactie:
{
         "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"
       }
  • Haal nu het versienummer eruit met behulp van een JSONPath voorbewerkingsstap: $.version.number
Voorbeeld 2

Verstuur eenvoudige POST-verzoeken om gegevens op te halen van diensten zoals Elasticsearch:

  • Maak een POST-item met de URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configureer de volgende POST-body om de processorbelasting te verkrijgen (gemiddelde van 1 minuut per kern)
{
           "query": {
               "bool": {
                   "must": [{
                       "match": {
                           "itemid": 28275
                       }
                   }],
                   "filter": [{
                       "range": {
                           "clock": {
                               "gt": 1517565836,
                               "lte": 1517566137
                           }
                       }
                   }]
               }
           }
       }
  • Ontvangen:
{
           "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkVZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
           "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
                   }
               }]
           }
       }
  • Gebruik nu een JSONPath-preprocessingstap om de itemwaarde te krijgen: $.hits.hits[0]._source.value
Voorbeeld 3

Controleren of de Zabbix API actief is, met gebruik van apiinfo.version.

  • Itemconfiguratie:

Let op het gebruik van de POST-methode met JSON-gegevens, het instellen van verzoekheaders en het vragen om alleen headers terug te geven:

  • Voorbewerking van itemwaarde met reguliere expressie om HTTP-code te verkrijgen:

  • Controleer het resultaat in Laatste gegevens:

Voorbeeld 4

Het ophalen van weergegevens door verbinding te maken met de Openweathermap openbare service.

  • Configureer een master item voor bulkgegevensverzameling in één JSON:

Master Item

Let op het gebruik van macro's in query-velden. Raadpleeg de Openweathermap API voor hoe u ze moet invullen.

Voorbeeld JSON dat in reactie op de HTTP-agent wordt geretourneerd:

{
           "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
           }
       }

De volgende stap is om afhankelijke items te configureren die gegevens uit de JSON halen.

  • Configureer een voorbeeld afhankelijk item voor vochtigheid:

Dependent Item

Andere weermeters zoals 'Temperatuur' worden op dezelfde manier toegevoegd.

  • Voorbeeld afhankelijk itemwaarde preprocessing met JSONPath:

JSONPath Preprocessing

  • Controleer het resultaat van weergegevens in Laatste gegevens:

Laatste gegevens

Voorbeeld 5

Verbinding maken met de Nginx-statuspagina en de bijbehorende gegevens in bulk ophalen.

# Plaats de volgende configuratie in uw Nginx-configuratiebestand, meestal nginx.conf of een siteconfiguratiebestand.
       location /nginx_status {
           stub_status on;
           access_log off;
           allow 127.0.0.1;  # Hiermee kunt u alleen verbinding maken met de statuspagina vanaf localhost
           deny all;         # Alle andere IP-adressen worden geweigerd
       }
  • Configureer een master item voor bulkgegevensverzameling:

Master Item

Voorbeeld van uitvoer van Nginx stub-status:

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

De volgende stap is om afhankelijke items te configureren die gegevens extraheren.

  • Configureer een voorbeeld afhankelijk item voor verzoeken per seconde:

Dependent Item

  • Voorbeeld afhankelijk itemwaarde preprocessing met reguliere expressie server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

Preprocessing

  • Controleer het volledige resultaat van de stub-module in Laatste gegevens:

Laatste gegevens