16 Agent HTTP

Przegląd

Ten typ pozycji umożliwia odpytywanie danych przy użyciu protokołu HTTP/HTTPS. Możliwe jest również trapowanie przy użyciu narzędzia Zabbix sender lub protokołu Zabbix sender (do wysyłania danych do serwera lub proxy Zabbix), albo przy użyciu metody API history.push (do wysyłania danych do serwera Zabbix).

Kontrole pozycji HTTP są wykonywane przez serwer Zabbix. Jednak gdy hosty są monitorowane przez proxy Zabbix, kontrole pozycji HTTP są wykonywane przez proxy.

Kontrole pozycji HTTP nie wymagają uruchomionego agenta na monitorowanym hoście.

HTTP agent obsługuje zarówno HTTP, jak i HTTPS. Zabbix może opcjonalnie podążać za przekierowaniami (zobacz opcję Follow redirects poniżej). Maksymalna liczba przekierowań jest na stałe ustawiona na 10 (przy użyciu opcji cURL CURLOPT_MAXREDIRS).

Serwer/proxy Zabbix musi być wstępnie skonfigurowany z obsługą cURL (libcurl).

Kontrole HTTP są wykonywane asynchronicznie — nie jest wymagane odebranie odpowiedzi na jedno żądanie przed rozpoczęciem innych kontroli. Rozwiązywanie DNS również odbywa się asynchronicznie.

Maksymalna współbieżność kontroli asynchronicznych wynosi 1000 (zdefiniowana przez MaxConcurrentChecksPerPoller).

Liczba asynchronicznych pollerów HTTP agent jest definiowana przez parametr StartHTTPAgentPollers.

Funkcja trwałych połączeń cURL została dodana do kontroli HTTP agent od wersji Zabbix 7.0.

Konfiguracja

Aby skonfigurować pozycję HTTP:

  • Przejdź do: Data collectionHosts
  • Kliknij Items w wierszu hosta
  • Kliknij Create item
  • Wprowadź parametry pozycji w formularzu

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.

Pola wymagające określonych informacji dla pozycji HTTP to:

Parameter Description
Type Wybierz tutaj HTTP agent.
Key Wprowadź unikalny klucz pozycji.
URL Adres URL, z którym ma zostać nawiązane połączenie i z którego mają zostać pobrane dane. Na przykład:
https://www.example.com
http://www.example.com/download
Nazwy domen mogą być podawane przy użyciu znaków Unicode. Podczas wykonywania sprawdzenia HTTP są one automatycznie konwertowane z punycode do ASCII.
Przycisk Parse może zostać użyty do oddzielenia opcjonalnych pól zapytania (takich jak ?name=Admin&password=mypassword) od adresu URL, przenosząc atrybuty i wartości do Query fields w celu automatycznego kodowania URL.
Limit wynosi 2048 znaków.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_URL.
Query fields Zmienne dla adresu URL (patrz wyżej).
Określane jako pary atrybut-wartość.
Wartości są automatycznie kodowane URL. Wartości z makr są rozwijane, a następnie automatycznie kodowane URL.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_URL.
Request type Wybierz typ metody żądania: GET, POST, PUT lub HEAD
Request body type Wybierz typ treści żądania:
Raw data - niestandardowa treść żądania HTTP; makra są podstawiane, ale nie jest wykonywane kodowanie
JSON data - treść żądania HTTP w formacie JSON. Makra mogą być używane jako string, number, true i false; makra używane jako string muszą być ujęte w podwójne cudzysłowy. Wartości z makr są rozwijane, a następnie automatycznie poprzedzane znakami ucieczki. Jeśli w nagłówkach nie określono "Content-Type", domyślnie zostanie użyte "Content-Type: application/json"
XML data - treść żądania HTTP w formacie XML. Makra mogą być używane jako węzeł tekstowy, atrybut lub sekcja CDATA. Wartości z makr są rozwijane, a następnie automatycznie poprzedzane znakami ucieczki w węźle tekstowym i atrybucie. Jeśli w nagłówkach nie określono "Content-Type", domyślnie zostanie użyte "Content-Type: application/xml"
Request body Wprowadź treść żądania.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Headers Niestandardowe nagłówki HTTP, które zostaną wysłane podczas wykonywania żądania.
Określane jako pary atrybut-wartość.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_HTTPHEADER.
Required status codes Lista oczekiwanych kodów statusu HTTP. Jeśli Zabbix otrzyma kod, którego nie ma na liście, pozycja stanie się nieobsługiwana. Jeśli pole jest puste, sprawdzenie nie jest wykonywane.
Na przykład: 200,201,210-299
Obsługiwane makra na liście: makra użytkownika, makra niskopoziomowego wykrywania.
Wykorzystuje to opcję cURL CURLINFO_RESPONSE_CODE.
Follow redirects Zaznacz pole wyboru, aby podążać za przekierowaniami HTTP.
Ustawia to opcję cURL CURLOPT_FOLLOWLOCATION.
Retrieve mode Wybierz część odpowiedzi, która ma zostać pobrana:
Body - tylko treść
Headers - tylko nagłówki
Body and headers - treść i nagłówki
Convert to JSON Nagłówki są zapisywane jako pary atrybut-wartość pod kluczem "header", jeśli Retrieve mode nie jest ustawione na Body.
Jeśli zostanie napotkane 'Content-Type: application/json', treść zostanie zapisana jako obiekt; w przeciwnym razie zostanie zapisana jako string, na przykład:
HTTP proxy Możesz określić używany serwer proxy HTTP, korzystając z formatu [protocol://][username[:password]@]proxy.example.com[:port].
Opcjonalny prefiks protocol:// może zostać użyty do określenia alternatywnych protokołów proxy (np. https, socks4, socks5; zobacz documentation; obsługa prefiksu protokołu została dodana w cURL 7.21.7). Jeśli nie określono protokołu, proxy będzie traktowany jako proxy HTTP. Jeśli określisz niewłaściwy protokół, połączenie zakończy się niepowodzeniem, a pozycja stanie się nieobsługiwana.
Domyślnie zostanie użyty port 1080.
Jeśli określono, proxy nadpisze zmienne środowiskowe związane z proxy, takie jak http_proxy, HTTPS_PROXY. Jeśli nie określono, proxy nie nadpisze zmiennych środowiskowych związanych z proxy. Wprowadzona wartość jest przekazywana „tak jak jest”; nie jest wykonywana żadna kontrola poprawności.
Uwaga: w przypadku proxy HTTP obsługiwane jest tylko proste uwierzytelnianie.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_PROXY.
HTTP authentication Wybierz opcję uwierzytelniania:
None - bez uwierzytelniania;
Basic - używane jest uwierzytelnianie podstawowe;
NTLM - używane jest uwierzytelnianie NTLM (Windows NT LAN Manager);
Kerberos - używane jest uwierzytelnianie Kerberos (zobacz także: Configuring Kerberos with Zabbix);
Digest - używane jest uwierzytelnianie Digest.
Ustawia to opcję cURL CURLOPT_HTTPAUTH.
User name Wprowadź nazwę użytkownika (do 255 znaków).
To pole jest dostępne, jeśli HTTP authentication jest ustawione na Basic, NTLM, Kerberos lub Digest. Obsługiwane są makra użytkownika i makra niskopoziomowego wykrywania.
Password Wprowadź hasło użytkownika (do 255 znaków).
To pole jest dostępne, jeśli HTTP authentication jest ustawione na Basic, NTLM, Kerberos lub Digest. Obsługiwane są makra użytkownika i makra niskopoziomowego wykrywania.
SSL verify peer Zaznacz pole wyboru, aby weryfikować certyfikat SSL serwera WWW. Certyfikat serwera zostanie automatycznie pobrany z systemowej lokalizacji urzędu certyfikacji (CA). Możesz zastąpić lokalizację plików CA za pomocą parametru konfiguracyjnego serwera lub proxy Zabbix SSLCALocation.
Ustawia to opcję cURL CURLOPT_SSL_VERIFYPEER.
SSL verify host Zaznacz pole wyboru, aby zweryfikować, czy pole Common Name lub Subject Alternate Name certyfikatu serwera WWW jest zgodne.
Ustawia to opcję cURL CURLOPT_SSL_VERIFYHOST.
SSL certificate file Nazwa pliku certyfikatu SSL używanego do uwierzytelniania klienta. Plik certyfikatu musi być w formacie PEM1. Jeśli plik certyfikatu zawiera również klucz prywatny, pozostaw pole pliku klucza SSL puste. Jeśli klucz jest zaszyfrowany, podaj hasło w polu hasła klucza SSL. Katalog zawierający ten plik jest określany przez parametr konfiguracyjny serwera lub proxy Zabbix SSLCertLocation.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_SSLCERT.
SSL key file Nazwa pliku klucza prywatnego SSL używanego do uwierzytelniania klienta. Plik klucza prywatnego musi być w formacie PEM1. Katalog zawierający ten plik jest określany przez parametr konfiguracyjny serwera lub proxy Zabbix SSLKeyLocation.
Obsługiwane makra: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_SSLKEY.
SSL key password Hasło do pliku klucza prywatnego SSL.
Obsługiwane makra: makra użytkownika, makra niskopoziomowego wykrywania.
Ustawia to opcję cURL CURLOPT_KEYPASSWD.
Timeout Zabbix nie poświęci więcej niż ustawiony czas na przetwarzanie adresu URL (1-600 sekund). W praktyce parametr ten określa maksymalny czas na nawiązanie połączenia z adresem URL oraz maksymalny czas wykonania żądania HTTP. Dlatego Zabbix nie poświęci więcej niż 2 x Timeout sekund na jedno sprawdzenie.
Ustawia to opcję cURL CURLOPT_TIMEOUT.
Więcej informacji o parametrze Timeout można znaleźć w general item attributes.
Enable trapping Po zaznaczeniu tego pola wyboru pozycja będzie również działać jako pozycja trapper i będzie akceptować dane wysyłane do serwera lub proxy Zabbix za pomocą narzędzia Zabbix sender lub protocol Zabbix sender, albo będzie akceptować dane wysyłane do serwera Zabbix za pomocą metody API history.push. Więcej informacji o wysyłaniu danych można znaleźć tutaj: Trapper items.
Allowed hosts Widoczne tylko wtedy, gdy zaznaczone jest pole wyboru Enable trapping.
Lista adresów IP rozdzielonych przecinkami, opcjonalnie w notacji CIDR, lub nazw DNS.
Jeśli określono, połączenia przychodzące będą akceptowane tylko od hostów wymienionych tutaj.
Jeśli obsługa IPv6 jest włączona, wtedy '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' są traktowane jednakowo, a '::/0' pozwoli na dowolny adres IPv4 lub IPv6.
'0.0.0.0/0' może zostać użyte do zezwolenia na dowolny adres IPv4.
Zwróć uwagę, że „adresy IPv6 zgodne z IPv4” (prefiks 0000::/96) są obsługiwane, ale przestarzałe według RFC4291.
Przykład: 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}
Spacje i user macros są dozwolone w tym polu.
Makra hosta: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} są dozwolone w tym polu.

