Mega Sekurak Hacking Party w Krakowie! 20.10.2025 r. Bilety -30%

Zabbix + Grafana – część 1 – instalacja

16 września 2025, 12:40 | Teksty | 1 komentarz

Czy kiedykolwiek zdarzyła Ci się sytuacja, że funkcjonalności dashboardów w Zabbix były niewystarczające? A może masz więcej systemów monitoringu lub innych źródeł danych, i chciałbyś przedstawić dane z kilku źródeł na jednym dashboardzie? Albo kadrę zarządzającą, która mimo najszczerszych chęci i przygotowania dashboardów w Zabbix “nie będą klikać w Zabbixie, bo mają ważniejsze rzeczy do roboty”?

Nad podobnymi pytaniami zastanawialiśmy się kilka lat temu w podobnym >artykule. Od tego czasu może nie zmieniły się wyzwania, z którymi musimy się mierzyć jako administratorzy monitoringu, ale na pewno technologia poszła mocno do przodu. 

Zapraszam więc na odświeżoną serię artykułów związanymi z współpracy “Zabbix + Grafana” , począwszy od instalacji środowiska Grafana, podłączenia się do środowiska Zabbix, stworzenia pierwszych dashboardów, kończąc na pobieraniu danych nie tylko za pomocą oficjalnego pluginu Zabbix. Artykuły będą skupione bardziej na oprogramowaniu Grafana, wykorzystujące środowisko Zabbix jako źródło danych.

W dzisiejszym artykule przedstawiono podstawową instalację Grafany, połączenie jej z istniejącą już instancją serwera Zabbix za pomocą oficjalnego modułu.

Zaczynamy!

Grafana – więcej niż dashboardy

Jeśli kiedykolwiek analizowałeś metryki z różnych źródeł, na pewno natknąłeś się na Grafanę. To jedno z najpopularniejszych narzędzi open source do wizualizacji i monitorowania danych. Co ważne – Grafana sama nie zapisuje danych, a jedynie je pobiera i prezentuje w czytelny sposób, korzystając z takich źródeł jak Prometheus, InfluxDB, Elasticsearch lub właśnie Zabbix.

Za projektem stoi firma Grafana Labs, która – oprócz darmowej wersji open source (Grafana OSS) – oferuje też bardziej rozbudowaną wersję Enterprise oraz >Grafana Cloud, czyli w pełni zarządzane środowisko w chmurze.

Grafana jest częścią szerszego ekosystemu observability. W jego skład wchodzą m.in. Loki (logi), Tempo (trace’y – czyli śledzenie przepływu żądań w aplikacjach) oraz Mimir (metryki). Dzięki temu możliwe jest kompleksowe monitorowanie systemów.  Więcej informacji oraz całe portfolio firmy można znaleźć na >na stronie projektu.

Przygotowanie środowiska

Do przygotowania tego poradnika stworzono dedykowane środowisko testowe (schemat znajdziesz na poniższym Rysunku).


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

W tym przykładzie założono, że posiadamy już serwer Zabbix w wersji 7.0.17 (najnowsza wersja LTS w chwili pisania artykułu – przyjęto taką wersję, by ten artykuł był jak najdłużej aktualny), jednak Grafana zadziała również z innymi wersjami Zabbix aktualnie wspieranymi przez Zabbix (6.0 oraz 7.4). 

Grafana została zainstalowana na osobnym serwerze, co jest zalecaną praktyką. W tym przykładzie wykorzystano wersję 12.1, aktualną w chwili pisania artykułu (Grafana nie oferuje wersji LTS).

Najpierw upewnij się, że serwer Grafana może połączyć się z frontendem Zabbix przez HTTP lub HTTPS (np. port 80 albo 443, w zależności od konfiguracji). W dalszej części artykułu zakładamy podstawową konfigurację frontendu HTTP na porcie TCP 80 (ale oczywiście autor zachęca do używania HTTPS!).

Przygotowanie Zabbix do integracji

Pierwszym krokiem w integracji jest utworzenie w Zabbix użytkownika, którego Grafana będzie używać do połączeń z API. Najprostszym sposobem byłoby utworzenie użytkownika z uprawnieniami “Super Admin”, ale chyba każdy przyzna, że nie jest to zbyt bezpieczne rozwiązanie. W tym artykule stworzymy pełnoprawnego użytkownika “Read-Only”, który będzie mógł tylko czytać informacje bez możliwości wprowadzania jakichkolwiek zmian (np. na wypadek wycieku poświadczeń do logowania).

