HTTP aģents

Pārskats

Šis vienuma tips ļauj veikt datu aptauju, izmantojot HTTP/HTTPS protokolu. Iespējama arī datu saņemšana, izmantojot Zabbix sender utilītu vai Zabbix sender protokolu (datu nosūtīšanai uz Zabbix serveri vai starpniekserveri), vai izmantojot history.push API metodi (datu nosūtīšanai uz Zabbix serveri).

HTTP vienuma pārbaudes izpilda Zabbix serveris. Tomēr, ja hosts tiek uzraudzīti ar Zabbix starpniekserveri, HTTP vienuma pārbaudes izpilda starpniekserveris.

HTTP vienuma pārbaudēm nav nepieciešams, lai uz uzraudzītā hosta darbotos kāds aģents.

HTTP aģents atbalsta gan HTTP, gan HTTPS. Zabbix pēc izvēles sekos pāradresācijām (skatiet tālāk opciju Sekot pāradresācijām). Maksimālais pāradresāciju skaits ir fiksēts uz 10 (izmantojot cURL opciju CURLOPT_MAXREDIRS).

Zabbix serverim/starpniekserverim sākotnēji jābūt konfigurētam ar cURL (libcurl) atbalstu.

HTTP pārbaudes tiek izpildītas asinhroni - nav nepieciešams saņemt viena pieprasījuma atbildi, pirms tiek sāktas citas pārbaudes. DNS atrisināšana arī ir asinhrona.

Asinhrono pārbaužu maksimālais paralēlais skaits ir 1000 (definēts ar MaxConcurrentChecksPerPoller).

Asinhrono HTTP aģenta aptaujātāju skaits ir definēts ar parametru StartHTTPAgentPollers.

Pastāvīgo savienojumu cURL funkcionalitāte ir pievienota HTTP aģenta pārbaudēm kopš Zabbix 7.0.

Konfigurēšana

Lai konfigurētu HTTP vienumu:

  1. Atveriet Data collection > Hosts.
  2. Hosts rindā noklikšķiniet uz Items.
  3. Noklikšķiniet uz Create item.
  4. Veidlapā ievadiet vienuma parametrus.

Visi obligātie ievades lauki ir atzīmēti ar sarkanu zvaigznīti.

Lauki, kuriem HTTP vienumiem nepieciešama specifiska informācija:

