Integracje Zabbiksa - webhooki i Grafana

Czwarta część serii o Zabbiksie (wcześniej: wprowadzenie, własne szablony, web monitoring). W pierwszym wpisie podpięliśmy powiadomienia pod e-mail. Działa, ale ma wady: mail można przeoczyć w zalewie innych wiadomości, nie ma wątków ani szybkiej reakcji “widziałem, zajmuję się”. Dziś podepniemy Zabbiksa pod webhook — a przy okazji pokażę, jak wpuścić jego dane do Grafany.

Webhook jako media type

Zabbix od kilku lat ma wbudowany typ medium Webhook — zamiast wysyłać maila, wykonuje skrypt JavaScript (uruchamiany po stronie serwera Zabbiksa), który sam decyduje, jak sformatować i gdzie wysłać powiadomienie. Zaletą jest to, że dla popularnych usług nie musisz pisać tego skryptu sam — Zabbix ma wbudowaną galerię gotowych integracji.

Alerts → Media types — na liście, oprócz Email, znajdziesz gotowe wpisy dla m.in. Telegrama, Slacka i Discorda. Wystarczy jeden włączyć i uzupełnić parametry, zamiast pisać integrację od zera.

Przykład: Telegram

  1. Załóż bota przez @BotFather na Telegramie — komenda /newbot, ustaw nazwę, na końcu dostaniesz token w formacie 123456789:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
  2. Napisz do swojego nowego bota cokolwiek (Telegram wymaga, żeby to użytkownik pierwszy zainicjował rozmowę), a potem odpytaj:
    https://api.telegram.org/bot<TOKEN>/getUpdates
    
    W odpowiedzi znajdziesz chat.id — to Twój prywatny identyfikator czatu.
  3. W Zabbiksie: Alerts → Media types → Telegram, wklej token bota w parametrze Bot token, zapisz.
  4. Users, wybierz swojego użytkownika, zakładka Media → Add, typ Telegram, w polu “Send to” wklej chat.id z kroku 2.

Action wykorzystujący webhook

Podobnie jak przy e-mailu w pierwszym wpisie serii: Alerts → Actions → Trigger actions → Create action, warunek np. Severity >= Warning, operacja Send message to User <Twój user> using media Telegram. Od teraz powiadomienia o problemach lądują na Telegramie, praktycznie bez opóźnienia.

ℹ️
To samo dotyczy Discorda i Slacka — różni się tylko to, co wpisujesz w parametry media type (zwykle URL webhooka wygenerowany po stronie Discorda/Slacka, a nie token bota).

Zabbix jako źródło danych w Grafanie

Powiadomienia to jedno, ale czasem chcesz po prostu ładnie zwizualizować dane, które Zabbix już zbiera — zamiast budować od zera dashboardy w samym Zabbiksie. Grafana ma w swoim katalogu wtyczek gotowy Zabbix data source, który odpytuje Zabbix API i pozwala budować panele na bazie zebranych metryk i zdarzeń.

Zanim podepniesz Grafanę:

  1. W Zabbiksie stwórz osobnego użytkownika przeznaczonego wyłącznie do odczytu (rola z uprawnieniami “Read only” do interesujących Cię grup hostów) — nie warto podpinać pod to konta administracyjnego.
  2. W Grafanie: Connections → Add new connection, znajdź w katalogu wtyczkę Zabbiksa, zainstaluj i skonfiguruj adres API Zabbiksa (zwykle https://twoj-zabbix/api_jsonrpc.php) razem z danymi logowania użytkownika z punktu 1.
  3. Po zapisaniu źródła danych możesz budować panele odpytujące konkretne itemy albo zdarzenia (problemy) z Zabbiksa — dokładnie te same dane, które widzisz w Monitoring → Latest data, tylko w dashboardzie, który zestawisz obok innych źródeł danych.

Podsumowanie

Zabbix sam w sobie potrafi ładnie powiadamiać i wizualizować, ale jego siła w większej infrastrukturze to właśnie łatwość integracji — powiadomienia tam, gdzie faktycznie je zauważysz, i dane tam, gdzie już masz inne dashboardy. W ostatniej części serii wracamy do samego Zabbiksa — do automatycznego wykrywania hostów w sieci, żeby nie trzeba było dodawać ich ręcznie, jednego po drugim.

Comments powered by Talkyard.