InfluxDB: Time series database - Docker

 

Eine InfluxDB Datenbank ist eine für Zeitdaten optimierte Datenbank. Für das Visualisieren wird InfluxDB des Öfteren in Kombination mit Grafana eingesetzt. Achtung: Der Artikel bezieht sich auf die InfluxDB Version 1, Informationen  zur Version 2 folgen in Kürze.

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Datenbank Initialisieren

Bevor wir den Container verwenden können, muss darauf eine Datenbank angelegt werden. Der folgende Befehl startet den Container, legt die Datenbank an und stoppt den Container im Anschluss wieder. Das Passwort sollte an dieser Stelle natürlich angepasst werden:

mkdir -p /docker
mkdir -p /docker/influxdb
docker run \
--rm -e INFLUXDB_DB=iobroker \
-e INFLUXDB_ADMIN_USER=admin \
-e INFLUXDB_ADMIN_PASSWORD=adminpassword \
-e INFLUXDB_USER=iobroker \
-e INFLUXDB_USER_PASSWORD=password4iobrokerdb \
-v /docker/influxdb:/var/lib/influxdb influxdb /init-influxdb.sh

Die Ausgabe sollte ca. wie folgt aussehen:

docker run --rm -e INFLUXDB_DB=ha -e INFLUXDB_ADMIN_USER=admin -e INFLUXDB_ADMIN_PASSWORD=???-e INFLUXDB_USER=ha -e INFLUXDB_USER_PASSWORD=??? -v /var/web/ha.libe.net/influxdb:/var/lib/influxdb influxdb /init-influxdb.sh
..
ts=2022-01-18T11:01:45.570263Z lvl=info msg="Executing query" log_id=0Z7DRsEl000 service=query query="CREATE DATABASE ha"
[httpd] 127.0.0.1 - - [18/Jan/2022:11:01:45 +0000] "POST /query?chunked=true&db=&epoch=ns&q=CREATE+DATABASE+ha HTTP/1.1" 200 57 "-" "InfluxDBShell/1.8.3" 06a1e3a9-784e-11ec-8002-0242ac110002 6635
/init-influxdb.sh: ignoring /docker-entrypoint-initdb.d/*
...
ts=2022-01-18T11:01:45.590635Z lvl=info msg="Closed service" log_id=0Z7DRsEl000 service=subscriber
ts=2022-01-18T11:01:45.590686Z lvl=info msg="Server shutdown completed" log_id=0Z7DRsEl000

InfluxDB starten

Nachdem der Container initialisiert wurde, habe ich mit "docker network create smart-home" ein eigenes Netzwerk angelegt, die Datenbank kann daraufhin mit folgendem Befehl gestartet werden:

docker run -d \
--name=influxdb \
--network=smart-home \
-p 8086:8086 \
--restart=always \
-v /docker/influxdb:/var/lib/influxdb influxdb

Alternativ kann InfluxDB beim Einsatz mehrerer Container auch über eine Docker-Compose-Datei eingebunden werden, siehe: Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

Shell docker exec

Beim Einsatz des Docker-Containers, kann die Datenbank über docker exec im Terminal verwaltet werden

Retention-Policy anzeigen und verstehen

bernhard@sox:~$ docker exec -it influxdb influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
...
Please set a database with the command "use <database>".
> use ha
Using database ha
> SHOW RETENTION POLICIES
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

Als Standard wird beim Anlegen der Datenbank eine Retention-Policy mit dem Namen "autogen" angelegt. Die Policy besitzt eine unendlich lange Retention und eine "shrdGroupDuration" von sieben Tagen. "0s" als Retention steht für unendlich. Beim Überschreiten der Retention werden shrdGroups gelöscht, was bei der Standardeinstellung immer Blöcke von sieben Tagen löschen würde, entsprechend hat die shardGroupDuration bei einem anderen Wert als 0s einen Einfluss auf die Retention.

Zusätzliche Datenbank anlegen

bernhard@sox:~$ docker exec -it influxdb influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
> CREATE DATABASE "traefik"
> CREATE USER "traefik" WITH PASSWORD '???'
> GRANT ALL ON "traefik" TO "traefik"

Werte anzeigen und bestimmte Werte löschen

Ich hatte anfangs von meinem Temperatursensor einige Falschmeldungen mit dem Wert "-127". Um diese zu entfernen kann ein bestimmter Zeitwert verwendet werden.

  1. Herausfinden des Key für die Werte: "SHOW SERIES ON ha"
  2. Anzeige der Werte mit "select time,value from "°C" where value < -100 limit 10"
  3. Löschen der angezeigten Werte über dessen Zeitwert: "delete from "°C" where time = 1642559861967671040"
> SHOW SERIES ON ha
key
---
%,domain=sensor,entity_id=aussen_battery
%,domain=sensor,entity_id=aussen_humidity
%,domain=sensor,entity_id=bad_battery
%,domain=sensor,entity_id=bad_humidity
%,domain=sensor,entity_id=baldrian_battery
%,domain=sensor,entity_id=baldrian_humidity
...
°C,domain=sensor,entity_id=gefrierschrank_temperature
°C,domain=sensor,entity_id=heating_pufferspeicher
°C,domain=sensor,entity_id=heating_ruecklauf
°C,domain=sensor,entity_id=heating_vorlauf
°C,domain=sensor,entity_id=heating_waermetauscher
°C,domain=sensor,entity_id=heating_warmwasser

> select time,value from "°C" where value < -100 limit 10
name: °C
time                value
----                -----
1642559861967671040 -127
1642577899531245824 -127
1642582871417732096 -127
1642583544890542080 -127
1642590298966192128 -127
1642590767340711168 -127
1642590767352859136 -127
1642590767357784064 -127
1642590767358241024 -127
1642590767358556928 -127
> delete from "°C" where time = 1642559861967671040
> delete from "°C" where time = 1642577899531245824
> delete from "°C" where time = 1642582871417732096
> delete from "°C" where time = 1642583544890542080
> delete from "°C" where time = 1642590298966192128
> delete from "°C" where time = 1642590767340711168
> delete from "°C" where time = 1642590767357784064
> delete from "°C" where time = 1642590767358241024
> delete from "°C" where time = 1642590767358556928

Queries

https://docs.influxdata.com/influxdb/v1.3/query_language/functions/

Upgrade Influxdb 1 auf 2

docker run -p 8086:8086 \
  -v ./influxdb:/var/lib/influxdb \
  -v ./influxdb2:/var/lib/influxdb2 \
  -e DOCKER_INFLUXDB_INIT_MODE=upgrade \
  -e DOCKER_INFLUXDB_INIT_USERNAME=ha \
  -e DOCKER_INFLUXDB_INIT_PASSWORD=pASSED \
  -e DOCKER_INFLUXDB_INIT_ORG=my-org \
  -e DOCKER_INFLUXDB_INIT_BUCKET=my-bucket \
  influxdb

Zugriff auf die InfluxDB

Für den Zugriff auf die Datenbank können einfach die zuvor beim Initialisieren hinterlegten Daten verwendet werden:

  • Host innerhalb des Netzwerkes "smart-home": influxdb:8086
  • Datenbankname: influxb
  • User: admin
  • Passwort: adminpassword

Zugriff aus Grafana und ioBroker, siehe auch: /grafana#Datenquelle und /iobroker#InfluxDB bzw. Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

 

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details