InfluxDB 2.0 mit Docker und Python

Zuerst mal erzeugt man sich in einem leeren Verzeichnis ein Docker Setup- Script. In diesem Verzeichnis wird InfluxDB dann auch alle Daten speichern, darum sollte die Partition ausreichend Platz bieten

docker run -d -p 8086:8086 \ --name influxdbv2 \ -v $PWD/data:/var/lib/influxdb2 \ -v $PWD/config:/etc/influxdb2 \ -e DOCKER_INFLUXDB_INIT_MODE=setup \ -e DOCKER_INFLUXDB_INIT_USERNAME=yourInfluxAccount \ -e DOCKER_INFLUXDB_INIT_PASSWORD=yourInfluxPassword \ -e DOCKER_INFLUXDB_INIT_ORG=chooseOrgName \ -e DOCKER_INFLUXDB_INIT_BUCKET=chooseBucketName \ influxdb:2.0

Achtung: Die Volume- Mount Directories müssen vorhanden und beschreibbar sein.

Hier als Compose- File (dabei ggf. die RETENTION- Zeit anpassen, je nachdem, wie lange die Daten gehalten werden sollen)

version: "3.5" services: influxdb2: image: influxdb:latest network_mode: "bridge" container_name: influxdb2 ports: - "8086:8086" volumes: - type: bind source: /volume1/docker/influxdb2/data target: /var/lib/influxdb2 - type: bind source: /volume1/docker/influxdb2/config target: /etc/influxdb2 environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=yourInfluxAccount - DOCKER_INFLUXDB_INIT_PASSWORD=yourInfluxPassword - DOCKER_INFLUXDB_INIT_ORG=chooseOrgName - DOCKER_INFLUXDB_INIT_BUCKET=chooseBucketName - DOCKER_INFLUXDB_INIT_RETENTION=1w - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=randomTokenValue restart: always

Wenn man selber kein Token angegeben hatte (DOCKER_INFLUXDB_INIT_ADMIN_TOKEN), erzeugt influxdb selber eins, was man sich dann mit

$ docker exec influxdb2 influx auth list \ --user $USERNAME \ --hide-headers | cut -f 3

abholen kann.

Achtung: Falls man auch Telegraph als Daten- Collector installieren möchte, muß man sich durch die Konfiguration quälen: https://www.blackvoid.club/grafana-8-influxdb-2-telegraf-2021-monitoring-stack/

Installieren von Grafana

version: "3.5" services: grafana8: image: grafana/grafana:latest network_mode: "bridge" container_name: grafana8 volumes: - /yourGrafanafolder:/var/lib/grafana ports: - "3000:3000" restart: always

Python Anbindung

Beim Installieren aufpassen, das man den Treiber für InfuxDB 2.0 erwischt (influxdb_client), und nicht den alten (influxdb) für V 1.x

sudo pip3 install influxdb_client

dann kann's losgehen:

# https://www.influxdata.com/blog/getting-started-with-python-and-influxdb-v2-0/ from influxdb_client import InfluxDBClient, Point from influxdb_client .client.write_api import SYNCHRONOUS token='randomTokenValue' org='chooseOrgName' bucket='chooseBucketName' with InfluxDBClient(url='http://localhost:8086', host='localhost', token=token, org=org, debug=False) as client: """ Create client that writes data in batches with 50_000 items. """ with client.write_api( write_options=WriteOptions(SYNCHRONOUS, batch_size=50_000, flush_interval=10_000)) as write_api: for item in op.get_device(device_id, startUnixtime, endUnixtime): if not item[4]: # no error point = Point('vehicle').tag('device', device_id).field(item[1], item[3]).time(time=item[0]) write_api.write(bucket=bucket, record=point)

Kommandos

Alle Bucklet Daten löschen

docker exec influxdb2 influx delete \
--org chooseOrgName \
--bucket chooseBucketName \
--start 2020-03-01T00:00:00Z \
--stop $(date +"%Y-%m-%dT%H:%M:%SZ")