Prometeus + Grafana
Ostatnio w pracy miałem do zrobienia fajne zadanie, tj. dodać narzędzie monitorujące Prometeus wraz z narzędziem wyświetlającym te dane czyli Grafaną. Wszystko w kontenerach Dockerowych, czyli bardzo przyjemne zadanie. Na wstępie chciałbym pozdrowić Marcina Budnego, którego prezentacja na Śląskiej Grupie .NET dostępna na youtube bardzo mi w tym pomogła: link do nagrania
System monitorujący składa się z 3 elementów:
- klient Prometeusa — wystawia endpoint
/metricsz ustandaryzowanym tekstem (format monitu) - serwer Prometeusa — de facto baza danych nasłuchująca endpointy klientów, agregująca je oraz wystawiająca własny endpoint z danymi
- interfejs UI w postaci Grafany
Klienci mogą być różni. Wiele technologii posiada własnych klientów, a jak w jakiejś brakuje to dosyć łatwo można napisać własnego klienta. Do .NET istnieje kilka klientów. Do tego obrazy Dockerowe mają swojego klienta. Serwer może mieć swojego klienta (np. monitorowanie zajętości dysku twardego), kolejki typu Kafka mogą mieć klienta itp.
Serwer w sposób dynamiczny agreguje te dane, dzięki czemu klienci mogą się “rozszerzać” np. w oparciu o kontenery Dockerowe i np. Kubernetesa. Jak mamy większe obciążenie to zwiększamy ilość aplikacji klienta, a serwer Prometeusa automatycznie to wykrywa i ogarnia.
Grafana, która nasłuchuje zagregowanych danych z Prometeusa to część UI która do wyświetlania danych w przystępny sposób. Obok wyświetlania może też wysyłać powiadomienia, np. na email, slacka, teamsy itp.
Bawiąc się grafaną opartą o obraz dockerowy w miarę szybko ogarnąłem jak zapisać i przechowywać dane tablic (dashboardów) w taki sposób, aby wszystko było “na gotowe” po uruchomieniu kontenera. Trzeba w tym celu zmapować Volumes na swój własny katalog. Dashboard jest w formacie .json więc fajnie się archiwizuje zmiany w raportach w Git-cie.