9 HTTP agent
Przegląd
Ten typ pozycji umożliwia odpytywanie danych przy użyciu protokołu HTTP/HTTPS.
Możliwe jest również trapowanie za pomocą narzędzia Zabbix sender lub protokołu Zabbix sender (do wysyłania danych do serwera Zabbix lub proxy), albo przy użyciu metody API history.push (do wysyłania danych do serwera Zabbix).
Kontrole pozycji HTTP są wykonywane przez serwer Zabbix. Jeśli jednak 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 opcjonalnie będzie podążać za przekierowaniami (zobacz opcję Follow redirects poniżej).
Maksymalna liczba przekierowań jest na stałe ustawiona na 10 (z użyciem opcji cURL CURLOPT_MAXREDIRS).
Serwer/proxy Zabbix musi być początkowo skonfigurowany z obsługą cURL (libcurl).
Kontrole HTTP są wykonywane asynchronicznie - nie jest wymagane otrzymanie 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 parametr MaxConcurrentChecksPerPoller).
Liczba asynchronicznych pollerów HTTP agent jest określana przez parametr StartHTTPAgentPollers.
Funkcja trwałych połączeń cURL została dodana do kontroli HTTP agent od Zabbix 7.0.
Konfiguracja
Aby skonfigurować pozycję HTTP:
- Przejdź do Data collection > Hosts.
- 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 należy się połączyć i z którego należy pobrać dane. Na przykład: https://www.example.com http://www.example.com/download Nazwy domen mogą być podane w znakach Unicode. Podczas wykonywania sprawdzenia HTTP są one automatycznie konwertowane do formatu punycode na ASCII. Przycisk Parse można użyć 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. Ograniczone do 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 opcję cURL CURLOPT_URL. |
| Query fields | Zmienne dla adresu URL (patrz wyżej). Określane jako pary atrybut i wartość. Wartości są automatycznie kodowane URL. Wartości z makr są najpierw 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 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ą najpierw rozwijane, a następnie automatycznie escape'owane. Jeśli w nagłówkach nie zostanie określone "Content-Type", domyślnie będzie ustawione "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ą najpierw rozwijane, a następnie automatycznie escape'owane w węźle tekstowym i atrybucie. Jeśli w nagłówkach nie zostanie określone "Content-Type", domyślnie będzie ustawione "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 i 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 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, sprawdzanie nie jest wykonywane. Na przykład: 200,201,210-299 Obsługiwane makra na liście: makra użytkownika, makra niskopoziomowego wykrywania. Używa opcji cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Zaznacz pole wyboru, aby podążać za przekierowaniami HTTP. Ustawia 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 i wartość pod kluczem "header", jeśli Retrieve mode nie jest ustawiony na Body. Jeśli zostanie wykryte 'Content-Type: application/json', treść jest zapisywana jako obiekt, w przeciwnym razie jest przechowywana jako string, na przykład: ![]() |
| HTTP proxy | Możesz określić HTTP proxy do użycia, stosując format [protocol://][username[:password]@]proxy.example.com[:port].Opcjonalny prefiks protocol:// może być użyty do określenia alternatywnych protokołów proxy (np. https, socks4, socks5; zobacz dokumentację; obsługa prefiksu protokołu została dodana w cURL 7.21.7). Jeśli nie zostanie określony protokół, proxy będzie traktowany jako HTTP proxy. Jeśli podasz niewłaściwy protokół, połączenie nie powiedzie się, a pozycja stanie się nieobsługiwana.Domyślnie używany będzie port 1080. Jeśli zostanie określony, proxy nadpisze zmienne środowiskowe związane z proxy, takie jak http_proxy, HTTPS_PROXY. Jeśli nie zostanie określony, proxy nie nadpisze zmiennych środowiskowych związanych z proxy. Wprowadzona wartość jest przekazywana "as is", bez sprawdzania poprawności.Uwaga tylko proste uwierzytelnianie jest obsługiwane z HTTP proxy. 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 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: Konfigurowanie Kerberos z Zabbix); Digest - używane jest uwierzytelnianie Digest. Ustawia 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 zweryfikować certyfikat SSL serwera WWW. Certyfikat serwera zostanie automatycznie pobrany z systemowej lokalizacji urzędu certyfikacji (CA). Możesz zastąpić lokalizację plików CA, używając parametru konfiguracji Zabbix serwer lub proxy SSLCALocation. Ustawia opcję cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Zaznacz pole wyboru, aby zweryfikować zgodność pola Common Name lub pola Subject Alternate Name certyfikatu serwera WWW. Ustawia 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 konfiguracji Zabbix serwer lub proxy 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 opcję cURL CURLOPT_SSLCERT. |
| SSL key file | Nazwa pliku prywatnego klucza SSL używanego do uwierzytelniania klienta. Plik klucza prywatnego musi być w formacie PEM1. Katalog zawierający ten plik jest określany przez parametr konfiguracji Zabbix serwer lub proxy 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 opcję cURL CURLOPT_SSLKEY. |
| SSL key password | Hasło prywatnego klucza SSL. Obsługiwane makra: makra użytkownika, makra niskopoziomowego wykrywania. Ustawia opcję cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix nie poświęci na przetwarzanie adresu URL więcej niż ustawiony czas (1-600 sekund). W praktyce ten parametr określa maksymalny czas na nawiązanie połączenia z adresem URL oraz maksymalny czas wykonania żądania HTTP. W związku z tym Zabbix nie poświęci na jedno sprawdzenie więcej niż 2 x Timeout sekund. Ustawia opcję cURL CURLOPT_TIMEOUT.Więcej informacji o parametrze Timeout można znaleźć w sekcji ogólne atrybuty pozycji. |
| Enable trapping | Po zaznaczeniu tego pola pozycja będzie również działać jako pozycja trapper i będzie akceptować dane wysyłane do Zabbix serwer lub proxy za pomocą narzędzia Zabbix sender lub protokołu Zabbix sender protocol, albo będzie akceptować dane wysyłane do Zabbix serwer za pomocą metody API history.push. Więcej informacji o wysyłaniu danych można znaleźć w sekcji: Pozycje trapper. |
| Allowed hosts | Widoczne tylko wtedy, gdy zaznaczone jest pole wyboru Enable trapping. Lista adresów IP oddzielonych przecinkami (opcjonalnie w notacji CIDR) lub nazw DNS. Wartością domyślną jest makro użytkownika {$TRAPPER.ALLOWED_HOSTS}. Domyślnie {$TRAPPER.ALLOWED_HOSTS} ma wartość 127.0.0.1,::1. Możesz wpisać adresy bezpośrednio w polu albo zmienić wartość makra. Jeśli pole pozostanie puste, połączenia przychodzące będą odrzucane ze wszystkich hostów. Jeśli zostanie określone, połączenia przychodzące będą akceptowane tylko z hostów wymienionych tutaj.Jeśli obsługa IPv6 jest włączona, 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 być użyte, aby zezwolić na dowolny adres IPv4.Zwróć uwagę, że "IPv4-compatible IPv6 addresses" ( 0000::/96 prefix) są obsługiwane, ale uznane za przestarzałe przez 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}W tym polu dozwolone są spacje i makra użytkownika. 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 HTTP proxy jest ustawienie zmiennych środowiskowych związanych z proxy.
Dla HTTP - ustaw zmienną środowiskową http_proxy dla użytkownika Zabbix serwer.
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 można uzyskać, uruchamiając polecenie powłoki: # man curl.
[1] Zabbix obsługuje wyłącznie pliki certyfikatów i kluczy prywatnych w formacie PEM.
Jeśli masz dane certyfikatu i klucza prywatnego w pliku w formacie PKCS #12 (zwykle z rozszerzeniem *.p12 lub *.pfx), możesz wygenerować z niego plik PEM, używając 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 pozycję 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, używając kroku przetwarzania JSONPath:
$.version.number
Przykład 2
Wyślij proste żądania POST, aby pobrać 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ące ciało POST, aby uzyskać obciążenie procesora (średnia z 1 minuty 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 przetwarzania JSONPath, aby pobrać wartość pozycji:
$.hits.hits[0]._source.value
Przykład 3
Sprawdzanie, czy Zabbix API działa, z użyciem 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 Latest data:

Przykład 4
Pobieranie informacji o pogodzie przez połączenie z publiczną usługą Openweathermap.
- Skonfiguruj pozycję nadrzędną do zbiorczego pobierania danych w jednym JSON:

Zwróć uwagę na użycie makr w polach zapytania. Informacje o tym, jak je wypełnić, znajdziesz w Openweathermap API.
Przykładowy JSON zwracany 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 „Temperatura”, 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 się ze stroną statusu Nginx i zbieranie jego metryk zbiorczo.
- Skonfiguruj Nginx zgodnie z oficjalnym przewodnikiem.
- Skonfiguruj pozycję nadrzędną do zbiorczego zbierania danych:

Przykładowy wynik stub status 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 przetwarzanie wstępne wartości pozycji zależnej z użyciem wyrażenia regularnego
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Sprawdź pełny wynik z modułu stub w Latest data:

