Telegraf und InfluxDB auf Proxmox: MQTT-Messwerte Schritt für Schritt speichern

EMQX transportiert Messwerte, InfluxDB bewahrt sie als Zeitreihen auf und Telegraf verbindet beides. Dieser Beitrag zeigt eine nachvollziehbare Installation für einen neuen Proxmox-Gast und eine kleine Beispiel-Pipeline. Mein produktives Homelab nutzt InfluxDB 1.x und Telegraf getrennt vom MQTT-Broker. Die Befehle sind deshalb ausdrücklich für die 1.x-API; bei InfluxDB 2 oder 3 unterscheiden sich Authentifizierung und Output-Plugin.

Voraussetzungen und Datenfluss

Sensor oder Home Assistant → EMQX :1883 → Telegraf → InfluxDB :8086 → Grafana

Für ein neues Setup brauchst du einen Proxmox-LXC mit Debian, einen erreichbaren MQTT-Broker und genügend freien Thin-Pool-Speicher. Zeitreihen wachsen stetig; starte nicht mit einem winzigen Datenträger. Bei mir ist der InfluxDB-Gast auf 16 GB gewachsen. Prüfe vor jeder Vergrößerung auch den real freien Platz des Proxmox-Storage.

Schritt 1: InfluxDB-Gast erstellen

Eine einfache Variante ist das InfluxDB-Community-Skript. Prüfe den Quelltext und wähle im Dialog ausdrücklich die zu deinem Ziel passende InfluxDB-Hauptversion – ein Wechsel zwischen 1, 2 und 3 ist keine gewöhnliche Paketaktualisierung.

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/influxdb.sh)"

Notiere die neue Gast-ID als <CTID> und kontrolliere:

pct status <CTID>
pct exec <CTID> -- influxd version
pct exec <CTID> -- systemctl is-active influxdb
pct exec <CTID> -- ss -lnt

InfluxDB 1.x hört standardmäßig auf 8086. Der Dienst sollte nur aus dem Heimnetz oder von definierten Clients erreichbar sein. Eine öffentliche Portfreigabe ist unnötig.

Schritt 2: Datenbank und Benutzer anlegen

Der nächste Block ist ein Beispiel für eine frische, lokal geschützte InfluxDB-1.x-Instanz. Eine bestehende Instanz mit Authentifizierung darf nicht mit anonymen Befehlen überschrieben werden. Öffne die Influx-Konsole im Gast und lege eine eigene Datenbank sowie einen Schreibbenutzer an:

pct enter <CTID>
influx
CREATE DATABASE homelab
CREATE USER telegraf WITH PASSWORD 'EIN_LANGES_EIGENES_PASSWORT'
GRANT WRITE ON homelab TO telegraf
SHOW DATABASES
exit

Aktiviere HTTP-Authentifizierung nach der InfluxDB-1.x-Dokumentation, bevor du den Dienst über das Netz zugänglich machst. Speichere echte Kennwörter nicht im veröffentlichten Beispiel, im Shell-Verlauf oder in Git.

Schritt 3: Telegraf installieren

Falls das Community-Skript Telegraf nicht bereits mitinstalliert hat, nutze das offizielle InfluxData-Repository. Dort sind der aktuelle GPG-Fingerprint und die apt-Befehle gepflegt. Vorher prüfen:

command -v telegraf
telegraf version
systemctl is-active telegraf

Nur wenn Telegraf fehlt, folgen die apt-Schritte aus der Dokumentation. So vermeidest du doppelte Paketquellen und unbeabsichtigte Updates eines laufenden Systems.

Schritt 4: MQTT-Eingang und Influx-Ausgang konfigurieren

Sichere zuerst /etc/telegraf/telegraf.conf. Die Datei kann Passwörter enthalten und gehört nicht in eine öffentliche Ablage.

sudo cp -a /etc/telegraf/telegraf.conf \
  /etc/telegraf/telegraf.conf.bak

