Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Jeśli słyszałeś, że Grafana to narzędzie, w którym zespoły DevOps oglądają kolorowe wykresy obciążenia serwerów, to dobry punkt startu, ale to zaledwie ułamek prawdy. W tym przewodniku wyjaśnimy od zera, czym jest Grafana, jak działa, do czego się jej używa i pokażemy wszystko na przykładach. I nie na diagramach z internetu, tylko na prawdziwych zrzutach z działającej instalacji, którą specjalnie na potrzeby tego artykułu postawiliśmy na własnym serwerze: Grafana, Prometheus oraz kilka źródeł metryk.
Z tego artykułu dowiesz się:
Grafana to otwartoźródłowa (open source, czyli o publicznie dostępnym kodzie) platforma do wizualizacji danych, monitorowania systemów i alertowania. Mówiąc prościej: Grafana zamienia surowe liczby, które produkują Twoje serwery, aplikacje i bazy danych, w czytelne wykresy, liczniki i tabele zebrane na jednej stronie zwanej dashboardem.
Kluczowa rzecz, którą warto zrozumieć od razu, bo odróżnia Grafanę od większości innych narzędzi: Grafana nie przechowuje danych. Nie jest bazą danych. Zamiast tego łączy się z zewnętrznymi źródłami danych (ang. data source), odpytuje je na bieżąco i rysuje wyniki. Dane fizycznie leżą gdzie indziej, a Grafana odpowiada wyłącznie za to, żeby ładnie i użytecznie je pokazać. To trochę jak deska rozdzielcza w samochodzie: sama nie produkuje prędkości ani obrotów, tylko odczytuje je z czujników i pokazuje kierowcy.
Grafana powstała w 2014 roku. Stworzył ją szwedzki programista Torkel Ödegaard, a projekt wyrósł jako odgałęzienie interfejsu Kibany. Dziś rozwija ją firma Grafana Labs, a narzędzie stało się faktycznym standardem monitoringu w świecie DevOps. Używają go zespoły od małych startupów po największe firmy technologiczne, właśnie dlatego, że jest darmowe, elastyczne i potrafi połączyć w jednym miejscu dane z wielu różnych systemów naraz.
Żeby Grafana miała co pokazać, ktoś musi najpierw te dane zebrać i gdzieś zapisać. Najpopularniejszy zestaw w monitoringu wygląda tak: metryki zbiera Prometheus (baza szeregów czasowych, czyli danych zapisywanych ze znacznikiem czasu), a Grafana je z niego wyciąga i rysuje. Oto cała ścieżka danych, którą warto zapamiętać:
Źródła danych
Serwery, aplikacje i bazy produkują metryki: zużycie CPU, pamięci, liczbę żądań.
Eksportery
Programy takie jak node_exporter udostępniają metryki pod adresem /metrics.
Prometheus
Co kilkanaście sekund pobiera metryki (tzw. scrape) i zapisuje je z czasem pomiaru.
Grafana
Odpytuje Prometheus językiem PromQL i rysuje panele, dashboardy oraz alerty.
Prometheus pilnuje, żeby faktycznie pobierać dane ze wszystkich celów (ang. targets). Na naszym środowisku widać to jak na dłoni: Prometheus odpytuje trzy zestawy metryk (node, cadvisor i samego siebie) i wszystkie są w stanie UP, czyli zdrowe.
Warto podkreślić, że Prometheus to tylko jedno z możliwych źródeł. Grafana równie dobrze narysuje wykresy z bazy PostgreSQL, z logów w Lokim albo z metryk chmury AWS. Sama zasada jest zawsze ta sama: dane są gdzie indziej, Grafana je odpytuje i pokazuje.
Grafana działa w przeglądarce. Po jej uruchomieniu (domyślnie pod adresem serwera na porcie 3000) wita nas ekran startowy. Za pierwszym razem logujemy się kontem administratora.
Po zalogowaniu trafiamy na stronę główną. Najważniejszy jest lewy pasek nawigacji, bo to z niego korzystamy przez cały czas pracy. Znajdziesz w nim kilka stałych pozycji:
Skoro Grafana sama nie ma danych, pierwsza rzecz, jaką się w niej robi, to podłączenie źródła danych. W menu Connections znajdziemy katalog obsługiwanych źródeł. Grafana wspiera kilkadziesiąt z nich od razu po instalacji, a kolejne setki można dodać przez wtyczki.
Oto najczęściej używane źródła danych i to, do czego się nadają:
| Źródło danych | Do czego służy |
|---|---|
| Prometheus | Metryki systemów i aplikacji. Standard w monitoringu infrastruktury. |
| InfluxDB | Metryki i dane z czujników (IoT). Kolejna popularna baza szeregów czasowych. |
| Loki | Logi aplikacji. Rozwiązanie od Grafana Labs, "Prometheus dla logów". |
| Elasticsearch | Logi i pełnotekstowe wyszukiwanie dużych zbiorów danych. |
| PostgreSQL / MySQL / MS SQL | Dane biznesowe wprost z baz relacyjnych, odpytywane językiem SQL. |
| CloudWatch / Azure Monitor | Metryki usług chmurowych AWS oraz Azure. |
My podłączamy Prometheus. Konfiguracja jest prosta: podajemy adres, pod którym działa nasze źródło, i zapisujemy. W tym przypadku Prometheus siedzi pod adresem http://prometheus:9090.
Po zapisaniu i przetestowaniu połączenia źródło pojawia się na liście jako aktywne i domyślne. Od tej chwili Grafana ma z czego rysować.
W Grafanie pracujemy na dwóch pojęciach:
Na liście dashboardów widać te, które już mamy. Część zbudowaliśmy sami, część zaimportowaliśmy gotowe.
Sercem każdego panelu jest edytor zapytań. To tu decydujemy, jakie dane pobrać ze źródła i jak je pokazać. Poniżej edytujemy panel, który rysuje wykorzystanie procesora w podziale na tryby pracy. Zapytanie zapisane jest w języku PromQL (języku zapytań Prometheusa), a po prawej stronie wybieramy typ wizualizacji i jej ustawienia.
Grafana daje kilkanaście typów paneli i to samo zapytanie można pokazać na wiele sposobów. Wystarczy kliknąć listę wizualizacji, żeby przełączyć wykres liniowy na licznik albo tabelę.
Najczęściej używane typy to:
| Typ panelu | Kiedy się przydaje |
|---|---|
| Time series (wykres w czasie) | Zmiana wartości w czasie, na przykład obciążenie CPU minuta po minucie. |
| Stat (licznik) | Jedna duża liczba, na przykład bieżące zużycie pamięci w procentach. |
| Gauge (wskaźnik) | Wartość na skali z progami, na przykład zapełnienie dysku ze strefą czerwoną. |
| Bar chart (słupki) | Porównanie wartości między kategoriami. |
| Table (tabela) | Wiele wartości i etykiet naraz, do przeglądania szczegółów. |
| Heatmap (mapa ciepła) | Rozkład wartości, na przykład czasy odpowiedzi aplikacji. |
Czas na praktykę. Zbudujemy prosty dashboard z trzema panelami: wskaźnik zużycia procesora, licznik zużycia pamięci i wykres obciążenia w czasie. Dla panelu ze wskaźnikiem CPU użyliśmy takiego zapytania PromQL:
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Zapytanie wygląda groźnie, ale mówi prostą rzecz: policz, jaki procent czasu procesor spędził bezczynnie, i odejmij to od stu. Wynik to procent realnego obciążenia CPU. Ustawiamy panel jako wskaźnik (gauge) z progami: zielony do 70 procent, żółty do 85, czerwony powyżej. Do panelu pamięci i obciążenia dokładamy dwa kolejne proste zapytania. Efekt:
Każdy dashboard ma u góry selektor zakresu czasu. To jedno z najważniejszych narzędzi w Grafanie. Jednym kliknięciem przełączamy widok z ostatnich 30 minut na ostatnią godzinę, dobę albo dowolny własny przedział. Wszystkie panele odświeżają się razem.
Nie wszystko trzeba budować samemu. Największa siła Grafany to społeczność, która dzieli się gotowymi dashboardami. Na stronie grafana.com jest ich kilka tysięcy, a każdy ma swój numer. Wystarczy podać ten numer w opcji importu i po chwili mamy komplet wykresów.
Najsłynniejszy przykład to Node Exporter Full o numerze 1860, który pokazuje wszystko o kondycji serwera. To właśnie ten dashboard widziałeś na początku artykułu. Jego górna część to zestaw wskaźników z najważniejszymi liczbami: obciążenie CPU, zużycie pamięci i zapełnienie dysku w jednym rzucie oka.
Grafana nie ogranicza się do metryk pojedynczego serwera. Równie łatwo monitorować kontenery. Poniższy dashboard pokazuje zużycie procesora, pamięci i ruch sieciowy w rozbiciu na poszczególne kontenery Dockera, każdy jako osobna linia z etykietą.
Nie zawsze chcemy od razu budować dashboard. Czasem trzeba tylko szybko coś sprawdzić. Do tego służy widok Explore. Wpisujemy jedno zapytanie, uruchamiamy je i od razu dostajemy wykres. To idealne miejsce do nauki języka zapytań i do doraźnego przeglądania danych podczas awarii.
Same wykresy to nie wszystko. Nikt nie będzie wpatrywał się w ekran przez całą dobę. Dlatego Grafana ma wbudowane alertowanie. Definiujemy regułę: wybieramy zapytanie i warunek, na przykład "zużycie CPU powyżej 90 procent przez pięć minut". Gdy warunek zostanie spełniony, Grafana wyśle powiadomienie na wskazany kanał, na przykład na e-mail, Slacka albo Microsoft Teams.
Choć Grafana kojarzy się głównie z IT, jej zastosowania są znacznie szersze:
| Obszar | Przykłady użycia |
|---|---|
| IT i DevOps | Monitoring serwerów, kontenerów, Kubernetesa, baz danych i aplikacji. Szybkie wykrywanie awarii. |
| SRE (niezawodność usług) | Śledzenie dostępności usług, budżetów błędów i czasów odpowiedzi. |
| Analityka biznesowa | Sprzedaż, liczba zamówień, ruch na stronie, wprost z baz danych firmy. |
| IoT (internet rzeczy) | Odczyty z czujników: temperatura, wilgotność, zużycie energii. |
Grafana nie jest jedynym narzędziem tego typu, ale zajmuje wyjątkowe miejsce, bo jest niezależna od źródła danych i darmowa. Oto jak wypada na tle innych popularnych rozwiązań:
| Narzędzie | Czym się wyróżnia w porównaniu z Grafaną |
|---|---|
| Kibana | Mocna przy logach, ale przywiązana do ekosystemu Elastic. Grafana łączy wiele źródeł naraz. |
| Zabbix | Kompletny system monitoringu z własnym zbieraniem danych. Często łączy się go z Grafaną dla ładniejszych wykresów. |
| Datadog / New Relic | Płatne platformy w chmurze, wygodne, ale kosztowne. Grafanę uruchomisz za darmo na własnym serwerze. |
| Power BI | Nastawione na raportowanie biznesowe i analizy. Grafana celuje w dane na żywo i monitoring w czasie rzeczywistym. |
Grafanę uruchomisz na kilka sposobów. Najszybszy to Docker. Jedno polecenie i po chwili Grafana działa pod adresem http://localhost:3000 (login i hasło: admin):
docker run -d -p 3000:3000 --name grafana grafana/grafana
W realnym monitoringu Grafana rzadko działa sama. Zwykle idzie w parze z Prometheusem i eksporterami. Właśnie taki komplet postawiliśmy na potrzeby tego artykułu, opisany w jednym pliku docker-compose.yml:
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
ports: ["9090:9090"]
node-exporter:
image: prom/node-exporter:latest
ports: ["9100:9100"]
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
Jeśli nie chcesz niczego instalować, jest jeszcze Grafana Cloud, czyli hostowana wersja w chmurze z darmowym planem na start. A jak z kosztami? W skrócie:
W firmie Grafany zwykle używa wiele osób, więc od początku warto zadbać o dostęp. Grafana ma wbudowane konta użytkowników i role: Viewer (tylko podgląd), Editor (tworzenie i edycja dashboardów) oraz Admin (pełna kontrola). Można też podłączyć logowanie firmowe, na przykład przez Google, GitHub czy LDAP, żeby nie zakładać osobnych kont. To ważne, bo dashboardy często pokazują wrażliwe dane o infrastrukturze.
Grafana to darmowe, otwartoźródłowe narzędzie, które zamienia rozproszone dane z serwerów, aplikacji i baz w czytelne, żyjące na bieżąco dashboardy, a do tego samo pilnuje warunków i wysyła alerty. Sama nie przechowuje danych, tylko łączy się ze źródłami takimi jak Prometheus, odpytuje je i pokazuje wyniki. Największe atuty to elastyczność (jeden dashboard łączy wiele źródeł naraz), ogromna społeczność z tysiącami gotowych dashboardów oraz to, że zaczniesz z nią za darmo w kilka minut.
Najlepszy sposób nauki to praktyka: postaw Grafanę i Prometheus przez Docker Compose, zaimportuj dashboard 1860 i spróbuj zbudować własny panel, dokładnie tak, jak pokazaliśmy w tym artykule. A jeśli chcesz przejść przez to z trenerem praktykiem i nauczyć się Grafany oraz całego monitoringu szybciej i w dobrze poukładanej kolejności, mamy dla Ciebie dwa szkolenia.
Tak. Grafana w wersji open source jest bezpłatna i możesz uruchomić ją na własnym serwerze bez żadnych opłat, także komercyjnie. Płatne są dodatkowe usługi: hostowana platforma Grafana Cloud (ma jednak darmowy plan) oraz Grafana Enterprise z funkcjami dla dużych firm i wsparciem.
Nie. Grafana nie jest bazą danych. Łączy się ze źródłami danych, na przykład z Prometheusem, InfluxDB, Lokim czy PostgreSQL, odpytuje je na bieżąco i rysuje wykresy. Dane fizycznie leżą w tych źródłach, a Grafana odpowiada tylko za warstwę wizualizacji i alertowania.
Prometheus zbiera i przechowuje metryki w bazie szeregów czasowych. Grafana ich nie zbiera, tylko pokazuje. W praktyce często pracują razem: Prometheus jest źródłem danych, a Grafana rysuje z nich dashboardy i wysyła alerty.
Grafana ma wbudowaną obsługę kilkudziesięciu źródeł, między innymi Prometheus, InfluxDB, Graphite, Loki, Elasticsearch, MySQL, PostgreSQL, Microsoft SQL Server, AWS CloudWatch, Azure Monitor i Google Cloud Monitoring. Kolejne setki źródeł dostarczają wtyczki.
Najszybciej przez Dockera poleceniem docker run -d -p 3000:3000 grafana/grafana. Grafana ruszy na porcie 3000, logujesz się jako admin z hasłem admin. Można ją też zainstalować z pakietu systemowego na Linuksie albo skorzystać z hostowanej Grafana Cloud bez żadnej instalacji.
Nie. Panele budujesz w interfejsie graficznym, a wiele źródeł ma wizualny kreator zapytań. Warto natomiast poznać język zapytań źródła, którego używasz, na przykład PromQL dla Prometheusa albo SQL dla baz relacyjnych, bo daje pełną kontrolę nad tym, co pokazuje wykres.
Kibana jest przywiązana do ekosystemu Elastic i najlepiej sprawdza się przy logach w Elasticsearch. Grafana jest niezależna od źródła i potrafi w jednym dashboardzie połączyć dane z wielu różnych systemów naraz. Dlatego w świecie DevOps i monitoringu metryk to Grafana jest standardem.
Ze strony grafana.com, w sekcji z dashboardami społeczności. Każdy dashboard ma numer, który wystarczy podać w opcji importu w Grafanie. Popularne przykłady to Node Exporter Full (numer 1860) do monitoringu serwera oraz dashboardy dla kontenerów, baz danych i Kubernetesa.
Chcesz nauczyć się Grafany od praktyka?
Poniżej dwa szkolenia JSystems. Pierwsze skupia się w całości na Grafanie, drugie to szeroki monitoring i observability z Grafaną, Prometheusem, Lokim i Zabbixem. Oba mają termin gwarantowany, czyli odbywają się na pewno.
Szkolenie Grafana - monitoring, wizualizacja danych i alerting ->
Szkolenie Monitoring i Observability: Grafana, Prometheus, Loki i Zabbix ->
Komentarze (0)
Brak komentarzy...