Monitoring z Prometheus, Loki i Grafana — stack obserwowalności w Docker Compose

Wdrożyłem pełny stack monitoringu: Prometheus zbiera metryki, Loki agreguje logi, Grafana wizualizuje wszystko. Opisuję konfigurację i gotowe dashboardy.

Trzy filary obserwowalności

Pełna obserwowalność systemu wymaga trzech typów danych:

  • Metryki — liczby w czasie: CPU, pamięć, liczba requestów, czas odpowiedzi (Prometheus)
  • Logi — tekstowe rekordy zdarzeń (Loki + Promtail)
  • Traces — śledzenie konkretnego requestu przez wiele serwisów (nie wdrożone jeszcze)

Prometheus — zbieranie metryk

Prometheus scrape-uje metryki z endpointów HTTP /metrics. Traefik i Laravel eksponują je automatycznie.

Konfiguracja scrapowania:

# infra/prometheus/prometheus.yml
scrape_configs:
  - job_name: traefik
    static_configs:
      - targets: ['traefik:8080']
    metrics_path: /metrics

  - job_name: frontend
    static_configs:
      - targets: ['frontend-nginx:9113']

Dla PHP/Laravel używam nginx-prometheus-exporter jako sidecar, który czyta status Nginx i eksponuje metryki w formacie Prometheusa.

Loki + Promtail — agregacja logów

Zamiast docker logs (które znikają po restarcie kontenera), loguję przez Promtail → Loki.

Wszystkie serwisy PHP mają ustawione LOG_CHANNEL=stderr — logi lecą do stdout kontenera, Promtail je zbiera:

# infra/promtail/promtail.yml
scrape_configs:
  - job_name: containers
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
    relabel_configs:
      - source_labels: [__meta_docker_container_name]
        target_label: container

Grafana — dashboardy

Stworzyłem trzy dashboardy:

1. Infrastructure Overview

  • CPU i RAM per kontener
  • Network I/O
  • Liczba aktywnych kontenerów

2. Laravel Application

  • Requesty HTTP per minutę (przez logi Nginx)
  • Response time (p50, p95, p99)
  • Error rate (5xx)
  • Cache hit rate Redis

3. RabbitMQ

  • Liczba wiadomości w kolejkach
  • Consumer throughput
  • Dead-letter queue size

Alerty (TODO)

Grafana pozwala ustawiać alerty na podstawie zapytań PromQL. Planowane alerty:

  • Error rate > 5% przez 5 minut
  • Pod restart count > 3
  • Queue depth > 1000 wiadomości
  • Czas odpowiedzi p95 > 2 sekundy

Na razie monitoring działa "read-only" — obserwuję, nie alarmuje. To jedno z zadań do zrealizowania przed pełnym deployem produkcyjnym.

Comments

No comments yet