Grafana + Prometheus — monitoring serwera VPS
Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Monitoring
Dowiadujesz się o problemie od użytkownika? Za późno. Profesjonalne monitorowanie VPS to Prometheus zbierający metryki co 15 sekund i Grafana wyświetlająca dashboardy w czasie rzeczywistym. Gdy CPU przekroczy 90% lub dysk zapełni się w 80% — dostajesz alert zanim cokolwiek się zepsuje. Oto jak to skonfigurować w 30 minut.
Architektura stacku
Trzy komponenty współpracują razem:
- node_exporter — agent na każdym serwerze, zbiera metryki systemu, wystawia
na
:9100/metrics - Prometheus — scrapuje node_exporter co 15s, przechowuje dane w time-series
DB, wystawia
:9090 - Grafana — łączy się z Prometheus, wyświetla dashboardy i zarządza alertami,
wystawia
:3000
Instalacja node_exporter
# Pobierz najnowszą wersję
NODE_EXPORTER_VERSION="1.7.0"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
tar xzf node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64/node_exporter /usr/local/bin/
# Utwórz użytkownika systemowego
sudo useradd --no-create-home --shell /bin/false node_exporter
# Plik systemd
sudo tee /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
# Sprawdź czy działa
curl -s http://localhost:9100/metrics | head -20 Instalacja Prometheus
PROMETHEUS_VERSION="2.50.0"
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
tar xzf prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
sudo mv prometheus-${PROMETHEUS_VERSION}.linux-amd64/{prometheus,promtool} /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus # /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s # Zbieraj metryki co 15 sekund
evaluation_interval: 15s # Sprawdzaj reguły alertów co 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- "alerts/*.yml"
scrape_configs:
# Sam Prometheus
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Metryki systemu Linux
- job_name: 'node'
static_configs:
- targets:
- 'localhost:9100' # Ten sam serwer
- '10.0.0.11:9100' # Drugi serwer (jeśli masz)
labels:
environment: 'production' # /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=15d \
--web.listen-address=127.0.0.1:9090
[Install]
WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable --now prometheus # Sprawdź targets w UI # Otwórz przez SSH tunnel: ssh -L 9090:localhost:9090 user@serwer # Wejdź na http://localhost:9090/targets — oba targety powinny być UP
Instalacja Grafana
sudo apt-get install -y apt-transport-https software-properties-common wget -q -O - https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list sudo apt-get update && sudo apt-get install grafana sudo systemctl enable --now grafana-server
Grafana działa na porcie 3000. Po pierwszym zalogowaniu (admin/admin — zmień hasło!) dodaj
data source:
Configuration → Data Sources → Add data source → Prometheus. URL: http://localhost:9090. Kliknij Save & Test.
Dashboard Node Exporter Full
Zamiast budować dashboard od zera, zaimportuj gotowy "Node Exporter Full" (ID: 1860 w Grafana.com). Zawiera wszystkie kluczowe metryki systemu: CPU, RAM, dysk, sieć, load average, temperatura. Import: Dashboards → Import → 1860 → Load.
Alerting — powiadomienia gdy coś się dzieje
# /etc/prometheus/alerts/node.yml
groups:
- name: node_alerts
rules:
# Alert gdy CPU > 90% przez 5 minut
- alert: HighCPU
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Wysokie użycie CPU na {{ $labels.instance }}"
description: "CPU: {{ $value | printf \"%.1f\" }}%"
# Alert gdy dysk > 85% zajęty
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 1m
labels:
severity: critical
annotations:
summary: "Mało miejsca na dysku: {{ $labels.instance }}"
# Alert gdy RAM < 10% wolnego
- alert: LowMemory
expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 < 10
for: 5m
labels:
severity: warning
annotations:
summary: "Mało pamięci RAM: {{ $labels.instance }}" Alerty możesz też konfigurować bezpośrednio w Grafanie (Alerting → Alert rules) — łatwiejsze UI, powiadomienia przez email, Slack, PagerDuty, Telegram bez dodatkowego Alertmanagera.