Czy prometheus nada się do monitorowania bazy danych

Czy prometheus nada się do monitorowania bazy danych
HB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Chciałbym wykorzystać sql-exporter + prometheus do wykrywania różnych anomalii w bazie danych (sql server jak i postgres). Przykładowe zapytania:

  • użytkownicy którzy od dawna się nie zalogowali
  • zamówienia, które jeszcze nie zostały opłacone
  • ile jest zamówień per klient

Problem w tym, że:

  • niektóre zapytania chciałbym, by były odpalane co 1 minutę, inne co 15 minut, jeszcze inne co godzinę itd.
  • niektóre zapytania mają miec timeout 5 sekund, a inne 1 minutę, itd.
  • niektóre alerty mają być wysyłane na kanał slack z "resolved", a inne, na tym samym kanale bez "resolved"
  • niektóre alerty mają się wysyłać co 5 minut, inne raz dziennie itd.

No i odnoszę wrażenie, że w prometheusu dużo z tych ustawień jest "globalnych", a robienie ich per zapytanie wiąże się z "hackami". Przykładowo to, że jedne zapytania mają być odpalane co 1 minutę, a inne co 15 minut powoduje, że muszę:
a) uruchomić 2 instancje exportera na 1 hoście
b) skonfigurować 2 osobne joby w prometheusu - w każdym z nich na sztywno będę określał jakie joby z exportera mają być uruchomione podczas scrapowania

No i minusem b) jest to, że teraz z kazdym nowym jobem exportera muszę dodawać go do prometheusa.

Mam wrażenie, że próbuję użyć prometheusa w miejscu, w którym nie jest on przeznaczony. Mam rację?

hzmzp
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 742
0

Zdecydowanie nie do tego służy prometheus, z tego co piszesz raczej potrzebujesz małych apek/skryptów, które łatwo będzie modyfikować i dostosowywać odpalanych np z cron. Albo użyć już takich większych kombajnów jak Apache Airflow, Dagster, Prefect raczej im bliżej do tego co chcesz.

ZC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 171
0

Pierwsza sprawa. Alerty to się raczej robi z Grafany, a nie z Prometeusa. A jak chcesz mieć wersje graficzne w tych alertqch to jest plugin do Grafany.

Nie wiem jakie metryki wystawiają relacyjne bazy danych by default ale co do zasady można sobie napisać dosyć prostego klienta i bedzie nam wystawiał takie metryki jakie chcemy.

Clint Prometeusa oraz Prometeus (serwer) działają nieco inaczej jak myślisz. Klient, w tym momencie jakis plugin doczepiony do relacyjnej bazy danych wystawia endpoint z metrykami. Standardowo masz 4 typy metryki so wyboru (ost. mieli dodawać metrykę nr.5).

Serwer Prometeusa (tam gdzie on ma tą swoją wewnętrzną bazę danych odpytuje API Clienta z jakąś ustaloną częstotliwością (np. co 15 sekund). Wtedy pobiera wszystkie metryki, agreguje je i wystawia do Grafany.

Grafana ma dostęp do danych z Prometeusa. Budujesz sobie w oparciu o to dashbord z wykresami i na wykresach tworzysz alerty.

Edycja: wydaje mi się, że próbujesz użyć tego toola w sprzeczności z jego podstawowymi założeniami 😀
Imho to powinno być ograne poprzez Procedury Składowane na dysku twardym odpalane z poziomu Schedulera bazy danych. Nie wiem jak w Postgres, ale w MS SQL jak byś miał problem z wysłaniem na odpowiedni kanał to zawsze możesz napisać odpowiedni provider w C# i wgrać do natywne do SQL serwera jako rozszerzenie.

HB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
1
zchpit napisał(a):

Pierwsza sprawa. Alerty to się raczej robi z Grafany, a nie z Prometeusa. A jak chcesz mieć wersje graficzne w tych alertqch to jest plugin do Grafany.

No nie wiem, ja używam tego:
https://prometheus.io/docs/alerting/latest/alertmanager/

DU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
0

Ja bym napisał program, który to sprawdza i wystawia metryki, zbierasz je prometheusem i sobie ustawiasz alerty w Grafanie albo alertmanagerze. Ja mam coś podobnego i super się sprawdza.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.