InfluxDB
Die Time-Series-Datenbank (Zeitreihendatenbank) InfluxDB gibt es in einer Open Source- (OSS) und einer Enterprise-Edition. Die Enterprise-Edition bietet zusätzlich:
einen HA-Modus
Verwaltung lokaler Benutzer
Anbindung an LDAP oder OAuth
Scale out
Eine verteilte InfluxDB mit synchronisierten Daten lässt sich mit der Open Source-Variante erreichen, indem man Telegraf die gesammelten Werte in mehrere InfluxDB-Instanzen schreiben lässt. Bedeutet aber auch, dass Schreibanfragen an Telegraf statt InfluxDB gerichtet werden müssen.
InfluxDB hört auf
HTTP API: Port 8086
Begriffe:
Measurement: wie „Table“ in einer SQL-Datenbank. Zu Measurements gehören eine oder mehrere Retention Policies. Bei Icinga erhält jedes Plugin sein Measurement, beispielsweise
cmd-check-swap
.Eine Serie besteht aus Retention Policy, Measurement und einem Tag Set. Series sehen so aus, im Beispiel aus einer Icinga-Datenbank:
# measurement ,"tag key"="tag value","tag key"="tag value", ... cmd-check-swap,hostname=myhost, metric=free, service=Swap cmd-check-swap,hostname=myhost, metric=swap-usage, service=Swap cmd-check-swap,hostname=myhost, metric=used, service=Swap cmd-check-swap,hostname=myhost, service=Swap
Tag: indizierte Spalte
Tag Key: Spaltenname
Tag Value: der Inhalt
Tag Set: alle Kombinationsmöglichkeiten aus „Tag Key“ und „Tag Value“
Connect und Execute:
# ask for password
influx -username 'influxdb-user' -password ''
# execute statement
influx -username 'influxdb-user' -password 'password' -execute 'SHOW RETENTION POLICIES ON icinga_influxdb'
- Links:
Doku (HTTP API): https://docs.influxdata.com/influxdb/latest/tools/api/
Installation und Konfiguration
[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
yum -y install influxdb
systemctl enable --now influxdb
reporting-disabled = true
Backup und Restore
Es ist zu beachten, dass User und User-Rechte nicht wiederhergestellt werden. Siehe https://github.com/influxdata/influxdb/issues/9685.
Backup:
influxd backup -portable /path/to/influxdb-dump
influxd backup
[ -database <db_name> ]
[ -portable ]
[ -host <host:port> ]
[ -retention <rp_name> ] | [ -shard <shard_ID> -retention <rp_name> ]
[ -start <timestamp> [ -end <timestamp> ] | -since <timestamp> ]
<path-to-backup>
Timestamps sind im RFC3339-Format anzugeben, also zum Beispiel als 2015-12-24T08:12:23Z
.
Restore:
Vor dem Restore müssen existierende Datenbanken per DROP DATABASE mydb
gelöscht werden. Nach dem Restore müssen User und User-Rechte von Hand nachgezogen werden.
influxd restore -portable /path/to/influxdb-dump
# restore a specific database with a new name
influxd restore -db old_db -newdb new_db -portable /path/to/influxdb-dump
Query Language
Umgang mit der DB:
influx -host 'localhost' -username 'influxdb-user' -password ''
SHOW DATABASES
USE icinga_influxdb
SHOW MEASUREMENTS
SHOW SERIES
SHOW RETENTION POLICIES
SHOW TAG KEYS FROM "cmd-check-about-me"
CREATE DATABASE measure
USE measure
INSERT temp inside=24.2,outside=10.1
# INSERT with two tags to enhance search speed
INSERT temp,room=bad,building=ferienhaus inside=24.2,outside=10.1
SELECT * FROM "temp"
SELECT * FROM temp WHERE "room" = 'bad'
SHOW TAG VALUES FROM "cmd-check-disk-usage" WITH KEY = "metric" WHERE "hostname" =~ /^myhost.*/ AND "service" = 'Disk Usage'
Die Double-Quotes in Abfragen sind Pflicht - ohne geht es nicht. Abfragen beherrschen reguläre Ausdrücke.
SELECT * FROM "cmd-check-disk-usage" LIMIT 10
SELECT "value" FROM "cmd-check-about-me" WHERE ("hostname" =~ /^myhost\.linuxfabrik\.ch$/ AND "service" = 'About me') AND time >= now() - 30d GROUP BY "metric" limit 2;
DROP SERIES FROM "cmd-check-cpu-usage" WHERE hostname='myhost'
DROM MEASUREMENT cmd-check-users
# gilt global
# Show Retention Policies
SHOW RETENTION POLICIES ON icinga_influxdb
# Drop a subscription
DROP SUBSCRIPTION "icinga-replication" ON "icinga"."autogen"
# Add Retention Policy
CREATE RETENTION POLICY "lf_retention_policy" ON icinga_influxdb DURATION 4320h REPLICATION 1 DEFAULT
# Alter Retention Policy
ALTER RETENTION POLICY "lf_retention_policy" ON icinga_influxdb DURATION 4320h REPLICATION 1 DEFAULT'
# Delete Retention Policy
DROP RETENTION POLICY "lf_retention_policy" ON icinga_influxdb
Siehe auch https://docs.influxdata.com/influxdb/v1.7/query_language
HTTP API
INSERTs etc. lassen sich wie oben mit dem CLI erledigen, meist ist das InfluxDB HTTP API aber dafür besser geeignet.
curl -i -XPOST --data-binary 'mymeasure,mytag=1 myfield=90 1463683075' "http://influxdb1:8086/write?db=measure&precision=s"
Sync
Es existieren verschiedene Ansätze, von denen die meisten nur die Enterprise-Version beherrscht. Siehe auch https://www.influxdata.com/blog/multiple-data-center-replication-influxdb/. Alternativ:
- Per rsync
Data-Verzeichnisse von InfluxDB1 auf InfluxDB2 syncen.
InfluxDB auf beiden Maschinen stoppen:
systemctl stop influxdb
Auf InfluxDB2:
rm -rf /var/lib/influxdb/*
Auf InfluxDB1:
rsync --archive /var/lib/influxdb/* influxdb2:/var/lib/influxdb/
InfluxDB auf der zweiten Maschine starten, dann auf der ersten:
systemctl start influxdb
- Per Backup und Restore
Siehe oben.
Built on 2023-03-17