Parametrs Apraksts
Type Šeit atlasiet HTTP agent.
Key Ievadiet unikālu vienuma atslēgu.
URL URL, ar kuru izveidot savienojumu un izgūt datus. Piemēram:
https://www.example.com
http://www.example.com/download
Domēna nosaukumus var norādīt Unicode rakstzīmēs. Izpildot HTTP pārbaudi, tie tiek automātiski pārveidoti par ASCII, izmantojot punycode.
Pogu Parse var izmantot, lai no URL atdalītu neobligātos vaicājuma laukus (piemēram, ?name=Admin&password=mypassword), pārvietojot atribūtus un vērtības uz Query fields, lai automātiski veiktu URL kodēšanu.
Ierobežots līdz 2048 rakstzīmēm.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_URL.
Query fields URL mainīgie (skatiet iepriekš).
Tie tiek norādīti kā atribūtu un vērtību pāri.
Vērtības tiek automātiski kodētas URL formātā. Makrokomandu vērtības tiek aizstātas un pēc tam automātiski kodētas URL formātā.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_URL.
Request type Atlasiet pieprasījuma metodes tipu: GET, POST, PUT vai HEAD.
Request body type Atlasiet pieprasījuma pamatteksta tipu:
Raw data - pielāgots HTTP pieprasījuma pamatteksts; makrokomandas tiek aizstātas, bet kodēšana netiek veikta
JSON data - HTTP pieprasījuma pamatteksts JSON formātā. Makrokomandas var izmantot kā virkni, skaitli, true un false; makrokomandas, kas tiek izmantotas kā virknes, jāiekļauj dubultpēdiņās. Makrokomandu vērtības tiek aizstātas un pēc tam automātiski ekranizētas. Ja galvenēs nav norādīts "Content-Type", pēc noklusējuma tiks izmantots "Content-Type: application/json"
XML data - HTTP pieprasījuma pamatteksts XML formātā. Makrokomandas var izmantot kā teksta mezglu, atribūtu vai CDATA sadaļu. Makrokomandu vērtības tiek aizstātas un pēc tam automātiski ekranizētas teksta mezglā un atribūtā. Ja galvenēs nav norādīts "Content-Type", pēc noklusējuma tiks izmantots "Content-Type: application/xml"
Request body Ievadiet pieprasījuma pamattekstu.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Headers Pielāgotas HTTP galvenes, kas tiks nosūtītas, izpildot pieprasījumu.
Tās tiek norādītas kā atribūtu un vērtību pāri.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_HTTPHEADER.
Required status codes Sagaidāmo HTTP statusa kodu saraksts. Ja Zabbix saņem kodu, kas nav iekļauts sarakstā, vienums kļūs neatbalstīts. Ja lauks ir tukšs, pārbaude netiek veikta.
Piemēram: 200,201,210-299
Sarakstā atbalstītās makrokomandas: lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tiek izmantota cURL opcija CURLINFO_RESPONSE_CODE.
Follow redirects Atzīmējiet izvēles rūtiņu, lai sekotu HTTP novirzēm.
Tādējādi tiek iestatīta cURL opcija CURLOPT_FOLLOWLOCATION.
Retrieve mode Atlasiet izgūstamo atbildes daļu:
Body - tikai pamatteksts
Headers - tikai galvenes
Body and headers - pamatteksts un galvenes
Convert to JSON Galvenes tiek saglabātas kā atribūtu un vērtību pāri zem atslēgas "header", ja Retrieve mode nav iestatīts uz Body.
Ja tiek atrasts 'Content-Type: application/json', pamatteksts tiek saglabāts kā objekts; pretējā gadījumā tas tiek saglabāts kā virkne, piemēram:
HTTP proxy Varat norādīt izmantojamo HTTP starpniekserveri, izmantojot formātu [protocol://][username[:password]@]proxy.example.com[:port].
Neobligāto prefiksu protocol:// var izmantot, lai norādītu alternatīvus starpniekservera protokolus (piemēram, https, socks4, socks5; skatiet dokumentāciju; protokola prefiksa atbalsts tika pievienots cURL 7.21.7). Ja protokols nav norādīts, starpniekserveris tiks uzskatīts par HTTP starpniekserveri. Ja norādīts nepareizs protokols, savienojums neizdosies un vienums kļūs neatbalstīts.
Pēc noklusējuma tiks izmantots ports 1080.
Ja starpniekserveris ir norādīts, tas aizstās ar starpniekserveri saistītos vides mainīgos, piemēram, http_proxy, HTTPS_PROXY. Ja tas nav norādīts, starpniekserveris ar starpniekserveri saistītos vides mainīgos neaizstās. Ievadītā vērtība tiek nodota "kā ir", un tās pareizība netiek pārbaudīta.
Piezīme: HTTP starpniekserverim tiek atbalstīta tikai vienkārša autentifikācija.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_PROXY.
HTTP authentication Atlasiet autentifikācijas opciju:
None - autentifikācija netiek izmantota;
Basic - tiek izmantota pamata autentifikācija;
NTLM - tiek izmantota NTLM (Windows NT LAN Manager) autentifikācija;
Kerberos - tiek izmantota Kerberos autentifikācija (skatiet arī: Kerberos konfigurēšana ar Zabbix);
Digest - tiek izmantota Digest autentifikācija.
Tādējādi tiek iestatīta cURL opcija CURLOPT_HTTPAUTH.
User name Ievadiet lietotājvārdu (līdz 255 rakstzīmēm).
Šis lauks ir pieejams, ja HTTP authentication ir iestatīts uz Basic, NTLM, Kerberos vai Digest. Tiek atbalstītas lietotāja makrokomandas un zema līmeņa atklāšanas makrokomandas.
Password Ievadiet lietotāja paroli (līdz 255 rakstzīmēm).
Šis lauks ir pieejams, ja HTTP authentication ir iestatīts uz Basic, NTLM, Kerberos vai Digest. Tiek atbalstītas lietotāja makrokomandas un zema līmeņa atklāšanas makrokomandas.
SSL verify peer Atzīmējiet izvēles rūtiņu, lai pārbaudītu tīmekļa servera SSL sertifikātu. Servera sertifikāts tiek pārbaudīts, izmantojot sistēmas mēroga sertificēšanas iestādes (CA) atrašanās vietā esošos uzticamos sertifikātus. CA failu atrašanās vietu var mainīt, izmantojot Zabbix servera vai starpniekservera konfigurācijas parametru SSLCALocation.
Tādējādi tiek iestatīta cURL opcija CURLOPT_SSL_VERIFYPEER.
SSL verify host Atzīmējiet izvēles rūtiņu, lai pārbaudītu, vai tīmekļa servera sertifikāta lauks Common Name vai Subject Alternate Name atbilst.
Tādējādi tiek iestatīta cURL opcija CURLOPT_SSL_VERIFYHOST.
SSL certificate file Klienta autentifikācijai izmantotā SSL sertifikāta faila nosaukums. Sertifikāta failam jābūt PEM1 formātā. Ja sertifikāta failā ir arī privātā atslēga, atstājiet SSL atslēgas faila lauku tukšu. Ja atslēga ir šifrēta, norādiet paroli SSL atslēgas paroles laukā. Direktoriju, kurā atrodas šis fails, norāda Zabbix servera vai starpniekservera konfigurācijas parametrs SSLCertLocation.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_SSLCERT.
SSL key file Klienta autentifikācijai izmantotā SSL privātās atslēgas faila nosaukums. Privātās atslēgas failam jābūt PEM1 formātā. Direktoriju, kurā atrodas šis fails, norāda Zabbix servera vai starpniekservera konfigurācijas parametrs SSLKeyLocation.
Atbalstītās makrokomandas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_SSLKEY.
SSL key password SSL privātās atslēgas faila parole.
Atbalstītās makrokomandas: lietotāja makrokomandas, zema līmeņa atklāšanas makrokomandas.
Tādējādi tiek iestatīta cURL opcija CURLOPT_KEYPASSWD.
Timeout Zabbix URL apstrādei netērēs vairāk par iestatīto laiku (1-600 sekundes). Faktiski šis parametrs nosaka maksimālo laiku savienojuma izveidei ar URL un maksimālo laiku HTTP pieprasījuma izpildei. Tāpēc Zabbix vienai pārbaudei netērēs vairāk par 2 x Timeout sekundēm.
Tādējādi tiek iestatīta cURL opcija CURLOPT_TIMEOUT.
Papildinformāciju par parametru Timeout skatiet vispārīgajos vienuma atribūtos.
Enable trapping Ja šī izvēles rūtiņa ir atzīmēta, vienums darbosies arī kā trapper vienums un pieņems datus, kas nosūtīti Zabbix serverim vai starpniekserverim, izmantojot utilītu Zabbix sender vai Zabbix sender protokolu, kā arī pieņems datus, kas nosūtīti Zabbix serverim, izmantojot history.push API metodi. Papildinformāciju par datu nosūtīšanu skatiet: Trapper vienumi.
Allowed hosts Redzams tikai tad, ja ir atzīmēta izvēles rūtiņa Enable trapping.
Ar komatiem atdalītu IP adrešu (pēc izvēles CIDR apzīmējumā) vai DNS nosaukumu saraksts.

Noklusējuma vērtība ir lietotāja makrokomanda {$TRAPPER.ALLOWED_HOSTS}. Pēc noklusējuma {$TRAPPER.ALLOWED_HOSTS} ir 127.0.0.1,::1. Varat ievadīt adreses tieši laukā vai mainīt makrokomandas vērtību. Ja lauks ir tukšs, ienākošie savienojumi no visiem hosts tiks noraidīti. Ja tas ir norādīts, ienākošie savienojumi tiks pieņemti tikai no šeit uzskaitītajiem hosts.
Ja ir iespējots IPv6 atbalsts, 127.0.0.1, ::127.0.0.1, ::ffff:127.0.0.1 tiek uzskatītas par līdzvērtīgām, un ::/0 atļaus jebkuru IPv4 vai IPv6 adresi.
0.0.0.0/0 var izmantot, lai atļautu jebkuru IPv4 adresi.
Ņemiet vērā, ka "IPv4-compatible IPv6 addresses" (0000::/96 prefikss) tiek atbalstītas, taču RFC4291 tās ir novecojušas.
Piemērs: 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}
Šajā laukā ir atļautas atstarpes un lietotāja makrokomandas.
Šajā laukā ir atļautas hosts makrokomandas: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}.

