Netdata — real-time monitoring VPS z alertami i streaming
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS
Monitoring serwera to must-have w każdym środowisku produkcyjnym. Problem ze stosem Prometheus + Alertmanager + Grafana jest taki, że jego konfiguracja od zera zajmuje godziny. Netdata to inne podejście: instalujesz jeden pakiet i w ciągu 30 sekund masz setki metryk (CPU, RAM, sieć, dysk, procesy, MySQL, Nginx, PostgreSQL i dziesiątki innych) w realnym czasie, z wbudowanymi alertami i dashboardem dostępnym przez przeglądarkę. Ten artykuł pokazuje instalację, konfigurację alertów, parent-child streaming dla wielu serwerów i integrację z Grafana.
Instalacja Netdata
# Oficjalny skrypt instalacyjny (działa na Ubuntu, Debian, CentOS, Fedora) wget -O /tmp/netdata-kickstart.sh https://get.netdata.cloud/kickstart.sh sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry # Lub przez apt (stabilna wersja) curl -s https://packagecloud.io/netdata/netdata/gpgkey | sudo apt-key add - echo "deb https://packagecloud.io/netdata/netdata/ubuntu/ $(lsb_release -cs) main" | \ sudo tee /etc/apt/sources.list.d/netdata.list sudo apt update && sudo apt install netdata -y # Start i weryfikacja sudo systemctl enable --now netdata sudo systemctl status netdata # Dashboard dostepny lokalnie # http://localhost:19999 # Lub przez tunel SSH: ssh -L 19999:localhost:19999 user@vps-ip
Konfiguracja podstawowa — netdata.conf
# Sprawdz aktualna konfiguracje
sudo /usr/sbin/netdata -W dump-config > /etc/netdata/netdata.conf
# /etc/netdata/netdata.conf — klucze ustawienia
[global]
hostname = web-prod-01 # Nazwa wezla w dashboardzie
update every = 1 # Czestotliwosc zbierania: 1s (domyslnie)
[web]
bind to = 127.0.0.1 # Tylko localhost (domyslnie) — NIE wystawiaj publicznie bez auth!
port = 19999
[db]
mode = dbengine
dbengine multihost disk space MB = 1024 # 1 GB danych historycznych na dysku
# Aplikuj zmiany
sudo systemctl restart netdata Konfiguracja retencji — DBENGINE tiers
Netdata używa hierarchicznego systemu przechowywania danych (tiers) — starsze dane są automatycznie agregowane do niższej rozdzielczości:
| Tier | Rozdzielczość | Domyślna retencja | Zastosowanie |
|---|---|---|---|
| tier0 | 1 sekunda | ~1 dzień (RAM) | Realtime debugging, aktywny monitoring |
| tier1 | 60 sekund (1 min) | ~3 miesiące (dysk) | Analiza trendów tygodniowych/miesięcznych |
| tier2 | 3600 sekund (1h) | ~2 lata (dysk) | Długoterminowe planowanie pojemności |
# /etc/netdata/netdata.conf — konfiguracja retencji
[db]
mode = dbengine
# Tier 0 (1s) — ile MB RAM uzywac
dbengine tier 0 granularity = 1
dbengine tier 0 disk space MB = 512 # Dane 1s na dysku
# Tier 1 (1min) — 3 miesięczna historia
dbengine tier 1 granularity = 60
dbengine tier 1 disk space MB = 256
# Tier 2 (1h) — 2-letnia historia
dbengine tier 2 granularity = 3600
dbengine tier 2 disk space MB = 128 Alerty — konfiguracja health.d
Netdata dostarcza setki gotowych alertów (w /usr/lib/netdata/conf.d/health.d/).
Własne reguły definiujesz w /etc/netdata/health.d/:
# /etc/netdata/health.d/custom.conf
# Alert: uzycie dysku > 80%
alarm: disk_space_usage
on: disk.space
lookup: average -1m percentage of used
units: %
every: 1m
warn: $this > 80
crit: $this > 95
info: Uzycie dysku przekroczyo $this% na $family
to: sysadmin
# Alert: load average > liczba CPU * 2
alarm: system_load_average
on: system.load
lookup: average -5m of load1
units: load
every: 1m
warn: $this > (($status >= $WARNING) ? (numcpus * 1.5) : (numcpus * 2))
crit: $this > (($status == $CRITICAL) ? (numcpus * 2) : (numcpus * 3))
info: System load average (1m) jest $this przy ${numcpus} CPU
to: sysadmin
# Alert: dostepna pamiec RAM < 20%
alarm: low_ram_available
on: system.ram
lookup: average -1m percentage of free,cached,buffers
units: %
every: 1m
warn: $this < 20
crit: $this < 10
info: Dostepna pamiec RAM wynosi $this%
to: sysadmin
# Alert: wiecej niz 10 polaczen CLOSE_WAIT
alarm: tcp_close_wait
on: ipv4.tcpsock
lookup: average -1m of CurrEstab
units: connections
every: 1m
warn: $this > 500
crit: $this > 1000
to: sysadmin # /etc/netdata/health_alarm_notify.conf — kanaly powiadomien # Email SEND_EMAIL="YES" EMAIL_SENDER="[email protected]" DEFAULT_RECIPIENT_EMAIL="[email protected]" # Discord SEND_DISCORD="YES" DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/xxx/yyy" DEFAULT_RECIPIENT_DISCORD="alerts" # Nazwa kanalu Discord (bez #) # Slack SEND_SLACK="YES" SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxx/yyy" DEFAULT_RECIPIENT_SLACK="#monitoring" # Telegram SEND_TELEGRAM="YES" TELEGRAM_BOT_TOKEN="12345:xxxxx" DEFAULT_RECIPIENT_TELEGRAM="chat-id" # Testowanie powiadomien /usr/libexec/netdata/plugins.d/alarm-notify.sh test
Parent-child streaming — centralne zbieranie metryk
Streaming pozwala zbierać metryki z wielu serwerów na jednym dashboardzie. Konfiguracja:
# Na serwerze PARENT (centralny):
# /etc/netdata/stream.conf
[stream]
enabled = yes
# Przyjmuj polaczenia z child-ow
[API_TOKEN] # Wygeneruj token: openssl rand -hex 32
enabled = yes
allow from = * # Lub podaj IP child-ow
default history = 3600
default memory mode = dbengine
health enabled by default = auto # Na serwerach CHILD (kazdy monitorowany serwer):
# /etc/netdata/stream.conf
[stream]
enabled = yes
destination = parent-server.example.com:19999
api key = TWOJ_API_TOKEN_Z_PARENTA
# Na child mozna wylaczyc lokalne przechowywanie danych (parent je trzyma)
# /etc/netdata/netdata.conf
[db]
mode = ram # Tylko w RAM, bez zapisu na dysk child
retention = 120 # 2 minuty buforu w przypadku utraty polaczenia
# Restart na child i parent
sudo systemctl restart netdata Integracja z Grafana przez Prometheus exporter
# Netdata eksportuje metryki w formacie Prometheus
# Endpoint: http://localhost:19999/api/v1/allmetrics?format=prometheus
# Konfiguracja w /etc/netdata/exporting.conf
[prometheus:exporter]
enabled = yes
destination = localhost:19999
# Konfiguracja Prometheus — dodaj job w prometheus.yml
scrape_configs:
- job_name: 'netdata'
metrics_path: /api/v1/allmetrics
params:
format: [prometheus]
static_configs:
- targets:
- web-prod-01:19999
- web-prod-02:19999
- db-prod-01:19999
# W Grafana dodaj datasource Prometheus i importuj dashboard:
# ID: 7107 (Netdata for Prometheus) lub 2701 (Netdata summary) Zabezpieczenie dashboardu — Nginx reverse proxy z auth
# NIGDY nie wystawiaj Netdata (port 19999) bezposrednio na internet
# Ustaw bind only localhost: w netdata.conf: bind to = 127.0.0.1
# Proxy przez Nginx z BasicAuth
server {
listen 443 ssl;
server_name monitoring.example.com;
# SSL przez certbot / Let's Encrypt
location / {
auth_basic "Netdata Monitoring";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:19999;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
# Wygeneruj .htpasswd
sudo htpasswd -c /etc/nginx/.htpasswd admin Porównanie narzędzi monitoringu
| Narzędzie | Instalacja | Real-time | Alerty | Zużycie RAM |
|---|---|---|---|---|
| Netdata | Bardzo prosta | 1 sekunda | Wbudowane | ~50 MB |
| Prometheus + Grafana | Złożona | 15 sekund | Alertmanager | ~200 MB+ |
| Zabbix | Złożona | 30 sekund | Zaawansowane | ~300 MB+ |
| Munin | Prosta | 5 minut | Podstawowe | ~20 MB |
| Glances | Bardzo prosta | 1 sekunda | Brak wbudowanych | ~30 MB |