InfluxDB v2 + Telegraf — monitoring VPS i aplikacji
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS / Monitoring
InfluxDB v2 to baza danych szeregów czasowych z wbudowanym dashboardem, API i zarządzaniem alertami. Telegraf to agent zbierający metryki z ponad 300 źródeł (CPU, pamięć, dysk, sieć, MySQL, Nginx, Docker, Kubernetes i wiele innych). Razem tworzą lekki i wydajny stack monitoringu, który dobrze współpracuje z Grafaną. Ten artykuł przeprowadzi cię przez instalację obu komponentów, konfigurację podstawowych collectorów, pierwsze zapytania w języku Flux oraz integrację z Grafaną.
Instalacja InfluxDB v2 na Ubuntu
# Dodaj repozytorium InfluxData curl -s https://repos.influxdata.com/influxdata-archive_compat.key \ | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] \ https://repos.influxdata.com/ubuntu stable main" \ | sudo tee /etc/apt/sources.list.d/influxdata.list sudo apt update && sudo apt install -y influxdb2 # Uruchom i wlacz przy starcie sudo systemctl enable --now influxdb sudo systemctl status influxdb # InfluxDB dziala na porcie 8086 # Web UI: http://localhost:8086
Konfiguracja wstępna — organizacja, bucket i token
Po pierwszym uruchomieniu otwórz http://TWOJ_IP:8086 i przejdź przez wizard konfiguracji.
Możesz też użyć CLI:
# Konfiguracja przez CLI influx setup \ --username admin \ --password HasloAdmin123 \ --org mojafirma \ --bucket metrics \ --retention 30d \ --force # Sprawdz konfiguracje influx config ls # Utwórz dodatkowy bucket (np. dla dlugoterminowych danych z retencja 365 dni) influx bucket create \ --name metrics-long \ --org mojafirma \ --retention 365d # Wyswietl tokeny influx auth list # Utwórz token read-only dla Grafany influx auth create \ --org mojafirma \ --read-buckets \ --description "Grafana read-only"
Instalacja i konfiguracja Telegraf
sudo apt install -y telegraf # Wygeneruj konfiguracje Telegraf z gotowymi pluginami # Lub skonfiguruj manualnie /etc/telegraf/telegraf.conf # Glowna konfiguracja outputu do InfluxDB v2 # /etc/telegraf/telegraf.conf [[outputs.influxdb_v2]] urls = ["http://localhost:8086"] token = "TWOJ_OPERATOR_TOKEN" organization = "mojafirma" bucket = "metrics" [[inputs.cpu]] percpu = true totalcpu = true collect_cpu_time = false report_active = false [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs"] [[inputs.diskio]] [[inputs.kernel]] [[inputs.mem]] [[inputs.net]] interfaces = ["eth0", "lo"] [[inputs.processes]] [[inputs.swap]] [[inputs.system]]
# Uruchom Telegraf sudo systemctl enable --now telegraf sudo systemctl status telegraf # Sprawdz czy metryki plyna do InfluxDB telegraf --config /etc/telegraf/telegraf.conf --test | head -30 # Logi sudo journalctl -u telegraf -f
Dodatkowe pluginy Telegraf
| Plugin | Co zbiera | Konfiguracja |
|---|---|---|
inputs.nginx | Nginx status (requests, connections, read/write) | urls = ["http://localhost/nginx_status"] |
inputs.mysql | MySQL/MariaDB — queries, connections, InnoDB stats | servers = ["user:pass@tcp(127.0.0.1:3306)/"] |
inputs.postgresql | PostgreSQL — DB stats, table sizes, connections | address = "postgres://user:pass@localhost/db" |
inputs.docker | Docker containers — CPU, mem, net per container | endpoint = "unix:///var/run/docker.sock" |
inputs.redis | Redis — used memory, keyspace hits/misses, clients | servers = ["tcp://localhost:6379"] |
inputs.http_response | HTTP status check — response time, status code | urls = ["https://twojadomena.pl"] |
inputs.ping | ICMP ping — latencja do zewnętrznych hostów | urls = ["8.8.8.8", "1.1.1.1"] |
Flux — język zapytań InfluxDB v2
Flux to pipeline-based język zapytań. Dane przepływają przez łańcuch transformacji
połączonych operatorem |>. Podstawowa struktura: from →
range → filter → agregacja.
// Srednie uzycie CPU z ostatniej godziny, co 5 minut
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage_active")
|> filter(fn: (r) => r.cpu == "cpu-total")
|> aggregateWindow(every: 5m, fn: mean, createEmpty: false)
|> yield(name: "mean_cpu")
// Wolna pamiec RAM (MB)
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "mem")
|> filter(fn: (r) => r._field == "available")
|> map(fn: (r) => ({ r with _value: r._value / 1024 / 1024 }))
|> yield(name: "free_mb")
// Top 5 procesow po uzyciu CPU
from(bucket: "metrics")
|> range(start: -15m)
|> filter(fn: (r) => r._measurement == "procstat")
|> filter(fn: (r) => r._field == "cpu_usage")
|> top(n: 5, columns: ["_value"])
// Uzycie dysku ponad 80%
from(bucket: "metrics")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "disk")
|> filter(fn: (r) => r._field == "used_percent")
|> filter(fn: (r) => r._value > 80.0) Alerty w InfluxDB (Checks i Notifications)
InfluxDB v2 ma wbudowany system alertowania. W zakładce Alerts tworzysz Checks (definicja warunku) i Notification Rules (gdzie wysłać alert). Obsługiwane kanały powiadomień: Slack, PagerDuty, email, HTTP webhook. Przykład alertu przez Flux CLI:
// Alert gdy CPU > 90% przez 5 minut
// Tworz przez UI: Alerts → Create Check → Threshold Check
// lub Flux:
option task = {name: "CPU alert", every: 5m}
from(bucket: "metrics")
|> range(start: -task.every)
|> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_active")
|> filter(fn: (r) => r.cpu == "cpu-total")
|> mean()
|> map(fn: (r) => ({ r with
_level: if r._value > 90.0 then "crit"
else if r._value > 75.0 then "warn"
else "ok"
}))
|> monitor.check(
data: {r},
messageFn: (r) => "CPU usage is ${r._value}% on ${r.host}"
) Grafana — integracja z InfluxDB v2
Grafana świetnie współpracuje z InfluxDB v2 jako datasource. Gotowe dashboardy dla Telegraf są dostępne na Grafana.com do importu jednym kliknięciem.
# Instalacja Grafana (Ubuntu)
sudo apt install -y grafana
sudo systemctl enable --now grafana-server
# Web UI: http://localhost:3000 (admin/admin)
# Konfiguracja datasource InfluxDB v2 przez API (lub przez UI)
curl -X POST http://admin:admin@localhost:3000/api/datasources \
-H "Content-Type: application/json" \
-d '{
"name": "InfluxDB",
"type": "influxdb",
"url": "http://localhost:8086",
"jsonData": {
"version": "Flux",
"organization": "mojafirma",
"defaultBucket": "metrics",
"tlsSkipVerify": true
},
"secureJsonData": {
"token": "TWOJ_GRAFANA_READ_TOKEN"
}
}'
# Importuj gotowy dashboard Telegraf (ID 928 lub 1443 na grafana.com)
# Grafana UI: Dashboards → Import → wpisz ID 928 → Load → Select datasource