By to zrobić, na początku należy zalogować się do GUI i wejść w zakładkę “Users” – “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 RO”) 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ę “Host Permissions” i dodajemy uprawnienia RO dla wszystkich maszyn – najłatwiej jest kliknąć w kontrolkę “Add”, a następnie w przycisk “Select”, wybrać wszystkie grupy hostów w nowo otwartym oknie i znowu kliknąć “Select”:

Rysunek 4. Zaznaczenie wszystkich grup hostów.

Zakładamy, że chcemy móc monitorować wszystkie hosty z środowiska Zabbix; oczywiście nic nie stoi na przeszkodzie by wybrać tylko konkretne grupy i tylko im nadać uprawnienia RO.

Wszystkie wybrane przez nas grupy powinny się pojawić w odpowiedniej sekcji “Permission”. Teraz należy wybrać opcję “Read” i kliknąć “Add”:

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

Jeżeli mamy już grupę użytkowników z odpowiednimi uprawnieniami, należy teraz stworzyć odpowiednią Rolę dla Grafany. Rola użytkowników służy do wskazania, do jakich obszarów środowiska Zabbix użytkownicy powinni mieć dostęp. Można pominąć ten punkt i użyć domyślnych roli np. “User role”, ale my stworzymy niestandardową rolę z minimalnymi uprawnieniami. W tym celu musimy wejść w zakładkę “Users” – “Users roles”, a potem kliknąć w przycisk “Create user role”:


Rysunek 6. Dodawanie nowej roli.

Dalsza konfiguracja wygląda następująco:

  • Name – nazwa roli, np. “Api role”
  • User Type – zostawiamy typ User (najniższe możliwe uprawnienia).
  • Access to UI elements – zgodnie z najlepszymi praktykami ograniczamy dostęp do minimum, np. zostawiając wyłącznie Dashboard. Chociaż dostęp do frontendu został już odebrany na poziomie grupy użytkowników, tutaj również redukujemy prawa – zgodnie z zasadą najmniejszego uprzywilejowania.
  • Default access to new UI elements – odznaczamy tę opcję, aby uniknąć automatycznego nadawania nowych uprawnień w przyszłości.

Rysunek 7. Przykładowe ustawienia nowej roli dla użytkownika cz. 1
  • Access to services – ustawiamy None. Jeśli planujesz w Grafanie korzystać np. z metryk SLA, można ustawić Read-only na All lub wskazać konkretne usługi. Jeżeli ta funkcjonalność nie jest wykorzystywana, bezpieczniej zostawić None.
  • Access to modules – wszystkie opcje odznaczamy. Nawet jeśli dostęp do GUI został wcześniej zablokowany, tu również stosujemy zasadę >PoLA.
  • Default access to new modules – odznaczamy, aby uniknąć niekontrolowanego dostępu do funkcji, które mogą pojawić się w kolejnych wersjach.

Rysunek 8. Przykładowe ustawienia nowej roli dla użytkownika cz. 2
  • Access to API – najlepiej stosować listę dozwolonych metod (Allow list), dzięki czemu użytkownik ma dostęp wyłącznie do funkcji, które są naprawdę potrzebne. To podejście jest bezpieczniejsze niż Deny list, gdzie łatwo przeoczyć jakąś metodę. Dobrym zwyczajem jest dopuszczenie jedynie tych obszarów, z których faktycznie korzystasz. Przykład: jeśli nie używasz SLA, nie ma potrzeby dodawać metod “service.* ani “sla.*”. Jeśli jednak nie masz jeszcze pewności, jakich metod będziesz potrzebować, możesz tymczasowo pozostawić listę pustą i doprecyzować ją później.
  • Access to actions – określa, jakie akcje może wykonywać użytkownik. Dla konta RO odznaczamy wszystkie pozycje. Przykład: aby uniemożliwić uruchamianie skryptów z poziomu Grafany (np. ICMP ping), należy odznaczyć Execute scripts.
  • Default access to new actions – odznaczamy, aby w przyszłości automatycznie nie pojawiły się dodatkowe uprawnienia.

