Prometheus to otwartoźródłowe narzędzie do monitoringu i alertowania, które zbiera metryki z aplikacji oraz infrastruktury, składuje je we własnej bazie szeregów czasowych (time series database) i pozwala je odpytywać własnym językiem zapytań PromQL. Powstało w SoundCloud w 2012 roku, a dziś jest projektem graduated w fundacji CNCF i de facto standardem monitoringu w świecie Kubernetes. Mówiąc po ludzku: to ten kawałek systemu, który wie, że Twój serwis ma 95% CPU o 3 w nocy, i potrafi o tym dać znać, zanim zrobi to klient.
Jak to działa
Prometheus działa w modelu pull — to on cyklicznie odpytuje (scrapuje) Twoje aplikacje pod adresem typu /metrics przez HTTP, a nie aplikacje wysyłają dane do niego. Metryki są zwykłym tekstem w prostym formacie eksponowanym przez Twój kod albo przez tzw. exporter (np. node_exporter dla metryk systemowych Linuksa). Każda metryka to nazwa plus etykiety (labels), np. http_requests_total{method="GET", status="200"}, dzięki czemu jeden wskaźnik możesz ciąć po dowolnym wymiarze.
Zebrane dane lądują w lokalnej bazie szeregów czasowych. Z poziomu PromQL liczysz na nich tempo, agregaty czy percentyle — a wyniki podpinasz najczęściej pod Grafanę (wykresy) i Alertmanagera (powiadomienia na Slacka, e-mail, PagerDuty).
Przykład z praktyki
Chcesz wiedzieć, ile requestów na sekundę obsługuje serwis w ostatnich 5 minutach. W panelu Prometheusa (domyślnie pod portem 9090) wpisujesz:
rate(http_requests_total[5m])
Funkcja rate() liczy średni przyrost licznika na sekundę. Potem dorzucasz regułę alertu, np. „odpal alarm, gdy odsetek odpowiedzi 5xx przekroczy 5% przez 10 minut” — i masz monitoring, który sam Cię budzi zamiast czekać, aż zrobi to szef.
Częste błędy i mity
- „Prometheus sam wysyła powiadomienia” — nie. Sam tylko wyznacza, że reguła alertu jest spełniona. Za routing i wysyłkę odpowiada osobny komponent, Alertmanager.
- Traktowanie go jak bazy długoterminowej — domyślnie trzyma dane lokalnie i przez ograniczony czas (retencja). Na długie przechowywanie i skalę używa się rozwiązań typu Thanos, Cortex czy Mimir.
- Etykiety o wysokiej kardynalności — wrzucanie do labeli np. ID użytkownika czy pełnego URL-a potrafi zabić pamięć Prometheusa. To najczęstszy strzał w stopę.
- Mylenie z logami — Prometheus to metryki (liczby w czasie), nie logi. Do logów weź np. Loki.
Pojęcia powiązane
PromQL, exporter (node_exporter), Alertmanager, Grafana, time series database, Kubernetes, CNCF, scraping, OpenMetrics, Thanos.