InfluxDBのメモ
#Tech
目次
はじめに
InfluxDBは大量の時系列データを扱うことに長けたデータベースです。
InfluxDBは、CLIで操作する方法とHTTP APIで操作する方法が用意されている。
インストール
今回はUbuntuにインストールするため、こちらを参照します。
# Ubuntu and Debian
# Add the InfluxData key to verify downloads and add the repository
curl --silent --location -O \
https://repos.influxdata.com/influxdata-archive.key
echo "943666881a1b8d9b849b74caebf02d3465d6beb716510d86a39f6c8e8dac7515 influxdata-archive.key" \
| sha256sum --check - && cat influxdata-archive.key \
| gpg --dearmor \
| tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null \
&& echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' \
| tee /etc/apt/sources.list.d/influxdata.list
# Install influxdb
sudo apt-get update && sudo apt-get install influxdb2
インストール後の動作確認
sudo systemctl enable influxdb
sudo systemctl start influxdb
sudo systemctl status influxdb
influxはデフォルトでは8086ポートで動作しています。
初期設定
influx setup
コマンドでユーザ、パスワード等の初期設定を実施します。
influx auth create
コマンドでAPIトークンの生成を実施します。
influx setup
influx auth create --all-access --host http://{host_ip}:{host_port} --org {org_name}
データ追加
InfluxDBに登録するデータはline protocol形式になっています。
line protocolのフォーマットは下記のようになる。
{measurement},{tag1}={tag_val1},{tag2}={tag_val2} {field1}={field_val1},{field2}={field_val2}
CLI
influx write --bucket {bucket_name} --precision s "
{line protocol data}
"
API
curl --request POST \
--url 'http://{host_ip}:{host_port}/api/v2/write?org={org_name}&bucket={bucket_name}&precision=s' \
--header 'Authorization: Token {TOKEN}' \
--header 'content-type: text/plain' \
--data '
{line protocol data}
'
データ取得
データ取得には、Flux
とInfluxQL
を利用する方法がある。
InfluxQLはInfluxDB 0.xと1.xのためのものですが、互換性があるためInfluxDB 2.xでも利用できます。今回はInfluxDB 2.xを利用しているためFluxのみ利用していこうと思います。
Flux
Fluxには3つの主要な機能がある。
- from()
- bucketの指定
- range()
- タイムレンジや取得件数の指定
- filter()
- フィルタリングルールの指定
過去1時間でmeasurementがhomeにマッチする最後のレコードを取得する方法を下記に示します。
CLI
influx query '
from(bucket: "{bucket_name}")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "home")
|> last()
'
API
curl --request POST \
--url 'http://{host_ip}:{host_port}/api/v2/query?org={org_name}' \
--header 'Accept: application/csv' \
--header 'Authorization: Token {TOKEN}' \
--header 'Content-type: application/vnd.flux' \
--header 'content-type: text/plain' \
--data '
from(bucket:"{bucket_name}")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "home")
|> last()
'