W poprzednim wpisie [TUTAJ] wspominałem co to jest Prometheus do czego służy itd. W tym poście zobaczysz jak skonfigurować w Prometheus alerty oraz jak zintegrować go z Grafaną w której możesz również wizualizować dane jak i konfigurować alerty. Sam post będzie bardzo krótki i większość wpisu to będzie kod oraz screen shoty.
Na początku chciałbym Cię uprzedzić przed jednym. Z tego wpisu nie poznasz wielu aspektów Prometheusa czy Grafany. Przedstawiam tylko podstawy które są punktem wyjścia do dalszej nauki. 🙂
Cały kod możesz znaleźć [TUTAJ].
Prometheus alerty
W skrócie alert będzie sprawdzał czy instancja nginxa żyję. Gdy wykryje błąd wyśle informacje do alertmanagera a on wyślę maila.
Zacznijmy od modyfikacji dockera i postawienia alertmanagera.
services:
prometheus:
image: bitnami/prometheus
ports:
- '9090:9090'
volumes:
- '.docker/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yml'
- '.docker/prometheus/prometheus.rules.yaml:/etc/prometheus/prometheus.rules.yml'
alertmanager:
image: bitnami/alertmanager:0.24.0
volumes:
- '.docker/prometheus/alertmanager.yaml:/opt/bitnami/alertmanager/conf/config.yml'
ports:
- '9093:9093'
depends_on:
- prometheus
links:
- mailer
Przyszła pora na samą konfigurację w Prometheus.
global:
scrape_interval: 10s
evaluation_interval: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093'
rule_files:
- '/etc/prometheus/prometheus.rules.yml'
scrape_configs:
- job_name: 'prometheus_master'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'nginx_status'
metrics_path: '/metrics'
static_configs:
- targets: ['nginx-exporter:9113']
Względem poprzedniego wpisu w konfiguracji znalazła się informacja skąd pobierać reguły alertów (rule_files) oraz pod jakim adresem znajduję się alertmanager (alerting).
groups:
- name: Nginx instance is health
rules:
- alert: NginxInstanceUp
expr: nginx_up == 0
for: 10s
labels:
severity: critical
annotations:
summary: Nginx instance up
Konfiguracja reguł znajdująca się powyżej jest bardzo intuicyjna więc pominę jej omawianie. Aby wszystko zaczęło działać pozostała nam konfiguracja alertmanagera która na pierwszy rzut oka nie jest do końca jasna. Całość została opisana w samym pliku poniżej.
global:
smtp_smarthost: 'mailer:1025'
smtp_from: 'prometheus@lukaszstaniszewski.pl'
resolve_timeout: '5m'
http_config:
follow_redirects: true
smtp_require_tls: false
# Konfiguracja wywoływania alertów
route:
group_by: [ 'alertname' ]
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'team-it-mails'
routes:
- matchers:
- 'alertname="NginxInstanceUp"'
- 'severity="critical"'
receiver: 'team-it-mails'
# Służy do wyciszania alertów jeżeli trafiają identyczne
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal:
- 'alertname'
- 'job'
- 'instance'
# Docelowe miejsce
receivers:
- name: 'team-it-mails'
email_configs:
- to: 'it@lukaszstaniszewski.pl'
templates: []
Voilà wszystko już działa, wystarczy że wyłączysz nginxa a po chwili na mailu (w tym przypadku mailcatcher) znajdzie się alert.

Integracja z Grafana
Prometheus ma swój system do wizualizacji danych ale w mojej opinii jest bardzo słaby dlatego nie będę go omawiać.
Tak samo jak w poprzednim wpisie przedstawię Ci tutaj tylko docker-compose dla Grafany.
services:
grafana:
image: grafana/grafana:9.3.2
ports:
- '3000:3000'
volumes:
- 'grafana_local:/var/lib/grafana'
links:
- prometheus
Samo postawienie Grafany jest banalne, wystarczy uruchomić kontener i gotowe.
PS dane do logowania to admin/admin. 🙂
Teraz możemy przejść do konfigurowania źródła danych. Ta konfiguracja jest bardzo prosta ponieważ działa w obrębie sieci itd. więc pominąłem kwestie autoryzacji.

W momencie jak mamy już źródło danych możemy skonfigurować wykresy.

I to wszystko, teraz już tylko zostało żebyś poświęcił/-a wiele godzin na zabawę z różnymi danymi, sposobem konfiguracji wykresu itd. itd. 🙂
A może alerty z Grafany?
Według mnie jedyną różnicą jest wygoda tworzenia. W przypadku Grafany mamy wygodny interfejs użytkownika oraz możliwość testowania bez przeładowywania konfiguracji. Sama konfiguracja notyfikacji jest podobna jak w Prometheus ale prawie wszystko jest konfigurowalne z poziomu UI (User Interface).
Konfiguracja alertów na przestrzeni lat się bardzo rozbudowała i sam temat nadaję się na osobny wpis.
Warto zwrócić uwagę na to że po skonfigurowaniu źródła Grafana wyświetla wszystkie alerty które masz skonfigurowne w Prometheus. 🙂 Znajdziesz w nich m.in. poziom błędu, opis, wykres z wstępowaniem błędu czy warunek który decyduje o wszczęciu alarmu.
Podsumowanie
Jak widzisz Grafana to potężne narzędzie do wizualizacji danych. Jeżeli chodzi o same alerty nie ma większej różnicy co wybierzesz. Jeżeli stawiasz Grafane według mnie pójdź w stronę jej alertów. W przypadku gdybyś chciał/-a dla samych alertów stawiać Grafane to lepiej wykorzystać te wbudowane w Prometheusa.
Źródła: