Agent HTTP
Przegląd
Ten typ pozycji umożliwia pobieranie danych przy użyciu protokołu HTTP/HTTPS.
Możliwe jest również przyjmowanie danych 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. 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 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ść asynchronicznych kontroli 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 sekcji Zbieranie danych > Hosty.
- Kliknij Pozycje w wierszu hosta.
- Kliknij Utwórz pozycję.
- Wprowadź parametry pozycji w formularzu.

Wszystkie wymagane pola wejściowe są oznaczone czerwoną gwiazdką.
Pola wymagające określonych informacji dla pozycji HTTP:
| Parametr | Opis |
|---|---|
| Typ | Wybierz tutaj HTTP agent. |
| Klucz | Wprowadź unikatowy klucz pozycji. |
| URL | URL, z którym należy się połączyć w celu pobrania danych. Na przykład: https://www.example.com http://www.example.com/download Nazwy domen mogą być określane za pomocą znaków Unicode. Podczas wykonywania sprawdzenia HTTP są one automatycznie konwertowane do ASCII w formacie punycode. Przycisk Analizuj umożliwia oddzielenie opcjonalnych pól zapytania (takich jak ?name=Admin&password=mypassword) od URL, przenosząc atrybuty i wartości do pola Pola zapytania w celu automatycznego kodowania URL. Ograniczenie 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_URL. |
| Pola zapytania | Zmienne dla URL (zobacz powyżej). Określane jako pary atrybutów i wartości. Wartości są automatycznie kodowane w URL. Wartości z makr są rozwijane, a następnie automatycznie kodowane w 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_URL. |
| Typ żądania | Wybierz typ metody żądania: GET, POST, PUT lub HEAD |
| Typ treści żądania | Wybierz typ treści żądania: Dane surowe - niestandardowa treść żądania HTTP; makra są podstawiane, ale kodowanie nie jest wykonywane Dane JSON - treść żądania HTTP w formacie JSON. Makra mogą być używane jako ciągi znaków, liczby, wartości true i false; makra używane jako ciągi znaków muszą być ujęte w podwójny cudzysłów. Wartości z makr są rozwijane, a następnie automatycznie zabezpieczane. Jeśli w nagłówkach nie określono „Content-Type”, domyślnie zostanie użyte „Content-Type: application/json” Dane XML - 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 zabezpieczane 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” |
| Treść żądania | 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 wykrywania niskopoziomowego. |
| Nagłówki | Niestandardowe nagłówki HTTP, które zostaną wysłane podczas wykonywania żądania. Określane jako pary atrybutów i wartości. 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_HTTPHEADER. |
| Wymagane kody stanu | Lista oczekiwanych kodów stanu HTTP. Jeśli Zabbix otrzyma kod, którego nie ma na liście, pozycja stanie się nieobsługiwana. Jeśli lista jest pusta, sprawdzanie nie jest wykonywane. Na przykład: 200,201,210-299 Obsługiwane makra na liście: makra użytkownika, makra wykrywania niskopoziomowego. Używa opcji cURL CURLINFO_RESPONSE_CODE. |
| Podążaj za przekierowaniami | Zaznacz pole wyboru, aby podążać za przekierowaniami HTTP. Ustawia opcję cURL CURLOPT_FOLLOWLOCATION. |
| Tryb pobierania | Wybierz część odpowiedzi, która ma zostać pobrana: Treść - tylko treść Nagłówki - tylko nagłówki Treść i nagłówki - treść i nagłówki |
| Konwertuj do JSON | Nagłówki są zapisywane jako pary atrybutów i wartości pod kluczem „header”, jeśli Tryb pobierania nie jest ustawiony na Treść. Jeśli zostanie napotkany „Content-Type: application/json”, treść jest zapisywana jako obiekt; w przeciwnym razie jest przechowywana jako ciąg znaków, na przykład: ![]() |
| Proxy HTTP | Możesz określić proxy HTTP do użycia, korzystając z formatu [protocol://][username[:password]@]proxy.example.com[:port].Opcjonalny prefiks protocol:// może służyć 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 protokół nie zostanie określony, proxy będzie traktowane jako proxy HTTP. Jeśli określisz nieprawidłowy protokół, połączenie nie powiedzie się, a pozycja stanie się nieobsługiwana.Domyślnie używany jest port 1080. Jeśli proxy zostanie określone, zastąpi powiązane ze sobą zmienne środowiskowe, takie jak http_proxy, HTTPS_PROXY. Jeśli nie zostanie określone, nie zastąpi zmiennych środowiskowych związanych z proxy. Wprowadzona wartość jest przekazywana „w niezmienionej postaci”; nie jest wykonywane sprawdzanie 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_PROXY. |
| Uwierzytelnianie HTTP | Wybierz opcję uwierzytelniania: Brak - uwierzytelnianie nie jest używane; 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. |
| Nazwa użytkownika | Wprowadź nazwę użytkownika (do 255 znaków). To pole jest dostępne, jeśli Uwierzytelnianie HTTP jest ustawione na Basic, NTLM, Kerberos lub Digest. Obsługiwane są makra użytkownika i makra wykrywania niskopoziomowego. |
| Hasło | Wprowadź hasło użytkownika (do 255 znaków). To pole jest dostępne, jeśli Uwierzytelnianie HTTP jest ustawione na Basic, NTLM, Kerberos lub Digest. Obsługiwane są makra użytkownika i makra wykrywania niskopoziomowego. |
| Weryfikuj element SSL | Zaznacz pole wyboru, aby zweryfikować certyfikat SSL serwera WWW. Certyfikat serwera jest weryfikowany względem certyfikatów zaufanych urzędów certyfikacji (CA) z systemowej lokalizacji CA. Lokalizację plików CA można zastąpić za pomocą parametru konfiguracji serwera Zabbix lub proxy SSLCALocation. Ustawia opcję cURL CURLOPT_SSL_VERIFYPEER. |
| Weryfikuj host SSL | Zaznacz pole wyboru, aby zweryfikować, czy pole Common Name lub Subject Alternate Name certyfikatu serwera WWW jest zgodne. Ustawia opcję cURL CURLOPT_SSL_VERIFYHOST. |
| Plik certyfikatu SSL | 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, określ hasło w polu hasła klucza SSL. Katalog zawierający ten plik jest określany przez parametr konfiguracji serwera Zabbix 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_SSLCERT. |
| Plik klucza SSL | 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 serwera Zabbix 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 wykrywania niskopoziomowego.Ustawia opcję cURL CURLOPT_SSLKEY. |
| Hasło klucza SSL | Hasło pliku prywatnego klucza SSL. Obsługiwane makra: makra użytkownika, makra wykrywania niskopoziomowego. Ustawia opcję cURL CURLOPT_KEYPASSWD. |
| Limit czasu | Zabbix nie poświęci więcej czasu na przetwarzanie URL niż ustawiona wartość (1-600 sekund). W rzeczywistości ten parametr określa maksymalny czas nawiązania połączenia z URL oraz maksymalny czas wykonania żądania HTTP. Dlatego Zabbix nie poświęci na jedno sprawdzenie więcej niż 2 x Limit czasu sekund. Ustawia opcję cURL CURLOPT_TIMEOUT.Więcej informacji o parametrze Limit czasu można znaleźć w sekcji ogólne atrybuty pozycji. |
| Włącz przechwytywanie | Po zaznaczeniu tego pola wyboru pozycja będzie również działać jako pozycja trappera i będzie akceptować dane wysyłane do serwera Zabbix lub proxy za pomocą narzędzia Zabbix sender lub protokołu Zabbix sender, a także dane wysyłane do serwera Zabbix za pomocą metody API history.push. Więcej informacji o wysyłaniu danych można znaleźć tutaj: Pozycje trappera. |
| Dozwolone hosty | Widoczne tylko wtedy, gdy zaznaczono pole wyboru Włącz przechwytywanie. Lista rozdzielanych przecinkami adresów IP (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 wprowadzić adresy bezpośrednio w polu lub 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 wymienionych tutaj hostów.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 zezwoli na dowolny adres IPv4 lub IPv6.0.0.0.0/0 może służyć do zezwolenia na dowolny adres IPv4.Należy pamiętać, że „adresy IPv6 zgodne z IPv4” (prefiks 0000::/96) 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. W tym polu dozwolone są makra hosta: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}. |
Jeśli pole Proxy HTTP pozostanie puste, innym sposobem użycia proxy HTTP jest ustawienie zmiennych środowiskowych związanych z proxy.
W przypadku HTTP ustaw zmienną środowiskową http_proxy dla użytkownika serwera Zabbix.
Na przykład:
http_proxy=http://proxy_ip:proxy_port.
W przypadku HTTPS ustaw zmienną środowiskową HTTPS_PROXY.
Na przykład:
HTTPS_PROXY=http://proxy_ip:proxy_port.
Więcej informacji 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 dane certyfikatu i klucza prywatnego znajdują się 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 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 ze stroną stanu NGINX i pobieranie jego metryk zbiorczo.
- Skonfiguruj NGINX zgodnie z oficjalnym przewodnikiem.
- Skonfiguruj nadrzędną pozycję do zbierania danych zbiorczych:

Przykładowe dane wyjściowe NGINX stub status:
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ź kompletny wynik z modułu stub w sekcji Najnowsze dane:

