Installation auf einem Armbian, 21.02.3 Focal
Installation Influxdb
Installation wird auch hier beschrieben: https://docs.influxdata.com/influxdb/v1.8/introduction/install/
sudo wget -qO- https://repos.influxdata.com/influxdb.key | gpg --dearmor > /etc/apt/trusted.gpg.d/influxdb.gpg export DISTRIB_ID=$(lsb_release -si); export DISTRIB_CODENAME=$(lsb_release -sc) sudo echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" > sudo /etc/apt/sources.list.d/influxdb.list
Influxdb installieren
sudo apt-get update && sudo apt-get install influxdb sudo service influxdb start
Version auf „hold“ setzen
Bei Influx scheint die Qualität nicht sehr hoch. Nach einem Update von Version 1.8.6 auf 1.8.9 lief die Influxdb nur noch sehr langsam und es hagelte „connection refused“ Fehler. Ich habe deswegen einen downgrade auf die Version 1.8.6 (Ressource) durchgeführt und diese Version nun „fixiert“
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.6_armhf.deb sudo dpkg -i influxdb_1.8.6_armhf.deb sudo apt-mark hold influxdb
Mit Installation fortfahren
Nun kann auf die Influx-Shell zugegriffen werden
influx
Benutzer anlegen
CREATE USER "admin" WITH PASSWORD '<adminpassword>' WITH ALL PRIVILEGES CREATE USER "spacelynk" WITH PASSWORD '<userpassword>'
Datenbank anlegen und Berechtigung erteilen
CREATE DATABASE "knxdb" GRANT ALL ON "knxdb" TO "user"
Influxdb konfigurieren
Das Konfig-File der Influx-DB liegt unter /etc/influxdb/…
sudo vi /etc/influxdb/influxdb.conf
Sicherstellen, dass folgende Punkte gesetzt sind:
[http] enabled = true bind-address = ":8086" auth-enabled = true log-enabled = true write-tracing = false pprof-enabled = true https-enabled = false https-certificate = "/etc/ssl/influxdb.pem" flux-enabled = true
Service restarten
sudo service influxdb restart
Nachtrag: Installation Influxdb auf armbian 32Bit (cannot allocate memory)
Die Influxdb lief nun x Monate. Nach einiger Zeit viel auf, dass das System heiss lief (>80°C) und im /var/log/syslog folgende Fehlermeldung erschien:
Jun 1 10:40:42 odroidxu4 influxd[24423]: ts=2022-06-01T08:40:42.988192Z lvl=info msg="Error replacing new TSM files" log_id=xxxx engine=tsm1 tsm1_level=1 tsm1_strategy=level trace_id=0aobcfkW000 op_name=tsm1_compact_group db_shard_id=654 error="cannot allocate memory"
Hier handelt es sich um ein InfluxDB-ARM-32-Bit-Fehler. Influx besteht darauf, die gesamte Datenbank in den Speicher abzubilden ist, was fehlschlägt, wenn die Datenbankgröße größer als die adressierbare Speichergröße ist (2 GB auf 32-Bit-Kerneln, ~ 3,6 GB auf 64-Bit-Kerneln, mit 32-Bit-OS).
Da ich ein 32Bit OS auf einem 32Bit-Kernel betreibe, stosse ich auf diesen Fehler, der das gesamte System instabil macht. Teilweise enstanden OS-Freezes daraus.
Fix
Wie hier beschreiben, existiert ein Fix. Ablauf:
Installation go
Als erstes muss auf dem armbian go installiert werden:
- Suche auf https://golang.org/dl/ die ARMv6 Version
mkdir ~/src && cd ~/src wget https://dl.google.com/go/<version>.tar.gz
- Entpacken
sudo tar -C /usr/local -xzf <version>.tar.gz rm <version>.tar.gz
- Go konfigurieren
vi ~/.profile
folgenes hinzufügen:
PATH=$PATH:/usr/local/go/bin GOPATH=$HOME/go
- Update shell:
source ~/.profile
- Test ob alles ok ist
go version
Influxdb aus github ziehen und compilieren
Folgende Instruktionen ausführen => Achtung! Beim checkout die korrekte influx-version ziehen, also jene, die aktuell über die Packet-Installation installiert und dann auf hold gesetzt wurde. Bei mir ist das Version 1.8.6.
git clone https://github.com/simonvetter/influxdb.git cd influxdb git checkout origin/1.8.6+big_db_32bit mkdir build # target 32-bit ARM architectures, use GOARCH=386 for 32-bit Intel/AMD export GOARCH=arm go build -o build/influx_stress cmd/influx_stress/*.go go build -o build/influx_tools cmd/influx_tools/*.go go build -o build/influx_inspect cmd/influx_inspect/*.go go build -o build/influxd cmd/influxd/main.go go build -o build/influx cmd/influx/main.go
Nun befinden sich die 32-bit binaries im build-verzeichnis:
cd ~/influxdb/build
Als nächstes die „alten“ binaries backupen (sicher ist sicher)
mkdir ~/influxbackup-binaries sudo cp /usr/bin/influx* ~/influxbackup-binaries/
Nun die neuen binaries über die alten kopieren
sudo service influxdb stop cd ~/influxdb/build sudo mv * /usr/bin/ sudo chown root:root /usr/bin/influx*
Jetzt die Konfig so anpassen, dass die DB nicht mehr ins Memory gezwungen wird:
sudo vi /etc/influxdb/influxdb.conf
[data] tsm-use-seek = true # use the seek accessor (what this whole PR is about) index-version = "tsi1" # use on-disk index files instead of keeping them in-memory max-concurrent-compactions = 1 # avoid running multiple compactions at once [coordinator] query-timeout = "60s" # kill runaway queries (you may want to adjust the value depending on your hardware and query set)
Jetzt System restarten
sudo shutdown -r now
Ab sofort sollte die Influx-DB nicht mehr so Speicherhungrig sein und die Systemtemperatur hat sich bei mir auch bei rund 48° eingependelt. Der „cannot allocate memory“ Fehler ist seit dem nicht mehr aufgetaucht => check 🙂
Grafana installieren (OSS Release)
Installation
Installation wird auch hier beschrieben: https://grafana.com/docs/grafana/latest/installation/debian/
sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana
Konfiguration
Die Configuration von Grafana findet man hier
Ich hatte nach einem Upgrade von Version 7.5 auf Version 8 das Problem (If you’re seeing this Grafana has failed to load its application files), dass gewisse „Embedded-Browser“ nicht mehr funktionierten. Deswegen verwende ich fix Version 7.5.10. Mit dieser gings noch…Dafür musste ich aber ein Downgrade durchführen und anschliessend das Paket auf „halten“ setzen:
sudo apt-get install grafana=7.5.10 sudo apt-mark hold grafana
sudo vi /etc/grafana/grafana.ini
# Grafana soll als eingebettetes Frame angezeigt werden können: allow_embedding = true
[auth.anonymous] # enable anonymous access enabled = true # specify organization name that should be used for unauthenticated users org_name = Home # specify role for unauthenticated users org_role = Viewer # mask the Grafana version number for unauthenticated users hide_version = false
[date_formats] # For information on what formatting patterns that are supported https://momentjs.com/docs/#/displaying/ # Default system date format used in time range picker and other places where full time is displayed full_date = DD-MM-YYYY HH:mm:ss # Used by graph and other places where we only show small intervals interval_second = HH:mm:ss interval_minute = HH:mm interval_hour = DD/MM HH:mm interval_day = DD/MM interval_month = MM-YYYY interval_year = YYYY
default_timezone = Europe/Zurich
Telegraf installieren
Telegraf wird benutzt um die Modbus-Daten abzufragen und nach influxdb zu senden.
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - source /etc/lsb-release / ODER source /etc/armbian-release echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update && sudo apt-get install telegraf sudo service telegraf start
Damit läuft telegraf zum aktuellen Zeitpunkt mit Version 1.20.0. Diese Version scheint mit den Versionen von Grafana und Influxdb sehr gut zu funktionieren (nach rund 2 Monaten Test). Ich halte deswegen auch hier an dieser Version fest:
sudo apt-mark hold telegraf
Influxdb als output plugin konfigurieren
DB und User auf influxdb erstellen
influx -username 'admin' -password '<password>'
CREATE DATABASE "telegraf" CREATE USER "telegraf" WITH PASSWORD "<userpassword>" GRANT ALL ON "telegraf" TO "telegraf"
Konfig anpassen
sudo vi /etc/telegraf/telegraf.conf
[[outputs.influxdb]] urls = ["http://127.0.0.1:8086"] #influxdb und telegraf laufen auf dem selben server database = "telegraf" ## HTTP Basic Auth username = "telegraf" password = "<password>"
Modbus als input plugin konfigurieren
sudo vi /etc/telegraf/telegraf.conf
Alle input Plugins (CPU, etc.) deaktivieren. Anschliessend Modubs konfigrieren:
[[inputs.modbus]] name = "SE_PowerTagLink_F21" slave_id = 150 timeout = "5s" controller = "tcp://<ip>:502" holding_registers = [ { name = "PowerTag_Garage - Current C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3003,3004]} ] [[inputs.modbus]] name = "SE_PowerTagLink_Hauszuleitung" slave_id = 154 timeout = "5s" controller = "tcp://<ip>:502" holding_registers = [ { name = "PowerTag_Hauszuleitung - Current A", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [2999,3000]}, { name = "PowerTag_Hauszuleitung - Current B", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3001,3002]}, { name = "PowerTag_Hauszuleitung - Current C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3003,3004]}, { name = "PowerTag_Hauszuleitung - Voltage A-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3027,3028]}, { name = "PowerTag_Hauszuleitung - Voltage B-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3029,3030]}, { name = "PowerTag_Hauszuleitung - Voltage C-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3031,3032]}, { name = "PowerTag_Hauszuleitung - Voltage A-B", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3019,3020]}, { name = "PowerTag_Hauszuleitung - Voltage B-C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3021,3022]}, { name = "PowerTag_Hauszuleitung - Voltage C-A", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3023,3024]}, { name = "PowerTag_Hauszuleitung - Active Power", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3059,3060]}, { name = "PowerTag_Hauszuleitung - Power Factor", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3083,3084]}, { name = "PowerTag_Hauszuleitung - Active Energy No reset", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3203,3204,3205,3206]}, { name = "PowerTag_Hauszuleitung - Active Energy Resetable", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3255,3256,3257,3258]}, { name = "PowerTag_Hauszuleitung - Active Energy Write Value", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3259,3260,3261,3262]} ]
Chronograf installieren
Chronograf eignet sich als Query-GUI auf die Influxdb und bietet GUI Unterstützung beim erstellen von InfluxQL und Flux Queries
sudo apt-get install chronograf
Anschliessend Browser URL von chronograf öffnen
http://grafana.home.arpa:8888/
Commands
Zeige influxdb version
influxd version
Login
influx -username <username> -password <password>
Benutzer anzeigen
show users
Zeige alle DBs
show databases
Zeitserie löschen (Beispiel)
DROP SERIES FROM "rawdata" WHERE "name" = 'XTH_U01-01 humidity'
Links
- https://community.influxdata.com/t/regular-issues-compacting-tsi-files-very-high-load-cannot-allocate-memory/22206
- https://github.com/influxdata/influxdb/pull/12362#issuecomment-953126323
- https://www.jeremymorgan.com/tutorials/raspberry-pi/install-go-raspberry-pi/