Monitoring sa Grafana i Prometheus — Kako Pratiti Server u Realnom Vremenu

Zamislite sledeći scenario: klijent vas zove u ponedeljak ujutro i kaže da mu sajt ne radi od subote u ponoć. Vi nemate pojma kada se problem desio, koji servis je pao i šta je bio uzrok. Sat vremena debugovanja kasnije, pronalazite da je disk bio pun — problem koji je lako rešiv, ali tek kada znate da postoji.

Ovaj scenario se dešava svakodnevno firmama koje nemaju uspostavljen monitoring. Grafana i Prometheus su industrijski standard za monitoring infrastrukture koji ovakve situacije čini istorijom.


Šta je Monitoring i Zašto je Kritičan?

Monitoring je kontinuirano prikupljanje, čuvanje i analiza metrika sistema — CPU, RAM, disk, mreža, vreme odgovora aplikacija, broj grešaka i stotine drugih parametara.

Bez monitoringa radite reaktivno — čekate da problem eskalira do tačke kada klijent ili korisnik javi. Sa monitoringom radite proaktivno — sistem vas upozori pre nego što problem postane vidljiv korisnicima.

Konkretne prednosti monitoringa:

Otkrivanje problema pre korisnika. Alert sistem vas budi u 3 ujutro kada CPU pređe 90% — ne klijent koji u 9 ujutro ne može da otvori aplikaciju.

Kapacitetno planiranje. Vidite trend rasta disk prostora i znate da za 3 meseca treba dodati storage — ne čekate da sistem padne zbog punog diska.

Performansna optimizacija. Identifikujete koje upite baza podataka oduzimaju najviše resursa i optimizujete ih.

Debugging. Kada se problem desi, imate istorijske podatke koji pokazuju tačno šta se dešavalo u sistemu u trenutku incidenta.

SLA praćenje. Dokazujete klijentima koliki je uptime sistema sa preciznim podacima, ne procenom.


Grafana i Prometheus — Ko je Ko?

Prometheus i Grafana se gotovo uvek pominju zajedno, ali to su dva odvojena alata sa različitim ulogama.

Prometheus — Prikupljanje i Čuvanje Metrika

Prometheus je open-source sistem za monitoring koji je originalno razvio SoundCloud 2012. godine, a danas ga održava Cloud Native Computing Foundation (CNCF) — ista organizacija koja stoji iza Kubernetes-a.

Prometheus funkcioniše na principu pull modela — sam povlači metrike sa ciljnih sistema u definisanim intervalima (obično svake 15-60 sekundi). Metrike se čuvaju u vremenskoj seriji (time-series) bazi podataka.

Svaka metrika u Promethesu ima:

  • Ime (npr. node_cpu_seconds_total)
  • Labels — key-value parovi koji omogućavaju filtriranje (npr. {instance="server1", job="node"})
  • Vrednost — numerička vrednost u datom trenutku
  • Timestamp — vreme uzorkovanja

Za pretragu i agregaciju metrika, Prometheus koristi sopstveni query jezik PromQL (Prometheus Query Language).

Grafana — Vizualizacija Podataka

Grafana je open-source platforma za vizualizaciju podataka. Sama po sebi ne prikuplja metrike — ona se povezuje na izvore podataka (Prometheus, InfluxDB, Elasticsearch, SQL baze i mnoge druge) i prikazuje ih u formi grafikona, tabela, heatmap-ova i drugih vizualizacija.

Grafana dashboardi su moćni alat — na jednom ekranu možete videti sve što je bitno: status svih servisa, opterećenje sistema, vreme odgovora aplikacija, broj grešaka u poslednjih sat vremena.


Arhitektura Monitoring Stack-a

Tipičan Prometheus + Grafana setup izgleda ovako:

[Serveri/Aplikacije] → [Exporteri] → [Prometheus] → [Grafana]
                                           ↓
                                     [Alertmanager] → [Email/Slack/PagerDuty]

Exporteri su mali programi koji „prevode“ metrike sistema u format koji Prometheus razume. Najvažniji exporteri:

  • Node Exporter — sistem metrike (CPU, RAM, disk, mreža) za Linux servere
  • MySQL Exporter — metrike MySQL/MariaDB baze podataka
  • Nginx Exporter — metrike Nginx web servera
  • Blackbox Exporter — provera dostupnosti URL-ova (HTTP, HTTPS, DNS, TCP)
  • cAdvisor — metrike Docker kontejnera

Alertmanager upravlja alertima — deduplikuje, grupiše i rutira notifikacije na email, Slack, PagerDuty i druge kanale.


Instalacija na Hetzner Serveru

Prikazaćemo kako da postavite kompletan monitoring stack na Hetzner VPS koristeći Docker Compose — najbrži i najlakši način.

Preduslovi

  • Hetzner VPS sa Ubuntu 22.04 (CX22 ili veći)
  • Docker i Docker Compose instalirani
  • Otvoreni portovi: 3000 (Grafana), 9090 (Prometheus)

Struktura Fajlova

