Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book

Ładne wykresy w Zabbiksie – wykorzystajmy Grafanę

09 sierpnia 2017, 18:15 | Aktualności, Teksty | komentarzy 15

Czy kiedykolwiek zdarzyła Ci się sytuacja, że wykresy w Zabbixie były niewystarczające? Szef przychodzi do Ciebie i prosi o wykresy obciążenia serwera, tylko “muszą być ładne, ponieważ przedstawia to w zarządzie firmy”? A może masz kilka serwerów Zabbix w firmie i szukasz rozwiązania scentralizowanego przedstawiania danych? Albo po wymianie telewizora wyświetlającego aktualne problemy z serwera Zabbix musisz na nowo ustawiać stronę, ponieważ rozdzielczość się zmieniła?

Jeżeli chociaż na jedno z powyższych pytań odpowiedziałeś twierdząco, ten artykuł jest dla Ciebie.

Grafana + Zabbix

Grafana to rozwiązanie “open source” do analizowania i wizualizacji danych. Dzięki licznej bazie źródeł, z których Grafana może pobierać dane (np. Influxdb, Elasticsearch, AWS Cloudwatch czy opisywany w tym artykule Zabbix) może służyć jako scentralizowane narzędzie do przedstawiania różnych metryk. O samym projekcie można przeczytać na stronie twórców.

W artykule przedstawiono podstawową instalację Grafany, połączenie jej z istniejącą już instancją serwera Zabbix za pomocą API, oraz kilka przykładów dodawania paneli do dashboardu.

Środowisko + przygotowania

Na potrzeby artykułu zbudowano środowisko testowe jak na Rysunku nr 1.

Rysunek 1. Środowisko testowe wraz z oznaczoną komunikacją.

Na tę chwilę założono, że posiadamy już serwer Zabbix w wersji 3.2.7 (najnowsza w chwili pisania artykułu), jednak Grafana zadziała również z wersją 3.0.X oraz 2.4.X.

Na początku musimy zapewnić komunikację z serwera “Grafana-test” po porcie 80 (HTTP) lub 443 (HTTPS) do serwera “Zabbix-test”. Jeżeli wymagana będzie modyfikacja polityki zapory ogniowej, wystarczą reguły iptables z Listingu nr 1:

#HTTP
-A INPUT -m state --state NEW -p tcp -s 10.2.20.210 --dport 80 -j ACCEPT
#HTTPS
-A INPUT -m state --state NEW -p tcp -s 10.2.20.210 --dport 443 -j ACCEPT