Jeśli pole HTTP proxy pozostanie puste, innym sposobem użycia proxy HTTP jest ustawienie zmiennych środowiskowych związanych z proxy.

Dla HTTP - ustaw zmienną środowiskową http_proxy dla użytkownika serwera Zabbix. Na przykład:
http_proxy=http://proxy_ip:proxy_port.

Dla HTTPS - ustaw zmienną środowiskową HTTPS_PROXY. Na przykład:
HTTPS_PROXY=http://proxy_ip:proxy_port. Więcej szczegółów jest dostępnych po uruchomieniu polecenia powłoki: # man curl.

[1] Zabbix obsługuje wyłącznie pliki certyfikatów i kluczy prywatnych w formacie PEM. Jeśli dane certyfikatu i klucza prywatnego są zapisane w pliku w formacie PKCS #12 (zwykle z rozszerzeniem *.p12 lub *.pfx), możesz wygenerować z niego plik PEM za pomocą następujących poleceń:

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

Przykłady

Przykład 1

Wysyłaj proste żądania GET, aby pobierać dane z usług takich jak Elasticsearch:

  • Utwórz pozycja GET z adresem URL: localhost:9200/?pretty
  • Zwróć uwagę na odpowiedź:
    {
      "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"
    }
  • Teraz wyodrębnij numer wersji za pomocą kroku wstępnego przetwarzania JSONPath: $.version.number
Przykład 2

Wysyłaj proste żądania POST, aby pobierać dane z usług takich jak Elasticsearch:

  • Utwórz pozycję POST z adresem URL: http://localhost:9200/str/values/_search?scroll=10s
  • Skonfiguruj następującą treść POST, aby uzyskać obciążenie procesora (średnia 1-minutowa na rdzeń)
    {
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "itemid": 28275
                    }
                }],
                "filter": [{
                    "range": {
                        "clock": {
                            "gt": 1517565836,
                            "lte": 1517566137
                        }
                    }
                }]
            }
        }
    }
  • Otrzymano:
    {
        "_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
                }
            }]
        }
    }
  • Teraz użyj kroku preprocessing JSONPath, aby uzyskać wartość pozycji: $.hits.hits[0]._source.value
Przykład 3

Sprawdzanie, czy API Zabbix działa, przy użyciu apiinfo.version.

  • Konfiguracja pozycji:

Zwróć uwagę na użycie metody POST z danymi JSON, ustawienie nagłówków żądania oraz żądanie zwrócenia tylko nagłówków:

  • Wstępne przetwarzanie wartości pozycji za pomocą wyrażenia regularnego w celu uzyskania kodu HTTP:

  • Sprawdzanie wyniku w Najnowszych danych:

Przykład 4

Pobieranie informacji o pogodzie przez połączenie z publiczną usługą Openweathermap.

  • Skonfiguruj master item do zbiorczego pobierania danych w pojedynczym JSON:

Zwróć uwagę na użycie makr w polach zapytania. Informacje o tym, jak je wypełnić, znajdziesz w API Openweathermap.

Przykładowy JSON zwrócony w odpowiedzi przez HTTP agent:

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

Następnym zadaniem jest skonfigurowanie pozycji zależnych, które wyodrębniają dane z JSON.

  • Skonfiguruj przykładową pozycję zależną dla wilgotności:

Pozostałe metryki pogodowe, takie jak „Temperature”, dodaje się w ten sam sposób.

  • Przykładowe przetwarzanie wstępne wartości pozycji zależnej z użyciem JSONPath:

  • Sprawdź wynik danych pogodowych w Latest data:

Przykład 5

Łączenie ze stroną statusu Nginx i zbiorcze pobieranie jego metryk.

Przykładowe dane wyjściowe statusu stub Nginx:

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

Następnym zadaniem jest skonfigurowanie pozycji zależnych, które wyodrębniają dane.

  • Skonfiguruj przykładową pozycję zależną dla liczby żądań na sekundę:

  • Przykładowe wstępne przetwarzanie wartości pozycji zależnej za pomocą wyrażenia regularnego server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

  • Sprawdź pełny wynik z modułu stub w Najnowsze dane: