Grafana und InfluxDB bilden ein leistungsfähiges Duo für Server-Monitoring. InfluxDB speichert Zeitreihen-Daten, Grafana visualisiert sie in schönen Dashboards.

Architektur

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Server    │────>│  Telegraf   │────>│  InfluxDB   │
│  (Metrics)  │     │  (Sammler)  │     │ (Datenbank) │
└─────────────┘     └─────────────┘     └─────────────┘
                                               │
                                               ▼
                                        ┌─────────────┐
                                        │   Grafana   │
                                        │ (Dashboard) │
                                        └─────────────┘

InfluxDB installieren

InfluxDB 2.x (empfohlen)

# Repository hinzufügen
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | tee /etc/apt/sources.list.d/influxdata.list

# Installieren
apt update
apt install influxdb2

# Starten
systemctl enable --now influxdb

Initiale Konfiguration

# Setup über CLI
influx setup

# Oder über Web-UI: http://server-ip:8086

Setup-Eingaben:

  • Username: admin
  • Password: sicheres-passwort
  • Organization: meine-firma
  • Bucket: server-metrics

Token für Zugriff

# Token anzeigen
influx auth list

# Neues Token erstellen
influx auth create -o meine-firma --read-buckets --write-buckets

Telegraf installieren (Datensammler)

Installation

apt install telegraf

Grundkonfiguration

# /etc/telegraf/telegraf.conf

[global_tags]
  hostname = "webserver1"

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"

# Output zu InfluxDB 2.x
[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "IHR_TOKEN"
  organization = "meine-firma"
  bucket = "server-metrics"

# Inputs
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]

[[inputs.kernel]]

[[inputs.mem]]

[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

[[inputs.net]]
  interfaces = ["eth0"]

Erweiterte Inputs

# Nginx Status
[[inputs.nginx]]
  urls = ["http://localhost/nginx_status"]

# MySQL
[[inputs.mysql]]
  servers = ["user:password@tcp(localhost:3306)/"]

# Docker
[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"

# Apache
[[inputs.apache]]
  urls = ["http://localhost/server-status?auto"]

Telegraf starten

# Konfiguration testen
telegraf --config /etc/telegraf/telegraf.conf --test

# Starten
systemctl enable --now telegraf

Grafana installieren

Installation

# Repository hinzufügen
apt install -y apt-transport-https software-properties-common
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | tee -a /etc/apt/sources.list.d/grafana.list

# Installieren
apt update
apt install grafana

# Starten
systemctl enable --now grafana-server

Erster Login

  • URL: http://server-ip:3000
  • User: admin
  • Passwort: admin (beim ersten Login ändern)

Grafana mit InfluxDB verbinden

Datenquelle hinzufügen

1. ConfigurationData SourcesAdd data source 2. InfluxDB auswählen 3. Konfiguration:

Query Language: Flux (für InfluxDB 2.x)
URL: http://localhost:8086
Organization: meine-firma
Token: IHR_TOKEN
Default Bucket: server-metrics

4. Save & Test

Dashboard erstellen

Neues Dashboard

1. +DashboardAdd visualization 2. Datenquelle auswählen: InfluxDB

CPU-Auslastung Panel

Flux Query:

from(bucket: "server-metrics")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_idle")
  |> filter(fn: (r) => r["cpu"] == "cpu-total")
  |> map(fn: (r) => ({r with _value: 100.0 - r._value}))
  |> aggregateWindow(every: v.windowPeriod, fn: mean)

RAM-Nutzung Panel

from(bucket: "server-metrics")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)

Disk-Nutzung Panel

from(bucket: "server-metrics")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "disk")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> filter(fn: (r) => r["path"] == "/")
  |> aggregateWindow(every: v.windowPeriod, fn: mean)

Netzwerk-Traffic Panel

from(bucket: "server-metrics")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "net")
  |> filter(fn: (r) => r["_field"] == "bytes_recv" or r["_field"] == "bytes_sent")
  |> filter(fn: (r) => r["interface"] == "eth0")
  |> derivative(unit: 1s, nonNegative: true)
  |> aggregateWindow(every: v.windowPeriod, fn: mean)

Alerts einrichten

Alert-Regel erstellen

1. Im Panel: EditAlert 2. Create alert rule from this panel

Evaluate every: 1m
For: 5m
Conditions:
  - WHEN avg() OF query(A, 5m, now) IS ABOVE 90

Notification Channel

1. AlertingNotification channelsAdd channel 2. Typ auswählen: E-Mail, Slack, Telegram, etc.

E-Mail:

Name: Email-Alert
Type: Email
Addresses: admin@example.com

Slack:

Name: Slack-Alert
Type: Slack
Webhook URL: https://hooks.slack.com/services/XXX/YYY/ZZZ

Vorgefertigte Dashboards

Dashboard importieren

1. +Import 2. Dashboard-ID eingeben oder JSON hochladen

Beliebte Dashboard-IDs:

  • 1860: Node Exporter Full
  • 928: Telegraf System Dashboard
  • 11074: Node Exporter for Prometheus

Telegraf Dashboard

ID: 928 (oder nach "Telegraf" suchen)

Docker-basierte Installation

# docker-compose.yml
version: '3.8'

services:
  influxdb:
    image: influxdb:2.7
    ports:
      - "8086:8086"
    volumes:
      - influxdb-data:/var/lib/influxdb2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=sicheres-passwort
      - DOCKER_INFLUXDB_INIT_ORG=meine-firma
      - DOCKER_INFLUXDB_INIT_BUCKET=server-metrics
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=mein-super-geheimes-token

  telegraf:
    image: telegraf:1.28
    volumes:
      - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - influxdb

  grafana:
    image: grafana/grafana:10
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    depends_on:
      - influxdb

volumes:
  influxdb-data:
  grafana-data:
docker compose up -d

Retention Policies

Datenaufbewahrung konfigurieren

# In InfluxDB CLI
influx bucket update \
  --id BUCKET_ID \
  --retention 30d

Oder über Web-UI: DataBucketsSettings

Downsampling für langfristige Daten

// Task für tägliche Aggregation
option task = {name: "downsample_daily", every: 1d}

from(bucket: "server-metrics")
  |> range(start: -1d)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> aggregateWindow(every: 1h, fn: mean)
  |> to(bucket: "server-metrics-longterm", org: "meine-firma")

Troubleshooting

Keine Daten in Grafana

# Telegraf-Logs prüfen
journalctl -u telegraf -f

# InfluxDB-Daten prüfen
influx query 'from(bucket:"server-metrics") |> range(start:-1h) |> limit(n:10)'

Verbindungsprobleme

# InfluxDB erreichbar?
curl http://localhost:8086/health

# Token korrekt?
curl -H "Authorization: Token IHR_TOKEN" http://localhost:8086/api/v2/buckets

Hoher Speicherverbrauch

# Retention Policy prüfen und anpassen
influx bucket list
influx bucket update --id BUCKET_ID --retention 7d

Zusammenfassung

| Komponente | Port | Funktion | |------------|------|----------| | InfluxDB | 8086 | Zeitreihen-Datenbank | | Telegraf | - | Metrik-Sammler | | Grafana | 3000 | Visualisierung |

Fazit

Grafana mit InfluxDB bietet ein flexibles und leistungsstarkes Monitoring-Setup. Telegraf sammelt automatisch System-Metriken, InfluxDB speichert sie effizient, und Grafana visualisiert sie in anpassbaren Dashboards. Beginnen Sie mit den Standard-Metriken und erweitern Sie nach Bedarf mit zusätzlichen Inputs und Alerts.