Ja lauks HTTP proxy ir tukšs, cits veids, kā izmantot HTTP starpniekserveri, ir iestatīt ar starpniekserveri saistītos vides mainīgos.

HTTP gadījumā iestatiet http_proxy vides mainīgo Zabbix servera lietotājam. Piemēram:
http_proxy=http://proxy_ip:proxy_port.

HTTPS gadījumā iestatiet HTTPS_PROXY vides mainīgo. Piemēram:
HTTPS_PROXY=http://proxy_ip:proxy_port. Papildinformāciju var iegūt, izpildot čaulas komandu: # man curl.

[1] Zabbix atbalsta tikai sertifikātu un privāto atslēgu failus PEM formātā. Ja sertifikāta un privātās atslēgas dati atrodas PKCS #12 formāta failā (parasti ar paplašinājumu *.p12 vai *.pfx), PEM failu no tā var ģenerēt, izmantojot šādas komandas:

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

Piemēri

Piemērs 1

Nosūtiet vienkāršus GET pieprasījumus, lai izgūtu datus no tādiem pakalpojumiem kā Elasticsearch:

  • Izveidojiet GET vienumu ar URL: localhost:9200/?pretty
  • Pievērsiet uzmanību atbildei:
    {
      "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"
    }
  • Tagad izvelciet versijas numuru, izmantojot JSONPath pirmapstrādes soli: $.version.number