Jeśli konfiguracja wygląda poprawnie, zatwierdź ją przyciskiem Add, aby utworzyć nową rolę:

Rysunek 9. Przykładowe ustawienia nowej roli dla użytkownika cz.3 

Po stworzeniu roli możemy już utworzyć użytkownika, który będzie używany do pobierania danych z środowiska Zabbix.W tym celu wchodzimy w zakładkę “Users” – “Users”, a potem kliknąć w przycisk “Create user”:

Rysunek 10. Tworzenie nowego użytkownika.

Tworzymy użytkownika np. “grafana_api”, dodajemy go do stworzonej wcześniej grupy “API RO” i nadajemy hasło (nie klikamy jeszcze “Add”!):

Rysunek 11. Ustawienia użytkownika “grafana_api”.

 Następnie w zakładce “Permissions” ustawiamy nową rolę “API USERS” – pokaże nam się podsumowanie wszystkich uprawnień. Jeżeli wszystko jest ustawione poprawnie, klikamy przycisk “Add”:

Rysunek 12. Ustawienia uprawnień dla użytkownika “grafana_api”.

Kiedy już posiadamy użytkownika z odpowiednimi uprawnieniami, możemy przejść do instalacji i konfiguracji Grafany.

Instalacja Grafany

Grafanę możesz zainstalować na kilka sposobów (menedżer pakietów, paczka .deb/.rpm, kompilacja ze źródeł). W tym poradniku wybieramy najwygodniejszą opcję – instalację przez menedżera pakietów, bo ułatwia przyszłe aktualizacje. W tym artykule przedstawiono skróconą wersję instalacji dla systemu Ubuntu 24.04 za pomocą managera paczek – jeżeli masz inny system operacyjny lub chcesz wykorzystać inną metodę instalacji – sprawdź oficjalną >dokumentację producenta.

Logujemy się do naszego serwera (w tym przypadku jest to “grafana-12-1”) i upewniamy się, że mamy odpowiednie narzędzia do pobrania i instalacji Grafany:

sudo apt-get install -y apt-transport-https software-properties-common wget

Importujemy klucze GPG dla repozytorium Grafana, byśmy mieli pewność, że paczki pochodzą z zaufanego źródła i nie zostały zmienione po podpisaniu:

sudo mkdir -p /etc/apt/keyrings/

wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

Dodajemy konfigurację repozytorium Grafana w wersji “Stable”:

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Aktualizujemy bazę możliwych paczek do ściągnięcia:

sudo apt-get update

Nadszedł czas na instalację Grafany w wersji OOS:

sudo apt-get install grafana

Po instalacji uruchamiamy usługę Grafany oraz ustawiamy jej autostart:

sudo systemctl start grafana-server.service

sudo systemctl enable grafana-server.service

Jeżeli wykonałeś powyższe kroki (lub zainstalowałeś usługę w inny sposób) i 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://192.168.88.241:3000). Naszym oczom powinna ukazać się następująca strona startowa:

Rysunek 13. Panel do logowania.  

Teraz wystarczy wpisać domyślne dane do logowania (admin/admin), by potwierdzić poprawność naszej instalacji (jeżeli wchodzisz pierwszy raz, możesz zostać poproszony jeszcze o zmianę hasła konta “admin”):

Rysunek 14. Ekran startowy po zalogowaniu.  

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. 

Dodanie i konfiguracja pluginu Zabbix

Sama instalacja pluginu, który pobiera dane z serwera Zabbix, jest również bardzo prosta i składa się z kilku kliknięć na stronie WWW. Aby zainstalować plugin musimy wejść w “Administration” – “Plugins and data” – “Plugins” w menu znajdującym się po lewej stronie:

Rysunek 15. Zarządzanie pluginami z poziomu GUI Grafana.

Następnie musimy znaleźć interesujący nas plugin – najlepiej w wyszukiwarce wpisać słowo “zabbix” i go kliknąć:

Rysunek 16. Wyszukanie pluginu Zabbix.    

Gdy klikniemy w plugin “Zabbix”, należy go zainstalować w GUI: 

Rysunek 17. Instalacja pluginu Zabbix.

Po instalacji najprawdopodobniej plugin będzie w stanie wyłączonym, dlatego musimy go jeszcze włączyć klikając przycisk “Enable”:

Rysunek 18. Włączenie 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 “Connections” – “Data sources”, a następnie “Add new data source”:

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

Wyszukujemy nasz świeżo zainstalowany plugin “Zabbix” i go klikamy:

Rysunek 20. Wyszukanie pluginy jako źródła danych.

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

  • Name – nazwa naszego połączenia (najlepiej wybrać nazwę która jednoznacznie wskaże nam źródło danych) np. zabbix-7-0
  • URL – cały url do API Zabbix; wystarczy do URL, którym łączymy się do Zabbixa, dodać “api_jsonrpc.php”, w tym przykładzie będzie to “http://192.168.88.240” + “/api_jsonrpc.php”
  • Authentication – możemy wybrać, czy Grafana ma się łączyć do API za pomocą “Basic auth” (charakterystyczne okienko z prośbą o login i hasło w przeglądarce), lub też z użyciem tokenów OAUTH, jeżeli nie mamy tych opcji skonfigurowanych na frontendzie Zabbix – zostawiamy “No Authentication”. Warto jednak rozważyć wdrożenie jednego z bezpieczniejszych sposobów uwierzytelniania, jeżeli chcesz podnieść poziom bezpieczeństwa.
  • TLS settings – jeżeli używamy protokołu HTTPS, możemy tutaj wrzucić nasz lokalny certyfikat CA by plugin wiedział, że certyfikat na frontendzie Zabbix jest zaufany (“Add self-signed certificate”) lub też dodać walidację TLS, ale po stronie klienta (“TLS Client Authentication”); oczywiście opcji pomijania weryfikacji TLS (“Skip TLS certificate validation”) nie rekomendujemy, ale może być przydatna do ewentualnego debugu połączenia Grafana <-> Zabbix; w naszym przykładzie używamy HTTP więc zostawiamy te opcje puste,
  • HTTP Headers – w tym miejscu możemy ustawić dodatkowe nagłówki HTTP, które będą przekazywane podczas zapytań API, w naszym przykładzie nie ma potrzeby dodatkowych nagłówków, więc zostawiamy puste
