🟡 Intermediate

Prometheus — Monitoring a Metriky

Prometheus je open-source monitoring systém a databáza časových radov (time-series), pôvodne vyvinutý v SoundCloud. Dnes je súčasťou Cloud Native Computing Foundation (CNCF) a de facto štandard pre monitoring v Kubernetes a cloud-native prostredí.


Prečo Prometheus?

  1. Pull model — Prometheus si sám sťahuje metriky z cieľov (targets), čo zjednodušuje konfiguráciu
  2. Výkonný dotazovací jazyk — PromQL umožňuje flexibilné analýzy a agregácie
  3. Nezávislosť — nevyžaduje externú databázu ani distribuovaný storage
  4. Service discovery — automaticky objavuje nové služby
  5. Bohatý ekosystém — stovky exporterov pre rôzne technológie
  6. Natívna integrácia — Grafana, Alertmanager, Kubernetes

Architektúra

Prometheus funguje na pull modeli — periodicky scrapuje HTTP endpointy (/metrics) svojich cieľov.

Hlavné komponenty:

  • Prometheus Server — jadro systému, scrapuje a ukladá metriky
  • TSDB (Time Series Database) — efektívne lokálne úložisko optimalizované na časové rady
  • Alertmanager — spracovanie a routovanie alertov (email, Slack, PagerDuty)
  • Pushgateway — pre krátkodobé joby, ktoré nemôžu byť scrapované
  • Exporters — zbierajú metriky z tretích strán a vystavujú ich v Prometheus formáte
┌──────────────┐     scrape      ┌──────────────┐
│  Targets     │ ◄────────────── │  Prometheus   │
│  /metrics    │                 │  Server       │
└──────────────┘                 │  ┌─────────┐  │
                                 │  │  TSDB   │  │
┌──────────────┐     push        │  └─────────┘  │
│  Pushgateway │ ◄────────────── │               │
└──────────────┘                 └───────┬───────┘
                                         │
                                    alerts│  queries
                                         │
                              ┌──────────┴──────────┐
                              │                      │
                       ┌──────▼──────┐       ┌───────▼──────┐
                       │ Alertmanager│       │   Grafana    │
                       └─────────────┘       └──────────────┘

Typy metrík

Prometheus pozná štyri základné typy metrík:

  • Counter — monotónne rastúca hodnota (napr. počet requestov) — http_requests_total
  • Gauge — hodnota, ktorá môže rásť aj klesať (napr. teplota, pamäť) — node_memory_available_bytes
  • Histogram — distribúcia hodnôt v bucketoch (napr. latencia) — http_request_duration_seconds
  • Summary — podobné histogramu, ale počíta quantily na strane klienta

PromQL — Basics

PromQL (Prometheus Query Language) je výkonný jazyk na dotazovanie time-series dát.

Základné dotazy:

# Aktuálna hodnota metriky
up

# Filtruj podľa labelov
http_requests_total{method="GET", status="200"}

# Rate — priemerná rýchlosť zmeny za posledných 5 minút
rate(http_requests_total[5m])

# Agregácie
sum(rate(http_requests_total[5m])) by (service)

# Top 5 služieb podľa CPU
topk(5, rate(container_cpu_usage_seconds_total[5m]))

Užitočné funkcie:

  • rate() — priemerná rýchlosť zmeny countera za interval
  • increase() — absolútny nárast countera za interval
  • histogram_quantile() — výpočet percentilov z histogramu
  • avg_over_time() — priemer za časové okno
  • absent() — detekcia chýbajúcich metrík (ideálne pre alerty)

Exporters

Exportery zbierajú metriky z existujúcich systémov a vystavujú ich vo formáte Prometheus.

Najpoužívanejšie:

  • node_exporter — systémové metriky (CPU, RAM, disk, sieť) pre Linux servery
  • cAdvisor — metriky Docker/Kubernetes kontajnerov (CPU, pamäť, I/O)
  • blackbox_exporter — probing externých endpointov (HTTP, DNS, TCP, ICMP)
  • mysqld_exporter — MySQL/MariaDB metriky
  • postgres_exporter — PostgreSQL metriky
  • redis_exporter — Redis metriky

Príklad konfigurácie node_exporter v prometheus.yml:

scrape_configs:
  - job_name: "node"
    static_configs:
      - targets: ["server1:9100", "server2:9100"]

Integrácia s Grafana a Alertmanager

Grafana

Grafana je štandardný vizualizačný nástroj pre Prometheus. Pripojenie:

  1. V Grafane pridaj Data Source → Prometheus
  2. URL: http://prometheus:9090
  3. Vytváraj dashboardy s PromQL dotazmi

Tip: Komunita ponúka hotové dashboardy na grafana.com/grafana/dashboards — napr. Node Exporter Full (ID: 1860).

Alertmanager

Alerty sa definujú v Prometheus pravidlách a posielajú do Alertmanagera:

# alert_rules.yml
groups:
  - name: instance
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Inštancia {{ $labels.instance }} je nedostupná"

Alertmanager potom routuje notifikácie podľa severity, tímu alebo služby do Slacku, emailu, PagerDuty atď.


Service Discovery

Prometheus podporuje automatické objavovanie cieľov — nemusíš manuálne udržiavať zoznam serverov.

Podporované mechanizmy:

  • kubernetes_sd — automaticky objavuje Pody, Service, Endpoints v K8s
  • consul_sd — integrácia s HashiCorp Consul
  • dns_sd — DNS-based discovery (SRV záznamy)
  • file_sd — JSON/YAML súbory s cieľmi (jednoduché, ale flexibilné)
  • ec2_sd / gce_sd — AWS EC2 a GCP inštancie

Príklad Kubernetes SD:

scrape_configs:
  - job_name: "kubernetes-pods"
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true

Best Practices

  • Používaj labels konzistentneservice, env, region na každej metrike
  • Nepoužívaj vysokú kardinalitu — vyhýbaj sa labelom s tisíckami unikátnych hodnôt (user ID, request ID)
  • Rate pred sum — vždy sum(rate(...)), nikdy rate(sum(...))
  • Recording rules — predpočítaj drahé dotazy pre dashboardy
  • Retention — default 15 dní; pre dlhodobé úložisko použi Thanos alebo Cortex
  • Relabeling — filtruj a transformuj labels pri scrape, nie v PromQL
  • Federation — pre veľké prostredia použi hierarchickú federáciu
  • Monitoruj Prometheus samotnýprometheus_tsdb_* metriky

Quick Reference

Čo Príkaz / Konfigurácia
Spustenie Prometheus docker run -p 9090:9090 -v ./prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Spustenie node_exporter docker run -p 9100:9100 --pid=host --net=host prom/node-exporter
Scrape interval global: { scrape_interval: 15s }
Status cieľov http://prometheus:9090/targets
Všetky UP inštancie up == 1
Request rate rate(http_requests_total[5m])
99. percentil latencie histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
Alert na výpadok up == 0 pre for: 5m
Veľkosť TSDB prometheus_tsdb_storage_size_bytes
Reload konfigurácie curl -X POST http://prometheus:9090/-/reload

Prometheus je základ observability stacku. V kombinácii s Grafanou a Alertmanagerom poskytuje kompletný monitoring pre akúkoľvek infraštruktúru.