Pokud si nejste jistí, co vlastně Prometheus a Grafana jsou, přečtěte si náš článek o Prometheus vs Grafana. Pokud rozdíl už znáte, tady je návod, jak je provozovat společně.
Tento článek je praktickým doplňkem. Nasazuje Prometheus, Grafanu a Node Exporter na jediný VPS pomocí Docker Compose, staví před Grafanu HTTPS přes Caddy, importuje dashboard Node Exporter Full (ID 1860) a ukazuje, jak sbírat metriky z druhého VPS přes WireGuard.
Původní test z dubna 2026 běžel na Ubuntu 24.04 LTS s Docker Engine 27.x a Docker Compose v2.30. Verze zafixované v konfiguraci níže byly mezitím aktualizovány na aktuálně podporovaná vydání. V onom původním testu s pěti hosty spotřeboval hub zhruba 300 MB RAM v nečinnosti a 530 až 650 MB při průběžném sběru metrik.
Stručně
- Hub VPS provozuje Prometheus, Grafanu a Node Exporter v jednom Compose stacku, přičemž Caddy je nainstalovaný přímo na hostiteli jako reverzní proxy.
- Prometheus a Grafana naslouchají pouze na 127.0.0.1. Veřejný přístup vede přes Caddy s automatickým HTTPS.
- Další servery přidáte tak, že na každý nainstalujete Node Exporter a doplníte záznamy do
prometheus.yml. - WireGuard je doporučená síťová cesta mezi hubem a uzly. Privátní síť funguje dobře, pokud vaše servery už sdílejí privátní síť.
- Pro test s pěti hosty níže stačil VPS s 2 GB, berte to ale jako výchozí referenci, ne jako pevné pravidlo podle počtu hostů.
Co budete stavět
Takto bude sestava zhruba vypadat, až budete hotoví.
+-------------------+
| Your laptop |
+---------+---------+
| HTTPS
v
+--------------------------+----------------------------+
| MONITORING HUB VPS (2 GB RAM starting point) |
| Caddy (reverse proxy, auto HTTPS) |
| Grafana (port 3000, only via Caddy) |
| Prometheus (port 9090, internal only) |
| Node Exporter (port 9100, scraped on localhost) |
+----+---------------------------------+----------------+
| |
| scrape over WireGuard | scrape over WG
v v
+----+--------+ +-----+-------+
| App VPS 1 | | App VPS 2 |
| Node Expo. | | Node Expo. |
+-------------+ +-------------+
Celý monitorovací stack drží jediný hub VPS. Na každém dalším VPS, který chcete sledovat, běží jen Node Exporter. Prometheus na hubu si z každého stahuje metriky, Grafana je vykresluje a Caddy se stará o HTTPS.
Co budete potřebovat
Přesně pro tuto sestavu potřebujete jeden VPS s Ubuntu jako hub, doménu a přístup přes sudo.
- VPS s alespoň 2 GB RAM a systémem Ubuntu 24.04 LTS.
- Doménové jméno s A záznamem směřujícím na veřejnou IP adresu VPS (například grafana.example.com). Pro HTTPS je nezbytné.
- Přístup root nebo sudo přes SSH.
V celém návodu nahrazujte grafana.example.com subdoménou, kterou jste skutečně nasměrovali na svůj monitorovací VPS. Stejnou doménu použijte v proměnné prostředí Grafany, při kontrole DNS i v Caddyfile.
Pokud chcete sledovat jen jeden server a HTTPS zatím nepotřebujete, můžete Compose stack spustit na svém stávajícím VPS bez části o reverzní proxy. Zbytek návodu platí i tak.
Spusťte Ubuntu VPS okamžitě s root přístupem a NVMe úložištěm.
Nasadit Ubuntu VPSKrok 1: Příprava serveru
Přihlaste se přes SSH na hub VPS uživatelem s právy sudo. Nejdřív spusťte aktualizaci systému.
sudo apt update && sudo apt upgrade -y
Nainstalujte Docker Engine a plugin Compose z oficiálního repozitáře Dockeru.
# Install prerequisites
sudo apt install -y ca-certificates curl gnupg lsb-release
# Add Docker's official GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Ověřte, že jsou obě nainstalované.
docker --version
docker compose version
Oba příkazy by měly bez chyby vypsat verzi. Konkrétní verze Docker Engine a Compose závisí na tom, co oficiální repozitář nabízí v době instalace.
sudo usermod -aG docker $USER
Než budete pokračovat, odhlaste se a přihlaste znovu, aby se nové členství ve skupině projevilo. Skupina docker fakticky uděluje oprávnění na úrovni roota, přidávejte do ní tedy jen důvěryhodné administrátory.
Nastavte UFW tak, aby na monitorovacím hubu povolil SSH, HTTP a HTTPS. Port 80 obstarává přesměrování z HTTP na HTTPS a ověření ACME. Samotná Grafana zůstává za Caddy.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
Neotevírejte porty 3000, 9090 ani 9100 do veřejného internetu. Monitorovací služby naslouchají na 127.0.0.1 z dobrého důvodu.
Krok 2: Compose stack
Vytvořte adresář pro stack a konfiguraci Prometheu.
mkdir -p ~/monitoring/prometheus
cd ~/monitoring
Napište soubor Compose.
# ~/monitoring/docker-compose.yml
services:
prometheus:
image: prom/prometheus:v3.13.2
container_name: prometheus
restart: unless-stopped
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.enable-lifecycle'
- '--web.listen-address=127.0.0.1:9090'
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
network_mode: host
node-exporter:
image: prom/node-exporter:v1.12.1
container_name: node-exporter
restart: unless-stopped
pid: host
network_mode: host
command:
- '--path.rootfs=/host'
- '--web.listen-address=127.0.0.1:9100'
- '--collector.filesystem.mount-points-exclude=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($$|/)'
volumes:
- '/:/host:ro,rslave'
grafana:
image: grafana/grafana:13.1.3
container_name: grafana
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_ROOT_URL=https://grafana.example.com
- GF_SERVER_HTTP_ADDR=127.0.0.1
volumes:
- grafana_data:/var/lib/grafana
network_mode: host
depends_on:
- prometheus
volumes:
prometheus_data:
grafana_data:
Nyní napište konfiguraci Prometheu.
# ~/monitoring/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'monitoring-hub'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node'
static_configs:
- targets: ['127.0.0.1:9100']
labels:
host: 'monitoring-hub'
Vytvořte soubor .env s heslem administrátora Grafany. Použijte silné heslo a tento soubor necommitujte do gitu.
cat > ~/monitoring/.env <<'EOF'
GRAFANA_ADMIN_PASSWORD='replace-with-a-strong-password'
EOF
chmod 600 ~/monitoring/.env
Několik voleb výše si zaslouží krátké vysvětlení.
--web.listen-address=127.0.0.1:9090přiměje Prometheus naslouchat jen na loopback rozhraní hostitele. Port 9090 tak zůstane mimo veřejnou síť, ale Grafana i lokální správa se k němu dostanou.--web.enable-lifecyclezapínáPOST /-/reload, takže můžete změny konfigurace Prometheu použít bez restartu kontejneru.pid: host,network_mode: host, bind mount kořene hostitele a--path.rootfs=/hostdávají Node Exporteru v kontejneru potřebný kontext hostitele místo toho, aby sledoval jen vlastní kontejnerové prostředí.GF_USERS_ALLOW_SIGN_UP=falsebrání návštěvníkům vytvořit si vlastní účet v Grafaně. Grafanu to ale nedělá privátní: přihlašovací stránka je přes Caddy stále veřejně dostupná.
Tip: Pokud se chcete ruční instalaci vyhnout, Cloudzy nabízí nasazení na jedno kliknutí pro Grafana a Prometheus . Nasazení Prometheu umí nainstalovat i Node Exporter.
Krok 3: První spuštění a ověření
Spusťte stack.
cd ~/monitoring
docker compose up -d
Počkejte pár sekund a pak zkontrolujte, že běží všechny tři kontejnery.
docker compose ps
Všechny tři služby by měly hlásit stav running.
Otevřete si z notebooku SSH tunel a zkontrolujte stránku s cíli Prometheu.
ssh -L 9090:localhost:9090 your-user@your-vps-ip
Poté v prohlížeči otevřete http://localhost:9090/targets. Měli byste vidět dva cíle, oba ve stavu UP:
prometheus UP http://127.0.0.1:9090/metrics
node UP http://127.0.0.1:9100/metrics
Pokud je některý DOWN, přejděte na sekci Časté problémy. Nepokračujte, dokud nejsou oba UP.
Až cíle zkontrolujete, tunel zavřete. Zvenčí zůstane Prometheus dostupný jen přes tento SSH tunel. Další krok zpřístupní Grafanu přes HTTPS.
Krok 4: Reverzní proxy s HTTPS pomocí Caddy
Caddy je jediná binárka a HTTPS řeší automaticky. Pro reverzní proxy s jedním webem je jeho konfigurace kratší než odpovídající blok v Nginxu.
Nainstalujte Caddy z oficiálního repozitáře.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | \
sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \
sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy
Před dalším krokem ověřte, že DNS A záznam pro grafana.example.com míří na veřejnou IP adresu VPS. Bez toho ověření ACME selže.
dig +short grafana.example.com
# Should print the VPS public IP
Upravte Caddyfile.
# /etc/caddy/Caddyfile
grafana.example.com {
reverse_proxy 127.0.0.1:3000
encode gzip
}
Znovu načtěte Caddy.
sudo systemctl reload caddy
Jakmile doména míří na váš server a porty 80 a 443 jsou dostupné, Caddy si přes ACME automaticky obstará a obnovuje veřejně důvěryhodné TLS certifikáty. Otevřete v prohlížeči https://grafana.example.com: měli byste vidět přihlašovací stránku Grafany přes platné HTTPS spojení. Přihlaste se jako admin heslem ze souboru .env.
Krok 5: Přidejte Prometheus jako zdroj dat a naimportujte dashboard 1860
V rozhraní Grafany přejděte na Připojení > Zdroje dat > Přidat zdroj dat a zvolte Prometheus.
Nastavte URL na:
http://127.0.0.1:9090
V této sestavě sdílejí Grafana a Prometheus síť hostitele, přičemž Prometheus naslouchá jen na loopbacku. Klikněte na Save & test a ověřte, že Grafana dokáže dotazovat Prometheus API. Měla by se objevit hláška „Successfully queried the Prometheus API".
Teď naimportujte dashboard. Node Exporter Full (ID 1860 od rfmoz) je hojně používaný komunitní dashboard pro metriky Node Exporteru. Pokrývá CPU, paměť, diskové I/O, síť, souborové deskriptory a teploty hardwaru, pokud je hostitel vystavuje. Obsahuje také proměnné job a instance, takže v režimu hub-and-spoke funguje bez úprav.
Jdi na Dashboardy > Nový > Importovat dashboard, zadejte ID dashboardu 1860, vyberte svůj zdroj dat Prometheus a naimportujte jej.
Dashboard by se měl naplnit, jakmile je váš Node Exporter cíl ve stavu UP. Dashboard 1860 navíc u některých panelů využívá metriky z volitelných kolektorů systemd a processes, takže jeden prázdný panel ještě neznamená, že je cíl rozbitý.
Krok 6: Přidejte druhý VPS (hub-and-spoke)
Než Node Exporter spustíte, ujistěte se, že privátní IP adresa, na kterou ho chcete navázat, na druhém VPS už existuje. Pokud používáte WireGuard, dokončete nejdřív jeho nastavení.
Na druhém VPS nainstalujte Docker podle části o instalaci Dockeru z kroku 1, ale neotevírejte porty 80 ani 443 jen kvůli monitoringu. Pak spusťte samotný Node Exporter.
mkdir -p ~/node-exporter
cd ~/node-exporter
cat > docker-compose.yml <<'EOF'
services:
node-exporter:
image: prom/node-exporter:v1.12.1
container_name: node-exporter
restart: unless-stopped
pid: host
command:
- '--path.rootfs=/host'
- '--web.listen-address=10.10.0.2:9100' # bind to the private monitoring IP, never 0.0.0.0
volumes:
- '/:/host:ro,rslave'
network_mode: host
EOF
docker compose up -d
Nahraďte 10.10.0.2 privátní monitorovací IP adresou tohoto serveru. Používáte-li WireGuard, použijte jeho WireGuard IP; při privátní síti Cloudzy použijte IP privátního rozhraní VPS. Pokud je na tomto VPS už aktivní UFW, povolte přístup k Node Exporteru jen monitorovacímu hubu. Například když je privátní IP hubu 10.10.0.1:
sudo ufw allow proto tcp from 10.10.0.1 to any port 9100
sudo ufw status
Nahraďte 10.10.0.1 skutečnou privátní IP adresou hubu. Pokud je UFW vypnutý, explicitní --web.listen-address sice drží Node Exporter mimo veřejné rozhraní, ale ostatní stroje, které se do té privátní sítě dostanou, se mohou dostat i na port 9100.
Dvě dobré varianty síťové cesty mezi hubem a uzly:
- Síť WireGuard. Každý VPS se připojí do sítě WireGuard a Prometheus sbírá metriky z privátních IP adres. Po počátečním nastavení WireGuardu je to nejbezpečnější varianta. Nabízíme WireGuard jako nasazení na jedno kliknutí a máme také existující návod na nastavení k němu.
- Privátní síť Cloudzy. Instance VPS od Cloudzy ve stejném regionu dostávají privátní rozhraní pro provoz mezi servery, takže můžete sbírat metriky rovnou z této adresy místo stavění samostatného WireGuard tunelu.
Jakmile Node Exporter na druhém VPS běží a je dostupný na své privátní IP, nahraďte stávající job node v souboru prometheus.yml na hubu blokem uvedeným níže.
# Update the existing 'node' job in ~/monitoring/prometheus/prometheus.yml
- job_name: 'node'
static_configs:
- targets: ['127.0.0.1:9100']
labels:
host: 'monitoring-hub'
- targets: ['10.10.0.2:9100']
labels:
host: 'app-vps-1'
tier: 'production'
Znovu načtěte Prometheus bez restartu kontejneru.
curl -X POST http://localhost:9090/-/reload
Znovu otevřete SSH tunel z kroku 3 a přejděte na http://localhost:9090/targets. Nový cíl by se měl objevit jako UP. Otevřete dashboard Node Exporter Full, přepněte proměnnou instance nahoře na nový server a měly by se ukázat jeho grafy.
Spotřeba zdrojů a kdy navýšit výkon
Tato čísla pocházejí z původního testu z dubna 2026 na VPS s Ubuntu a 2 GB paměti při pěti sledovaných hostech. Berte je jako referenci pro tuto zátěž, ne jako pevnou záruku dimenzování pro novější vydání.
| Součást | RAM v klidu | RAM při provozu (1 host) | RAM při 5 hostech | Disk (retence 15 dní, 5 hostů) |
|---|---|---|---|---|
| Prometheus | ~100 MB | ~150 MB | ~250-350 MB | ~500 MB až 1,5 GB |
| Grafana | ~150 MB | ~180 MB | ~200 MB | ~50 MB |
| Node Exporter | ~15 MB | ~20 MB | nerelevantní | zanedbatelné |
| Caddy | ~30 MB | ~40 MB | ~40 MB | nerelevantní |
| Hub celkem | ~300 MB | ~390 MB | ~530-650 MB | ~1,5 GB pracovní sady |
Navyšte výkon, jakmile hubu začne docházet paměť nebo místo na disku. Samotný počet hostů je špatné vodítko pro dimenzování, protože spotřebu mění kardinalita řad, zapnuté kolektory, interval sběru i doba retence. Pro dlouhodobější centrální úložiště podporuje Prometheus integrace se vzdálenými úložišti. VictoriaMetrics je jednou z variant kompatibilních s Prometheem.
Časté problémy
Sedm nejčastějších problémů i s řešením.
- Prometheus je dostupný z veřejného internetu. Prosté mapování portu 9090:9090 vystaví Prometheus celému světu. Řešení: ponechte
--web.listen-address=127.0.0.1:9090v příkazu Prometheu tak, jak je uvedeno výše. Prometheus pak naslouchá jen na loopback rozhraní hostitele. - Zdroj dat v Grafaně se nedostane na Prometheus. Tento stack používá síť hostitele, takže Grafana se na Prometheus dostane na http://127.0.0.1:9090. Ověřte, že Prometheus běží a stále naslouchá na loopbacku.
- Dashboard Node Exporteru ukazuje „No data". Tři obvyklé příčiny. (a) Prometheus cíl nesbírá. Zkontrolujte
/targets. (b) Popisek job v proměnné dashboardu neodpovídájob_nameve scrape konfiguraci. (c) Firewall blokuje port 9100 mezi hubem a cílem. - Heslo administrátora Grafany je pořád
admin/admini v produkci. NastavitGF_SECURITY_ADMIN_PASSWORDze souboru .env ještě před prvním spuštěním. Pokud jste to zmeškali, změňte heslo při prvním přihlášení a vypněte registrace. - Caddy hlásí „ACME challenge failed". DNS A záznam se ještě nerozšířil, nebo je blokovaný port 80. Spusťte
ufw allow 80,443/tcp, počkejte na DNS a spusťtesudo systemctl reload caddy. Použijtedig +shortk ověření propagace. - Disk Prometheu se plní. Popisky s vysokou kardinalitou nebo krátké intervaly sběru u mnoha hostů dokážou svazek rychle zaplnit. Sledujte
prometheus_tsdb_head_seriesa velikost svazku. Řešení: vypněte nepoužívané kolektory Node Exporteru, prodlužtescrape_intervalna 30s nebo zkraťte retenci. - Chyby oprávnění u bind mountů. Pokud připojíte adresář hostitele místo pojmenovaného svazku, potřebuje UID kontejneru (65534 pro Prometheus, 472 pro Grafanu) právo zápisu. Pojmenované svazky, jako v Compose souboru výše, se tomuhle vyhnou.
Kdy je tento stack zbytečně velký
Pokud chcete jen upozornění, když URL přestane odpovídat, je tento stack zbytečně velký. Uptime Kuma je mnohem lehčí volba, pokud vám stačí základní kontroly dostupnosti.
Časté dotazy
Jaký je rozdíl mezi Prometheem a Grafanou?
Prometheus je databáze časových řad: v intervalu, který nastavíte, sbírá metriky z nakonfigurovaných cílů, ukládá je na disk a odpovídá na dotazy v PromQL. Grafana je vizualizační vrstva, která se připojí k Prometheu (a k mnoha dalším zdrojům dat) a vykresluje dashboardy. Téměř vždy chcete obojí: Prometheus pro sběr a ukládání, Grafanu pro zobrazení.
Kolik RAM potřebuje sestava Prometheus + Grafana?
Monitorovací hub, na kterém na jednom VPS běží Prometheus, Grafana, Node Exporter a reverzní proxy, spotřebuje zhruba 300 MB RAM v nečinnosti a 530 až 650 MB, když aktivně sbírá z pěti hostů v patnáctisekundovém intervalu.
Můžu sledovat víc serverů jednou instancí Grafany?
Ano. Standardní vzor je hub-and-spoke. Jediná instance Prometheu na hub VPS sbírá metriky z Node Exporteru běžícího na každém dalším serveru, který chcete sledovat. Grafana na hubu se dotazuje jen tohoto jednoho Prometheu. Dashboard Node Exporter Full (ID 1860) nabízí proměnnou instance, takže mezi servery přepínáte z jednoho dashboardu.
Který dashboard v Grafaně je pro Node Exporter nejlepší?
Pro tuto sestavu je Node Exporter Full (dashboard ID 1860 od rfmoz) velmi dobrá výchozí volba. Pokrývá hlavní hostitelské metriky Node Exporteru a podporuje proměnné job a instance pro sledování více serverů. Některé panely závisejí na volitelných kolektorech Node Exporteru, takže jeden prázdný panel neznamená, že je cíl sběru rozbitý.
Jak zpřístupnit Grafanu přes HTTPS?
Spusťte Grafanu navázanou na 127.0.0.1:3000 a před ni postavte reverzní proxy, která se postará o HTTPS. Nejjednodušší je Caddy: čtyřřádkový Caddyfile s reverse_proxy 127.0.0.1:3000 a blokem domény zvládne všechno včetně automatické správy TLS certifikátů.
Jsou Prometheus + Grafana zdarma pro komerční použití?
Prometheus je licencován pod Apache 2.0. Grafana OSS je pod AGPLv3. Interní i komerční použití neupravené Grafana OSS je povolené, ale její úprava, distribuce nebo poskytování upravené verze po síti může podle AGPL založit povinnost sdílet zdrojový kód. Grafana Enterprise a Grafana Cloud mají samostatné komerční podmínky.
Kdy přejít z Prometheu na VictoriaMetrics?
O VictoriaMetrics uvažujte ve chvíli, kdy delší retence, vysoká kardinalita řad nebo více instancí Prometheu ztěžují provoz lokální TSDB Prometheu v rámci paměťového a diskového rozpočtu vašeho serveru. VictoriaMetrics umí přijímat data z Prometheu a vystavuje dotazovací API kompatibilní s Prometheem, takže může sloužit jako dlouhodobé úložiště nebo jako metrikový backend pro Grafanu. Otestujte ji na vlastní zátěži místo přechodu při pevné hranici RAM.