Następnie powinniśmy dodać użytkownika, na który Grafana będzie łączyć się do API. By zrobić to w miarę bezpieczny sposób (na wypadek wycieku danych do logowania) należy zalogować się do GUI (w tym przypadku będzie to http://10.2.20.200/zabbix) i wejść w zakładkę “Administration” – “User Groups” i kliknąć w górnym prawym rogu “Create user group”:

Rysunek 2. Dodawanie nowej grupy użytkowników.

Nazywamy naszą nową grupę (np. “API”) i wyłączamy jej możliwość logowania do GUI (“Frontend Access” ustawiamy na “Disabled”):

Rysunek 3. Ustawienie braku możliwości logowania się do GUI.

Następnie wchodzimy w zakładkę “Permissions” i dodajemy uprawnienia odczytu dla wszystkich maszyn – najłatwiej jest kliknąć w przycisk “Select”, wybrać wszystkie grupy hostów w nowo otwartym oknie, następnie wybrać opcję “Read” i kliknąć “Add”:

Rysunek 4. Dodawanie uprawnień RO dla wszystkich hostów.

Jeżeli w polu “Permissions” widzimy uprawnienia RO dla wszystkich grup, możemy dodać nową grupę naciskając niebieski przycisk “Add”:

Rysunek 5. Dodawanie grupy użytkowników.

Jeżeli mamy już grupę z odpowiednimi uprawnieniami, należy teraz stworzyć użytkownika dla Grafany. W tym celu musimy wejść w zakładkę “Administration” – “Users”, a potem kliknąć w przycisk “Create User”:

Rysunek 6. Dodawanie nowego użytkownika.

Tworzymy użytkownika “grafana”, dodajemy go do stworzonej wcześniej grupy “API”, nadajemy hasło oraz upewniamy się, że w zakładce “Permission” jest ustawiony typ “zabbix user” (nie potrzebuje on większych uprawnień). Jeżeli wszystko jest ustawione poprawnie, klikamy przycisk “Add”:

Rysunek 7. Dodawanie użytkownika grafana.

Powyższe kroki są bardzo ważne, ponieważ brak uprawnień odczytu dla jakiegoś hosta prowadzi do braku możliwości odczytania jego informacji przez Grafane. Gdy jednak posiadamy już użytkownika z odpowiednimi uprawnieniami, możemy przejść do instalacji Grafany.

Instalacja Grafany

Logujemy się do naszego serwera (w tym przypadku jest to “Grafana-test”) i instalujemy dodatkowe pakiety wymagane do poprawnego działania Grafany:

sudo apt-get install -y adduser libfontconfig

Sama instalacja Grafany jest dość prosta i można podejść do tego na kilka sposobów. Możemy dodać repozytorium Grafany ręcznie (wszelki opis można znaleźć tutaj) i zainstalować prostą komendą sudo apt-get install grafana. Jeżeli wystąpią problemy z zainstalowaniem repozytorium, można również je dodać  za pomocą skryptu, który automatycznie wykryje system operacyjny i doda odpowiednie wpisy w plikach repozytorium . Bazując na doświadczeniu jednak zalecamy wybranie najbezpieczniejszej opcji, którą jest ściągnięcie pliku *.deb i ręczne zainstalowanie za pomocą komendy dpkg. W chwili pisania artykułu najnowsza wersja to 4.4.2; by sprawdzić aktualną wersję grafany wystarczy wejść na oficjalną stronę:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.4.2_amd64.deb
sudo dpkg -i grafana_4.4.2_amd64.deb

Teraz wystarczy tylko zatroszczyć się o automatyczne uruchamianie Grafany podczas ładowania systemu oraz ją uruchomić. Należy tutaj pamiętać, że instalujemy Grafanę na Ubuntu 16.10, gdzie domyślnym managerem do obsługi usług jest systemd:

sudo systemctl enable grafana-server
sudo systemctl start grafana-server

Jeżeli wszystko przebiegło pomyślnie to możemy wejść przez przeglądarkę na adres serwera Grafany na porcie 3000 (w tym artykule jest to: http://10.2.20.210:3000). Naszym oczom powinna ukazać się strona jak na Rysunku nr 8:

Rysunek 8. Panel logowania.

Teraz wystarczy wpisać domyślne dane do logowania (admin/admin), by potwierdzić poprawność naszej instalacji:

Rysunek 9. Pierwsze logowanie do Grafany.

W tym miejscu autor mocno zachęca do podstawowych zadań administracyjnych, takich jak zmiana hasła administratora, dodanie nowych użytkowników itp. by przyzwyczaić się do całego panelu Grafany. Natomiast w artykule skupimy się już nad najważniejszym – podpięciem pod Zabbixa.

Instalacja i konfiguracja pluginu do Zabbixa

Sama instalacja pluginu, który pobiera dane z serwera Zabbix, jest również bardzo prosta i składa się z użycia narzędzia grafana-cli oraz restartu usługi Grafany:

grafana-cli plugins install alexanderzobnin-Zabbix-app
sudo systemctl restart grafana-server

Gdy wszystko się powiedzie, musimy z poziomu przeglądarki kliknąć na symbol Grafany (lewy górny róg) i wybrać “Plugins”:

Rysunek 10. Wybór pluginów w Grafanie.

Gdy wybierzemy zakładkę “Apps” powinniśmy ujrzeć plugin odpowiedzialny za połączenie z serwerem Zabbix:

Rysunek 11. Lista aplikacji wraz z pluginem do Zabbixa.

Gdy klikniemy w aplikację “Zabbix”, należy ją aktywować w GUI:

Rysunek 12. Aktywacja pluginu Zabbix.

Plugin został już przez nas aktywowany, więc teraz musimy skonfigurować Grafanę, by łączyła się do naszego serwera Zabbix. W tym celu wybieramy z menu “Data sources”, a następnie “Add data source”:

Rysunek 13. Dodanie nowego źródła danych.

Jest to chyba najtrudniejszy fragment w tym poradniku. Konfiguracja wygląda następująco:

  • Name – nazwa naszego połączenia,
  • Type – musimy wybrać z listy “Zabbix” (pojawi się dopiero po aktywacji pluginu Zabbixa!); dopiero po wybraniu tego typu pojawią się następne pola,
  • URL – cały URL do zabbixowego API; wystarczy do URL, którym łączymy się do Zabbixa, dodać “api_jsonrpc.php”,
  • Access – jeżeli wybierzemy “proxy”, to Grafana będzie wysyłać zapytania do API; kiedy natomiast wybierzemy “direct” to MY będziemy wysyłać zapytania do serwera (a dokładnie nasza przeglądarka),
  • HTTP Auth – możemy wybrać, czy Grafana ma się logować za pomocą “Basic auth” (charakterystyczne okienko z prośbą o login i hasło w przeglądarce), jak i również czy ma używać połączenia szyfrowanego (HTTPS),
  • Username i password – podajemy dane do logowania do serwera Zabbix (te same, co ustawiliśmy w sekcji “Środowisko + przygotowania”),
  • Trends – określa czy chcemy użyć tabeli trendów podczas wyświetlania danych; zaraz za tym ustawiamy wartości, kiedy mamy używać trendów zamiast historii (domyślnie dla danych zebranych powyżej 7 dni lub gdy wyświetlany zakres wynosi więcej niż 4 dni),
  • Cache TTL – definiuje co jaki czas Grafana ma odświeżać informacje o metrykach (np. Grupy hostów, aplikacje itp.),
  • Direct DB connection – jeżeli wcześniej ustawiliśmy połączenie bezpośrednio do bazy danych Zabbixa (tak, Grafana również to potrafi), to możemy tutaj wybrać źródło danych dla łatwiejszej konfiguracji pobierania danych,
  • Alerting – Grafana ma funkcję alarmowania, gdy np. dana wartość przekroczy odpowiedni poziom (zupełnie jak Zabbix!); tutaj można włączyć integrację alarmów Grafany z alarmami Zabbixa.

W naszym przypadku konfiguracja połączenia do serwera Zabbix wygląda następująco:

Rysunek 14. Konfiguracja połączenia z Zabbixem.

Jeżeli wszystkie dane są poprawne, to przy kliknięciu przycisku “Save & Test” powinniśmy zobaczyć napis “Success” oraz wersję API naszego serwera Zabbix:

Rysunek 15. Sukces połączenia z serwerem Zabbix.

Gdy wszystko zakończyło się sukcesem, możemy kliknąć w symbol Grafany, następnie wybrać “Zabbix” – “Zabbix server dashboard” (dashboard ten instaluje się wraz z pluginem), by zobaczyć, czy Grafana odczytuje wartości z serwera Zabbix:

Rysunek 16. Pierwszy działający dashboard.

Uwaga! Jeżeli jakaś wartość dla Grafany nie jest dostępna (wielki napis N/A zamiast liczby), jednak Zabbix zbiera wartość poprawnie, to w zdecydowanej większości przypadków wybrano za mały przedział czasowy w Grafanie (prawy górny róg). Na przykład kiedy pobieramy informacje o itemie odświeżanym co godzinę, a w Grafanie wybierzemy przedział “Last 5 minutes”, to Grafana może trafić na “dziurę”, ponieważ item mógł być sprawdzony 40 minut temu (a na pewno nie w ciągu ostatnich 5 minut). Wybranie przedziału czasowego większego lub równego czasowi odświeżania itemu powinno naprawić problem.

Dodanie pierwszego dashboardu

Instalacja Grafany nie jest trudna, jednak już stworzenie swojego dashboardu jest często barierą nie do przeskoczenia. Dlatego w tej części artykułu zbudujemy od podstaw swoją własną tablicę. Będzie on bardzo różnorodny, by pokazać możliwości Grafany oraz pracę z pluginem.

Na początku dodajemy nowy dashboard klikając w “Dashboard” – “New”:

Rysunek 17. Dodawanie nowego dashboardu.

Wprawny czytelnik zauważy opcję importu dashboardów – dość pokaźną listę można znaleźć na stronie community – wystarczy ściągnąć plik JSON i po wciśnięciu przycisku “import” wybrać plik lub wkleić jego zawartość. Warto jednak znać chociaż podstawy konfiguracji dashboardów, ponieważ często takie ściągnięte tablice nie działają bez poprawy parametrów.

Po dodaniu nowego dashboardu powinniśmy zobaczyć widok podobny jak na Rysunku nr 18:

Rysunek 18. Pusty dashboard.

Autor na początku zaleca jednak kliknięcie w kółko zębate (z prawej strony u góry) i wybranie opcji “Settings”. Możemy tutaj ustawić nazwę naszej tablicy, dodać tagi (dla łatwiejszego późniejszego wyszukiwania) itp.

Rysunek 19. Ustawienia dashboardu.

Uwaga! Obok koła zębatego znajduje się ikonka dyskietki służąca do zapisywania aktualnych zmian – czytelnik powinien wyrobić sobie nawyk częstego zapisywania zmian, ponieważ domyślnie żadne zmiany nie są zapamiętywane i zostaną utracone po odświeżeniu przeglądarki.

Czas ustawić pierwszy panel. Będzie on pokazywał ilość sprawdzeń oczekujących w kolejce Zabbixa. Z listy paneli wybieramy “Singlestat”. Po kliknięciu nasz dashboard będzie wyglądał podobnie jak na Rysunku nr 20:

Rysunek 20. Pierwszy panel.

Jest to domyślny panel, który pokazuje losowe wartości. My jednak chcemy pokazywać coś wartościowego, dlatego musimy kliknąć na tytuł panelu (w tym przypadku na napis “Panel Title”) i w otwartym menu kontekstowym wybrać “Edit”:

Rysunek 21. Menu kontekstowe panelu.

Na dole tablicy powinna pojawić się konfiguracja panelu. Na razie celowo pomijamy okienko metryk, tylko klikamy na “General”.

Możemy tutaj ustawić tytuł, opis oraz czy panel ma być przeźroczysty (opcja “Transparent”). Najważniejszą rzeczą jest jednak ilość kolumn (opcja “span”). Grafana dzieli cały ekran na 12 kolumn (ustawienie opcji “span” na 12 to inaczej zajęcie całego ekranu poziomo). Nie potrzebujemy aż tak szerokiego panelu, więc ustawiamy opcję “span” na 2. Inną ważną opcją jest wysokość panelu (opcja “Height”), którą podajemy w pikselach (px). Pozostawienie tej wartości pustej powoduje wartość domyślną (100px).

Rysunek 22. Sekcja general.

Przechodzimy do sekcji “Metrics”. Pierwsze co musimy zmienić to w polu “Panel Data Source” wybrać nasze ustawione wcześniej źródło danych. Dopiero teraz pokaże nam się odpowiednia sekcja zapytania. W tym miejscu mamy do wyboru 4 tryby zapytań (“Query mode”):

  • Metrics – najłatwiejszy do skonfigurowania; wystarczy podać grupę hostów, samego hosta, aplikację oraz item (Grafana w bardzo przyjemny sposób podpowiada co możemy wpisać); tylko dla wartości liczbowych,
  • Text – to samo co “Metrics”, jednak dla ciągów znaków (typ “character” lub “text” w Zabbixie),
  • ITservices – możemy pobrać informacje o SLA konfigurowane w Zabbixie (w zakładce “Configuration” – “IT services”),
  • itemID – zamiast szukać informacji po grupach i hostach, można podać po prostu listę itemID, które nas interesują).

Przykład dla ilości itemów oczekujących w kolejce Zabbixa wygląda następująco:

Rysunek 23. Metryka dla kolejki Zabbixa.

Reszta ustawień panelu jest czysto kosmetyczna, dlatego autor zachęca czytelnika do zabawy we własnym zakresie.

Możemy wyjść z ustawień panelu (klikając na krzyżyk po lewej stronie) i dodanie nowego panelu. W tym celu należy kliknąć na trzy kropeczki po prawej stronie, a następnie “Add panel”:

Rysunek 24. Ukryte menu do dodawania nowego panelu.

Teraz dodamy wykres który będzie wyświetlał LOAD(avg1) z grupy hostów “Linux Servers”. Dlatego tym razem wybieramy typ “Graph”. W tym momencie prawie na pewno połowę ekranu zajął panel odpowiedzialny za kolejkę, a połowę nowy wykres. Autor chciał pokazać specyfikę pracy z Grafaną – często robi coś automatycznie wbrew naszej woli. Wtedy trzeba znowu wejść w ustawienia panelu kolejki i ustawić jej szerokość (“span”) na wartość 2. Teraz należy wejść w ustawienia panelu nowego wykresu i oprócz nazwy ustawić jej szerokość 10 (razem z poprzednim panelem mamy całą szerokość ekranu – 12):

Rysunek 25. Ustawienie szerokości i nazwy dla wykresu.

Analogicznie do poprzedniego przykładu dodajemy metrykę, jednak w polu “Host” użyjemy wyrażenia regularnego. Każde wyrażenie regularne zawieramy w backslashach – “\”. W tym przypadku jest to każdy host w grupie “Linux servers” (w dużym uproszczeniu wyrażenie “.*” oznacza dowolną nazwę i długość).

Rysunek 26. Wyrażenie regularne w nazwie hosta.

Modyfikację wyglądu wykresu autor znowu pozostawia czytelnikowi.

Następny panel będzie wykresem słupkowym pokazującym obciążenie CPU na serwerze Zabbix podzielonym na user time, system time itd. Chcemy, by ten element zajmował całą szerokość ekranu i był pod spodem wcześniej utworzonych paneli. Dodajemy więc nowy wykres i jeżeli trzeba to poprawiamy rozmieszczenie paneli (dla ułatwienia warto wspomnieć, że metoda “drag&drop” działa w miarę dobrze). Tym razem wyrażenie regularne występuje w nazwie itemu – Grafana wybierze wszystkie, w których nazwa zawiera znaki “CPU”. Dodatkowo w polu “Max data points” ustawiamy wartość 100 – ten wybór zostanie wyjaśniony później. Metrykę dla takiego wykresu przedstawia Rysunek nr 27:

Rysunek 27. Wyrażenie regularne w nazwie itemu.

Teraz wchodzimy w zakładkę “Display” i odznaczamy opcję “Lines”, a następnie  zaznaczamy “Bars”. Dodatkowo zaznaczamy opcję “Stack” (inaczej nasze słupki będą nachodzić na siebie) oraz “Percent” (zużycie CPU wyraża się w procentach i nie może przekroczyć 100% – dzięki temu zabezpieczamy się przed przekroczeniem tej granicy spowodowanej odczytywaniem danych przez serwer Zabbix w różnych chwilach):

Rysunek 28. Przełączenie wykresu liniowego na słupkowy.

Wartość “Max data points” ustawiona wcześniej mówi nam o tym, że na wykresie na raz może być 100 słupków – gdy zostawimy wartość domyślną (auto) Grafana będzie wyświetlać tyle słupków, ile mamy wartości – przy większym przedziale czasowym staje się to nieczytelne.

Ostatnim panelem, który dodamy do naszej tablicy jest aktualna lista problemów (analogiczne do “Last 20 issues” z dashboardu Zabbixa). W tym celu przy wyborze nowego panelu wybieramy “Zabbix Triggers”. Konfiguracja tego panelu jest bardzo intuicyjna i prosta, dlatego zostanie pominięta. Warto jednak nadmienić, że możemy filtrować wyświetlane triggery po grupach, hostach lub też samej nazwie triggera. Oto przykład wyświetlania tylko informacji o SWAP:

Rysunek 29. Filtrowanie triggerów ze względu na nazwę.

Koniec! Cały dashboard powinien wyglądać mniej więcej jak ten poniżej:

Rysunek 30. Wynik końcowy.

Teraz wystarczy uruchomić tryb pełnoekranowy w przeglądarce, następnie wybrać klawisz “d” oraz “k” na klawiaturze, aby uruchomić tzw. “Kiosk-mode” (ukrycie paska u góry ekranu) i wyświetlić na ekranie telewizora.

Podsumowanie

Niniejszy artykuł miał pokazać, że integracja Zabbixa z Grafaną wcale nie jest trudna. Autor gorąco zachęca do dalszych testów, a w szczególności do podpinania innych systemów, instalowania nowych paneli czy zainteresowania się pobocznym projektem twórców polegający na usłudze monitoringu stron z kilkunastu miejsc na świecie i przedstawienia tego w Grafanie (do 1 mln sprawdzeń na miesiąc jest to usługa darmowa).

A czy wy stworzyliście już jakiś dashboard? Pochwalcie się nimi w komentarzach.

— Albert Przybylski, fanatyk Zabbixa, pełnoprawny admin 24/7

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Mike
    Odpowiedz
    • paulfantom

      @Mike
      Jako jeden z deweloperów tego narzędzia, mogę powiedzieć, że netdata nie jest w żadnym stopniu oparte o grafanę. Dodatkowo, żeby było ciekawiej to od tego roku netdata może być źródłem danych do grafany.

      Odpowiedz
      • Amadeusz

        Dzięki za info. Korzystam z netdata od dość wczesnych kompilacji. Naprawdę dobra robota. ;-)

        A Zabbix’a od wersji 3.4 czekają całkiem spore zmiany.

        Odpowiedz
  2. Tony Hołk

    Napisałeś, że regexy zamykamy w backslashach '\’ , a użyłeś forward slasha '/’. Takie tam detale :)

    Odpowiedz
  3. Andrzej

    Do wykresów polecam spojrzeć na Microsoft Power BI, świetnie wyglądają i są interaktywne

    Odpowiedz
  4. Jak to? Coś o Zabbixie, a mnie tu nie ma? :D A poważnie, to interesujące narzędzie. Z ciekawości aż przetestuję w najbliższym czasie.

    Odpowiedz
  5. olo

    A jak Wam się widzi Check_MK w porównaniu do Zabbixa?

    Odpowiedz
  6. JarekP

    Check_mk i nagios ok, z zabbixem nigdy nie widziałem, są lepsze narzędzia.

    Odpowiedz
  7. Woj

    Mam problem z domyślnym dashboard’em.
    Wszędzie widzę wartości N/A – https://i.snag.gy/YtuyFv.jpg. Zabbixa i Grafane zainstalowałem w dniu dzisiejszym. Wybrałem większy okres czasowy, jednak nadal brak wyników.

    Drugi domyślny dashboard – Zabbix Server Dashboard wyświetla się prawidłowo i wszystkie dane z dodanych hostów. Co może być źle ustawione, co mogę sprawdzić?

    Odpowiedz
    • AP

      Domyślnie dashboard próbuje pobrać informacje o hoście nazwanym „Zabbix server”. Zobacz, czy czasem nie masz inaczej nazwanego hosta w konfiguracji zabbix i popraw nazwę w „Query mode” w grafanie.

      Odpowiedz
      • Woj

        Rzeczywiście nazwałem inaczej host z serwerem zabbixa.

        Gdzie dokładnie mogę znaleźć to „Query mode”? Przeszukałem Grafanę, ale niestety nie potrafię tego odnaleźć.

        Odpowiedz
  8. Patryk

    Kolejny dobry artykuł o zabbixie!
    Czekam na kolejne :)

    Odpowiedz
  9. Grzesiek

    Czy istnieje możliwość filtrowania w Grafanie tylko włączonych hostów (enable) z Zabbixa? Tak żeby na listach wyboru nie pojawiały się hosty wyłączone.

    Odpowiedz
  10. Lekki update od mnie:
    – Grafana ma problemy z wersją Zabbix 5.0.1. Może niepoprawnie lub wcale wyświetlać danych.
    – Jeżeli masz problem z wykresami i zamiast danych pojawia się informacja “No data” (dosyć częsty błąd) to warto sprawdzić datę na serwerze Zabbixa i Grafanie. Muszą być takie same strefy czasowe. Do tego, użytkownik musi mieć nadane odpowiednie uprawnienia “Read” do hostów, które są analizowane za pomocą Grafany.

    Odpowiedz
  11. Franey

    Wiem, że to stary artykuł, ale…
    to NIE są wykresy Grafana W Zabbixie. To są po prostu wykresy w Grafanie z danymi pobranymi z Zabbixa (a nie w Zabbixie!). Może dla kogoś temat przydatny, ale jak dla mnie to bez sensu mnożyć ilość narzędzi do monitoringu (bądź wizualizacji danych).

    Odpowiedz

Odpowiedz