/opt/monitoring/
├── docker-compose.yml
├── prometheus/
│   └── prometheus.yml
└── grafana/
    └── datasources/
        └── prometheus.yml

Docker Compose Konfiguracija

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=30d'
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/datasources:/etc/grafana/provisioning/datasources
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=vaša_lozinka
      - GF_USERS_ALLOW_SIGN_UP=false
    ports:
      - "3000:3000"
    depends_on:
      - prometheus

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($|/)'
    expose:
      - 9100

  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    restart: unless-stopped
    volumes:
      - ./alertmanager:/etc/alertmanager
    ports:
      - "9093:9093"

volumes:
  prometheus_data:
  grafana_data:

Prometheus Konfiguracija

# prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']
        labels:
          instance: 'hetzner-main'

  # Dodajte ostale servere
  - job_name: 'node-server2'
    static_configs:
      - targets: ['192.168.1.2:9100']
        labels:
          instance: 'server2'

Pokretanje

cd /opt/monitoring
docker-compose up -d

Grafana je dostupna na http://vaš-ip:3000 (admin / vaša_lozinka).


Podešavanje Grafana Dashboarda

Nakon prvog logina u Grafanu:

1. Dodajte Prometheus kao data source: Configuration → Data Sources → Add data source → Prometheus → URL: http://prometheus:9090

2. Importujte gotove dashboarde: Grafana ima bogatu biblioteku gotovih dashboarda na grafana.com/grafana/dashboards.

Najkoristniji dashboardi:

  • Node Exporter Full (ID: 1860) — kompletan pregled Linux servera
  • Docker and System Monitoring (ID: 893) — monitoring Docker kontejnera
  • Nginx (ID: 9614) — metrike Nginx web servera
  • MySQL Overview (ID: 7362) — monitoring MySQL baze

Import: Dashboards → Import → unesite ID → Load → Import


Korisni PromQL Upiti

PromQL je moćan jezik koji omogućava složene analize. Evo najkorisnijih upita:

CPU korišćenje po serveru:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Dostupan RAM (MB):

node_memory_MemAvailable_bytes / 1024 / 1024

Disk korišćenje (%):

100 - ((node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100)

Mrežni saobraćaj (MB/s):

rate(node_network_receive_bytes_total{device="eth0"}[5m]) / 1024 / 1024

Uptime servera:

node_time_seconds - node_boot_time_seconds

Podešavanje Alertova

Alertovi su možda najvažniji deo monitoring sistema. Bez alertova, podaci koje prikupljate su korisni samo za retrospektivnu analizu — ne za proaktivno reagovanje.

Primer konfiguracije alertova:

# prometheus/alerts.yml
groups:
  - name: server_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Visoko CPU opterećenje na {{ $labels.instance }}"
          description: "CPU je na {{ $value }}% već 5 minuta"

      - alert: DiskSpaceLow
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Malo slobodnog mesta na disku — {{ $labels.instance }}"
          description: "Ostalo je samo {{ $value }}% slobodnog prostora"

      - alert: ServerDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Server nedostupan: {{ $labels.instance }}"

Monitoring Više Servera

Jedna od najvećih prednosti Prometheus + Grafana stack-a je centralizovani monitoring svih servera sa jednog mesta.

Za svaki novi server:

  1. Instalirajte Node Exporter:
docker run -d \
  --name node-exporter \
  --restart unless-stopped \
  -p 9100:9100 \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  prom/node-exporter
  1. Dodajte server u prometheus.yml:
  - job_name: 'node-novi-server'
    static_configs:
      - targets: ['IP_NOVOG_SERVERA:9100']
        labels:
          instance: 'naziv-servera'
  1. Reload Prometheus konfiguracije:
curl -X POST http://localhost:9090/-/reload

Zaključak

Prometheus i Grafana su de facto standard za monitoring moderne IT infrastrukture. Implementacija je relativno jednostavna sa Docker Compose-om, a vrednost koju donose je ogromna — manje neplaniranih padova, brže rešavanje problema i bolji uvid u stanje sistema.

Za mala i srednja preduzeća u Srbiji, monitoring nije luksuz — to je osnova profesionalnog IT menadžmenta. Razlika između firme koja čuje za problem od klijenta i firme koja rešava problem pre nego što klijent primeti je upravo ovakav sistem.

DevTet implementira i održava Grafana/Prometheus monitoring kao deo naših upravljanih IT usluga. Ako ne želite da se bavite konfiguracijom i održavanjem, kontaktirajte nas i mi ćemo postaviti kompletan monitoring stack za vašu infrastrukturu.


DevTet pruža upravljane IT usluge, monitoring i cloud infrastrukturu za mala i srednja preduzeća u Srbiji. Pogledajte naše usluge.

DevTet Monitoring

Profesionalni monitoring bez glavobolje

Mi postavljamo i održavamo kompletan Prometheus + Grafana stack za vas. Vi dobijate dashboard i alarme — bez konfiguracije, bez održavanja. Od 49€/mes.

Pogledaj Monitoring uslugu →
Scroll to Top