Generator alertów Prometheus
Reguła alertowa w YAML dla Prometheusa
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator alertów Prometheus
Prometheus zbiera metryki, a reguły alertowe decydują, kiedy wysłać ostrzeżenie. Ten generator tworzy poprawną składniowo regułę YAML na podstawie wyrażenia PromQL.
Struktura reguły
| Pole | Znaczenie |
|---|---|
| alert | nazwa alertu |
| expr | wyrażenie PromQL |
| for | jak długo warunek musi trwać |
| labels.severity | waga: info, warning, critical |
| annotations | opis i podsumowanie dla człowieka |
Przykładowe wyrażenia
up == 0— cel niedostępny.rate(http_requests_total{status=~"5.."}[5m]) > 0.05— zbyt dużo błędów 5xx.node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.1— mało wolnej pamięci.rate(node_cpu_seconds_total{mode="idle"}[5m]) < 0.1— wysokie obciążenie CPU.
Jak działa generator alertów Prometheus
Generator zamienia wartości wpisane w formularzu na gotową regułę w formacie YAML. Każda reguła jest elementem listy wewnątrz grupy: pole alert nadaje nazwę, expr przechowuje wyrażenie PromQL, for określa długość okna tolerancji, labels.severity wagę alertu, a annotations tekst czytelny dla człowieka. W YAML o strukturze decydują wcięcia, dlatego generator pilnuje, aby klucze jednego alertu były zagnieżdżone na tym samym poziomie, a wartości tekstowe zawierające nawiasy klamrowe, przecinki lub dwukropki znalazły się w cudzysłowie.
Prometheus ocenia wyrażenie w każdym cyklu ewaluacji. Jeśli zapytanie zwróci niepusty wektor, czyli istnieje szereg czasowy spełniający warunek, alert przechodzi w stan pending. Pozostaje w nim tak długo, jak długo warunek jest spełniony, a po upływie czasu z pola for zmienia stan na firing i dopiero wtedy trafia do Alertmanagera. Gdy wyrażenie przestanie zwracać wyniki, alert wraca do stanu resolved. Pole for działa więc jak filtr: warunek musi być prawdziwy nieprzerwanie, a nie tylko w jednym punkcie pomiarowym.
Progi zapisuje się jako ułamki, nie jako procenty. Wartość 0.05 to 5%, 0.1 to 10%, a 0 oznacza dokładne zero, na przykład w wyrażeniu up == 0, gdzie niedostępny cel przyjmuje wartość 0. Funkcja rate() liczy średnią zmianę licznika na sekundę w podanym oknie, więc okno 5m to 300 sekund. Jeżeli licznik wzrósł o 200 w ciągu 300 sekund, rate() zwróci około 0.667 na sekundę i taki wynik porównujesz z progiem.
Przykład: alert na błędy 5xx krok po kroku
- Cel: uruchomić alert, gdy odsetek odpowiedzi z kodem 5xx przekroczy 5%.
- Wybierz licznik http_requests_total i zawęź błędy etykietą: status=~"5..".
- Zapisz wyrażenie: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.05. Okno 5m odpowiada 300 sekundom.
- W oknie 5 minut przyjęto 200 żądań, z czego 12 zakończyło się kodem 5xx. Udział błędów wynosi 12 / 200 = 0.06, czyli 6%.
- 6% > 5%, więc warunek jest spełniony. Alert wchodzi w stan pending i pozostaje w nim, dopóki wyrażenie nadal zwraca wynik.
- Ustaw for na 5m, severity na critical i dopisz podsumowanie. Po 5 minutach nieprzerwanego spełniania warunku alert przejdzie w stan firing i zostanie wysłany do Alertmanagera.
Pola reguły alertowej — ściągawka
| Pole | Znaczenie | Przykład wartości |
|---|---|---|
| alert | Nazwa alertu, trafia do etykiety alertname i do powiadomienia | HighErrorRate |
| expr | Wyrażenie PromQL; niepusty wynik oznacza spełniony warunek | rate(http_requests_total{status=~"5.."}[5m]) > 0.05 |
| for | Jak długo warunek musi się utrzymywać, zanim alert się uruchomi | 5m |
| labels.severity | Waga alertu | info, warning, critical |
| annotations.summary | Krótki opis problemu dla człowieka | Zbyt dużo błędów 5xx |
| annotations.description | Szczegóły: co się stało i gdzie szukać przyczyny | Odsetek błędów 5xx przekroczył 5% |
| Próg 0.1 | Ułamek odpowiadający 10% | node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.1 |
| Próg 0 | Dokładne zero, np. brak dostępnego celu | up == 0 |
Jak używać reguł w praktyce
- Zawsze ustawiaj for — bez tego alert zadziała przy pierwszym spełnieniu warunku, więc pojedynczy skok metryki wygeneruje powiadomienie i szum w kanale alertów.
- Pamiętaj, że progi to ułamki — 0.05 oznacza 5%, a 0.1 oznacza 10%. Wpisanie 5 zamiast 0.05 daje zupełnie inny, praktycznie nieosiągalny warunek.
- Nazywaj alerty opisowo — nazwa trafia do etykiety alertname i do tytułu powiadomienia, dlatego HighErrorRate jest czytelniejsze niż Alert1.
- Trzymaj reguły w osobnym pliku — wskaż go w prometheus.yml w sekcji rule_files, a po każdej zmianie przeładuj konfigurację, żeby nowe reguły zaczęły obowiązywać.
- Testuj wyrażenie przed zapisem — wklej expr do konsoli PromQL i sprawdź, czy zwraca serie czasowe oraz czy wartości realnie przekraczają próg.
Ograniczenia i czynniki zaburzające
- Nie sprawdza poprawności PromQL — generator pilnuje składni YAML, ale nie zweryfikuje, czy zapytanie jest sensowne ani czy użyte metryki i etykiety istnieją w twojej instancji.
- Nie zna twoich danych — nazwy liczników, etykiet i typowe zakresy wartości musisz podać sam; narzędzie nie podpowie, jaki próg jest właściwy dla twojej skali ruchu.
- Nie uwzględnia interwału scrapowania ani ewaluacji — rzeczywiste opóźnienie alertu to czas zbierania danych, długość okna w rate() oraz wartość for; zależą one od konfiguracji serwera, a nie od wygenerowanego pliku.
- Nie ocenia kosztu zapytania — rozbudowane agregacje po wielu szeregach czasowych obciążają Prometheusa i mogą wydłużyć cykl ewaluacji, czego wynik generatora nie sygnalizuje.
Najczęstsze pytania
Po co „for”?
Zapobiega alertom od chwilowych skoków. Warunek musi być spełniony przez określony czas, np. 5 minut, zanim alert się uruchomi.
Gdzie wstawić reguły?
Do osobnego pliku YAML wskazanego w prometheus.yml w sekcji rule_files, a następnie przeładować konfigurację.
Jak dostarczyć powiadomienia?
Prometheus wysyła alerty do Alertmanagera, który przekazuje je do e-maila, Slacka, PagerDuty itd.
Jak dodać wygenerowaną regułę do Prometheusa?
Zapisz YAML w osobnym pliku i wskaż go w prometheus.yml w sekcji rule_files, a następnie przeładuj konfigurację. Po przeładowaniu reguła pojawi się na liście reguł i zacznie być oceniana w każdym cyklu.
Czym różni się stan pending od firing?
pending oznacza, że warunek jest spełniony, ale krócej niż podany czas for. Po jego upływie alert zmienia się w firing i dopiero wtedy Prometheus wysyła go do Alertmanagera.
Czy pole for jest obowiązkowe?
Nie jest wymagane, ale bez niego alert uruchomi się przy pierwszym spełnieniu warunku. Przy metrykach podatnych na chwilowe skoki prowadzi to do fałszywych alarmów.
W jakim formacie podaje się czas w for?
W notacji czasu Prometheusa, na przykład 30s, 5m, 1h, 1d. Ta sama notacja obowiązuje w przedziałach funkcji rate(), takich jak [5m].
Jak przetestować wyrażenie PromQL przed zapisaniem reguły?
Wklej je w konsoli PromQL w interfejsie Prometheusa i sprawdź, czy zwraca serie czasowe oraz jakie wartości przyjmuje. Dopiero gdy wynik zachowuje się zgodnie z oczekiwaniem, zapisz regułę z tym samym progiem.