Veröffentlicht am: 16.06.2017
Von: JLusiardi
In Kategorie: Home Automation
Aus meinem beruflichen Umfeld ist mir Grafana als Lösung zur grafischen Aufbereitung gut bekannt. Daten beziehen wir klassisch aus Graphite.
Für ein Projekt habe ich nun die Daten über öffentliches Netz (also das Internet) in die Datensenke einliefern müssen. Zunächst auch hier an Graphite gedacht, jedoch ergab sich schnell die Überlegung, das der Graphite Port 2003 (hier lauscht der Carbon Daemon) jedwede Daten ohne Authentifizierung annimmt. In einem öffentlichen Netz sicher kein akzeptabler Zustand, da hier jeder mit Kenntnis von Port und IP beliebige Stördaten einliefern kann. Also auf die Suche nach Alternativen.
InfluxDB bietet laut db-engines.com als Berechtigungskonzept mit einer "einfache[n] Rechteverwaltung mit Benutzeraccounts" mehr als Graphite. Auch verspricht die Implementierung in Go mehr Performance. Grund genug, sich InfluxDB näher anzusehen.
InfluxDB
Dank desoffiziellen Docker Images ist InfluxDB schnell probeweise gestartet. Hinweise liefert die Seite des Docker-Hub. Zunächst wird die Standardkonfiguration extrahiert:
docker run --rm influxdb influxd config > influxdb.conf
In dieser Datei muss die Option auth-enabled nun aktiviert werden:
...
[http]
...
auth-enabled = true
...
In Kombination mit meinen beiden Projekten docker_nginx_auto_proxy und docker_ssl_endpoint kann man nun einen Docker Container starten, der Daten über TLS abgesichert entgegen nimmt:
docker run --name=influxdb_1 -d \
-e PROXY_DATA=server_names:$INFLUXDOMAIN,port:8086 \
-v /data/influxdb/data:/var/lib/influxdb \
-v /data/influxdb/conf:/etc/influxdb/influxdb.conf:ro \
influxdb -config /etc/influxdb/influxdb.conf
Nun müssen wir mindestens einen Admin-Nutzer anlegen. Zunächst verbinden wir uns auf die InfluxDB-CLI:
docker run --rm --link=influxdb_1 -it influxdb influx -host influxdb_1
Anschließend legt folgendes Statement den Admin-Nutzer bofh an:
CREATE USER bofh WITH PASSWORD 'rrzs42'
WITH ALL PRIVILEGES
Anschließend die CLI beenden und beim Neuverbinden zusätzlich die Parameter username und password zur Authentifizierung verwenden. Weitere Informationen zur Nutzerverwaltung von InfluxDB findet man in der offiziellen Dokumentation.
Eine Datenbank sollte in der CLI ebenfalls erstellt werden:
CREATE DATABASE datensenke
Testweise können nun bereits Daten eingeliefert werden:
curl -X POST -u bofh:rrzs42 \
--data-binary 'wert,key=value wert=42.23' \
'https://$INFLUXDOMAIN/write?db=datensenke'
Die genaue Beschreibung über das Schreiben von Daten findet man in der offiziellen Dokumentation.
Grafana
Für Grafana gibt es ebenfalls ein offizielles Docker-Image. Der erste Schritt ist das Extrahieren der Konfiguration:
docker run --rm --name grafana grafana/grafana
docker cp grafana:/etc/grafana/grafana.ini .
Die wichtigste Anpassung der Konfiguration bezieht sich auf das Abschalten des selbständigen Anmeldens neuer Nutzer (allow_sign_up = false in der Kategorie users). Somit ist nur noch der Administrator (Login: admin) in der Lage, neue Nutzer anzulegen.
Gestartet wird der Grafana-Container mit folgendem Kommando:
docker run --name=grafana -d \
-e PROXY_DATA=server_names:$GRAFANADOMAIN,port:3000 \
-v /data/grafana/lib:/var/lib/grafana/ \
-v /data/grafana/conf:/etc/grafana/grafana.ini \
-e "GF_SERVER_ROOT_URL=https://$GRAFANADOMAIN" \
-e "GF_SECURITY_ADMIN_PASSWORD=s3cr3t" \
grafana/grafana
Nun kann die Grafana-Instanz unter https://\$GRAFANADOMAIN aufgerufen werden und der Login funktioniert mit den Credentials admin:s3cr3t.
Der nächste Schritt sollte das Ändern des Passworts des Administrators sein und das Anlegen neuer Nutzer sein. Dies geschieht unter Grafana-Menu → Admin → Global Users.
Um wie die Daten aus InfluxDB in Grafana nutzen zu können, legt man eine Datenquelle unter Grafana-Menu → Data Sources an. Die Einstellungen für InfluxDB sind in unserem Fall:
- Type: InfluxDB
- URL: https://\$INFLUXDOMAIN
- Access: Proxy
- Http Auth: With Credentials
- InfluxDB Details:
- Database: datensenke
- User: bofh
- Password: rrzs42
Jetzt sind wir in der Lage, über Dashboards wie gewohnt Graphen an zu legen. Beispielsweise:
Et voilà, flexible und ansehnliche graphische Aufbereitung von Zeitseriendaten.