Piemērs 2

Nosūtiet vienkāršus POST pieprasījumus, lai izgūtu datus no tādiem pakalpojumiem kā Elasticsearch:

  • Izveidojiet POST vienumu ar URL: http://localhost:9200/str/values/_search?scroll=10s
  • Konfigurējiet šādu POST ķermeni, lai iegūtu procesora noslodzi (1 minūtes vidējais rādītājs uz kodolu)
    {
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "itemid": 28275
                    }
                }],
                "filter": [{
                    "range": {
                        "clock": {
                            "gt": 1517565836,
                            "lte": 1517566137
                        }
                    }
                }]
            }
        }
    }
  • Saņemts:
    {
        "_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
                }
            }]
        }
    }
  • Tagad izmantojiet JSONPath priekšapstrādes soli, lai iegūtu vienuma vērtību: $.hits.hits[0]._source.value
Piemērs 3

Pārbaude, vai Zabbix API ir aktīva, izmantojot apiinfo.version.

  • Vienuma konfigurācija:

Ņemiet vērā POST metodes izmantošanu ar JSON datiem, pieprasījuma galvenes iestatīšanu un pieprasījumu atgriezt tikai galvenes:

  • Vienuma vērtības pirmapstrāde ar regulāro izteiksmi, lai iegūtu HTTP kodu:

  • Rezultāta pārbaude sadaļā Latest data:

Piemērs 4

Laika apstākļu informācijas iegūšana, pieslēdzoties Openweathermap publiskajam servisam.

  • Konfigurējiet galveno vienumu, lai veiktu masveida datu vākšanu vienā JSON:

Ņemiet vērā makro izmantošanu vaicājuma laukos. Skatiet Openweathermap API, lai uzzinātu, kā tos aizpildīt.

Parauga JSON, kas tiek atgriezts HTTP aģenta atbildē:

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

Nākamais uzdevums ir konfigurēt atkarīgos vienumus, kas no JSON izgūst datus.

  • Konfigurējiet parauga atkarīgo vienumu mitrumam:

Citi laikapstākļu rādītāji, piemēram, "Temperature", tiek pievienoti tādā pašā veidā.

  • Parauga atkarīgā vienuma vērtības pirmapstrāde ar JSONPath:

  • Pārbaudiet laikapstākļu datu rezultātu sadaļā Latest data:

5. piemērs

Savienojuma izveide ar NGINX statusa lapu un tās metrikas iegūšana lielapjomā.

  • Konfigurējiet NGINX, izmantojot oficiālo rokasgrāmatu.
  • Konfigurējiet galveno vienumu lielapjoma datu apkopošanai:

NGINX stub statusa izvades piemērs:

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

Nākamais uzdevums ir konfigurēt atkarīgos vienumus, kas iegūst datus.

  • Konfigurējiet atkarīga vienuma piemēru pieprasījumiem sekundē:

  • Atkarīga vienuma vērtības priekšapstrādes piemērs ar regulāro izteiksmi server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

  • Pārbaudiet pilno stub moduļa rezultātu sadaļā Jaunākie dati: