lukaszstaniszewski.pl

blog programistyczny

lukaszstaniszewski.pl

blog programistyczny

Prometheus – alerty oraz integracja z grafana

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.

email z alertmanager

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.

przykładowa konfiguracja źródła

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

konfiguracja wykresu

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:

Prometheus – alerty oraz integracja z grafana
Przewiń na górę