Im folgenden Muster ersetze mqtt.example.lan, Topic, Zugangsdaten und Datenbank. Der Ausschnitt gehört in die Telegraf-Konfiguration; vorhandene Output-Blöcke nicht versehentlich doppelt aktivieren:

[[inputs.mqtt_consumer]]
  servers = ["tcp://mqtt.example.lan:1883"]
  topics = ["homelab/telemetry/#"]
  client_id = "telegraf-homelab"
  username = "telegraf-mqtt"
  password = "PASSWORT_NUR_LOKAL"
  data_format = "json_v2"

  [[inputs.mqtt_consumer.json_v2]]
    measurement_name = "homelab"
    [[inputs.mqtt_consumer.json_v2.field]]
      path = "temperature"
      type = "float"

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
  database = "homelab"
  username = "telegraf"
  password = "PASSWORT_NUR_LOKAL"

Das Beispiel erwartet Nachrichten wie {"temperature":21.5} unter homelab/telemetry/room. Bei 127.0.0.1 ist wichtig: Das funktioniert für InfluxDB nur, weil Telegraf im gleichen Gast läuft. Der MQTT-Broker sitzt in einem anderen Gast und benötigt seinen echten internen DNS-Namen. Für Produktionszugänge verwende eine geschützte Konfigurationsdatei oder Telegraf-Secret-Store und geeignete Dateirechte.

Schritt 5: Erst testen, dann dauerhaft starten

telegraf --config /etc/telegraf/telegraf.conf --test --test-wait 5
systemctl restart telegraf
systemctl is-active telegraf
journalctl -u telegraf -n 80 --no-pager

Ein wichtiger Stolperstein: mqtt_consumer ist ein Service-Input. Ohne neue MQTT-Nachricht zeigt --test eventuell keinen Messwert. Sende während des Tests ein Beispiel:

mosquitto_pub -h mqtt.example.lan -p 1883 \
  -u telegraf-mqtt -P 'TESTPASSWORT' \
  -t 'homelab/telemetry/room' \
  -m '{"temperature":21.5}'

Verwende für einen echten Test die gesicherte Authentifizierung; das -P-Argument kann lokal sichtbar sein. Danach mit einem leseberechtigten InfluxDB-Konto prüfen:

influx -database homelab
SHOW MEASUREMENTS
SELECT * FROM homelab ORDER BY time DESC LIMIT 5

Erst wenn Zeitstempel und Werte plausibel sind, Grafana verbinden. Für Grafana ein separates lesendes Datenbankkonto nutzen. Speicherbelegung und Retention regelmäßig kontrollieren; eine unbegrenzte Retention ist eine bewusste Speicherentscheidung, kein Default für jedes Homelab.

Fehlerdiagnose und Backup

  • Connection refused zum Broker: EMQX-Listener, IP, Firewall und Port prüfen.
  • Authentication failed: MQTT-Benutzer und InfluxDB-Benutzer getrennt prüfen.
  • Kein Measurement: Topic trifft nicht oder JSON-Pfad temperature fehlt.
  • Viele Parserfehler: Payload-Format und data_format müssen zusammenpassen.
  • Speicher läuft voll: Retention und Datenträger prüfen, nicht blind Datenbanken löschen.

Sichere den Gast und zusätzlich die InfluxDB-Daten mit der zur eingesetzten Version passenden Backup-Funktion. Den Restore in einem isolierten Testgast prüfen. Weiterlesen: EMQX auf Proxmox einrichten · Telegraf MQTT-Plugin.

X

Basti

Entwickler und Smart-Home-Enthusiast aus Deutschland. Ich entwickle Open-Source-Integrationen für Home Assistant (IDM Wärmepumpe, Violet Pool Controller), Modbus-Tools (ModBridge) und betreibe verschiedene Server-Dienste (Matrix, Seafile, SOGo).

GitHub →

Schreibe einen Kommentar