Rysunek 21. Konfiguracja połączenia Grafany z Zabbixem cz. 1
  • Zabbix Connection – możliwe są dwa typy uwierzytelniania do API – za pomocą użytkownika i hasła (pole “Auth type” równe “User and password”) lub za pomocą tokenów API (pole “Auth type” równe “API token”). W naszym przykładzie wybierzemy pierwszą metodę, ponieważ jest ona najszybsza i najprostsza do skonfigurowania – nie wymaga generowania dodatkowych tokenów ani zarządzania ich ważnością. Jeżeli jednak jeżeli jesteś zainteresowany połączeniem się za pomocą tokenów, wystarczy wygenerować token API dla użytkownika dla Grafany zgodnie z >oficjalną dokumentacją. Skoro jednak używamy prostszego logowania “użytkownik/hasło”, podajemy dane do logowania do serwera Zabbix (te same, co ustawiliśmy w sekcji “Przygotowanie środowiska”),
  • Allowed cookies – Grafana podczas połączenia się z API Zabbix może usuwać przekazane już pliki cookie (np. przy rozwiązaniach SSO); tutaj możemy wskazać, które pliki cookie nie mają być usuwane (po nazwie, w naszym przykładzie nie ma potrzeby trzymania ciasteczek, więc pole zostawiamy puste,
  • Timeout – okres czasu (w sekundach), po którym plugin uzna, że nie ma połączenia do API Zabbix (nie będzie mógł nawiązać połączenia); nie ma domyślnej wartości, ale na razie nie wpisujemy tam nic,  *
Rysunek 22. Konfiguracja połączenia Grafany z Zabbixem cz. 2
  • Sekcja Zabbix API:
    • Cache TTL – definiuje co jaki czas Grafana ma odświeżać informacje o konfiguracji (np. Grupy hostów, hosty, tagi itp.); możemy zostawić domyślne 1h,
    • Timeout – ten parametr przedstawia nam okres czasu, po którym plugin uzna, że nie jest w stanie pobrać wartości z API Zabbix (np. gdy będziemy chcieli pobrać zbyt dużą ilość danych i baza danych nie wyrobi się w tym okresie). Pozostawiamy domyślną wartość 30 sekund,   *
  • Enable 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; zostawiamy domyślnie wartości dla danych zebranych powyżej 7 dni (pole “After”) lub gdy wyświetlany zakres wynosi więcej niż 4 dni (pole “Range”), ale warto je ustawić zgodnie z Twoim środowiskiem i potrzebami,
  • 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ć odpowiednie źródło danych – wtedy podczas pobierania wartości z historii lub trendów plugin będzie wykorzystywał bezpośrednie połączenie do DB, na razie pozostawiamy pobieranie wszystkich danych przez API, więc zostawiamy tą opcję odznaczoną,
  • Disable acknowledges for read-only users – Możemy wyłączyć możliwość potwierdzania alarmów z poziomu Grafany dla użytkowników Read-only, dla tego przykładu nie ma to znaczenia, bo i tak wyłączyliśmy tą opcję z poziomu roli w Zabbix
  • Disable data alignment – czy domyślnie Grafana nie powinna wyrównywać danych do punktów w czasie na podstawie wybranego interwału (np. np. gdy wyrównanie jest włączone i chcemy otrzymać wartości z interwałem 1 minuty, Grafana będzie starała się „wyrównać” wartości do pełnych minut) – w naszym przykładzie zostawiamy domyślne wyrównywanie wartości.
Rysunek 23. Konfiguracja połączenia Grafany z Zabbixem cz. 3

Po wprowadzeniu danych i zapisaniu konfiguracji (“Save & test”) połączenia zobaczysz komunikat potwierdzający (wraz z wersją API Zabbix):

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

Test połączenia

Aby zweryfikować połączenie, otwórz sekcję Explore  i sprawdź, czy Grafana prawidłowo pobiera dane z Zabbix (np. wyświetlając wykres w czasie). Znajdziesz ją w menu po lewej stronie:

Rysunek 25. Wejście w zakładkę “Explore”

Następnie upewnijmy się, że źródło jest ustawione na wcześniej skonfigurowane „zabbix-7-0”, a zapytanie jest ustawione na pobieranie wartości numerycznych („Metrics”). Następnie musimy wpisać odpowiednią grupę, nazwę hosta, tag oraz pozycję, która nas interesuje. Gdy pojawi nam się wykres wartości w zależności od czasu oraz tabelka z danymi to możemy uznać, że wszystko ustawiliśmy poprawnie i możemy zacząć pobierać i przetwarzać dane np. Budując pierwszy dashboard.

Poniżej przedstawiono przykładowe wyświetlenie wartości load (średnia z jednej minuty) na domyślnej instalacji zabbix-server z domyślnym szablonem linux:

Group – Zabbix servers

Host – Zabbix server

Item tag - component: cpu (wartość ta nie jest wymagana)

Item - Load average (1m avg)
Rysunek 26. Pierwsze poprawnie odebrane dane z systemu Zabbix.

Uwaga! Jeżeli jakaś wartość dla Grafany nie jest dostępna (wielki napis “No data” zamiast liczb i wykresów), jednak Zabbix zbiera wartość poprawnie, to jedna z możliwych przyczyn to wybranie za małego przedziału czasowego w Grafanie (prawy górny róg). Na przykład kiedy pobieramy informacje o pozycji odświeżanej co godzinę, a w Grafanie wybierzemy przedział “Last 5 minutes”, to Grafana może trafić na “dziurę”, ponieważ pozycja mogła być sprawdzona 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 pozycji powinno naprawić problem.

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 oraz do tworzenia własnych dashboardów. Nie wiesz jak do tego się zabrać? W takim razie zapraszam na następny artykuł, gdzie skupimy się na tworzeniu przykładowego dashboardu. Jeżeli jednak artykuł pomógł Ci w pierwszych krokach z Grafaną to pomyśl o wsparciu autora >dobrą kawką!

~ Albert Przybylski, zawodowo: Architekt ds. Monitoringu w firmie Aplitt, prywatnie: pełnoprawny fanatyk Zabbixa zasilany kawą

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



Komentarze

  1. SeeM

    Kto używa Nagiosa ręka w górę? aNag na Androida i ack / recheck poprzez przesuwanie alertów w prawo / lewo jest nie do pobicia.

    Odpowiedz

Odpowiedz