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:
- 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
- Dodajte server u
prometheus.yml:
- job_name: 'node-novi-server'
static_configs:
- targets: ['IP_NOVOG_SERVERA:9100']
labels:
instance: 'naziv-servera'
- 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 →