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
temperaturefehlt. - Viele Parserfehler: Payload-Format und
data_formatmü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.
