Inhaltsverzeichnis
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
- run_docker.sh
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)
- docker-compose.yaml
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
- docker-compose.yaml
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:
- influx_test.py
# 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")