2023 年度 データベースII : InfluxDB のインストールと利用

はじめに

InfluxDB は大量の時系列データ (時刻と値の組み合わせデータ) を蓄積・活用するために最適化されたオープンソースのデータベースである. IoT で行われるような絶え間なく送られて送るセンサーデータを取り扱うのに向いていると言われている.

InfluxDB では Flux という問い合わせ言語が実装されている. InfluxDB はリレーショナルデータベースではないが, SQL に似た InfluxQL という独自の問い合わせ言語も利用することができる.

マニュアルなど

参考

データ構造の特徴

データ構造を決め打ちしているところが大きな特徴である. 後述するデータ入力用の csv ファイルの中身を確認するのがわかりやすいが, データには必ず _time (時刻), _value (値), _field (温度,湿度など), _measurement (RDBMS のテーブルに相当) が必要となっている.

host,_time,_value,_field,_measurement
cps00,2020-09-24T11:16:00Z,23.26,temperature,myroom
cps00,2020-09-24T11:17:00Z,23.14,temperature,myroom
cps00,2020-09-24T11:18:00Z,23.2,temperature,myroom
cps00,2020-09-24T11:19:00Z,23.44,temperature,myroom
cps00,2020-09-24T11:20:00Z,23.42,temperature,myroom
...(略)...

RDBMS に当てはめて考えると,_measurement というテーブルの中に _time, _field, _value というカラムがあり,そこに 時刻・センサーの種別・センサーの値が保存されていると見做すことができる.

用語

  • measurement : リレーショナルデータベースのテーブルに相当するもの
  • Bucket : リレーショナルデータベースのデータベースに相当するもの
  • organization : bucket は 1 つの organization に所属する.

InfluxDB のインストール

Debian パッケージで提供されている InfluxDB は ver. 1.6 となっており, だいぶ古い.ここでは 2023/06/06 時点で最新の ver. 2.7 をインストールすることにする. 以下では公式のインストールガイド に従って作業を行う.

Influxdb のソースファイルをダウンロードする.curl は influxdb2 をインストールするために必要なので先にインストールしている.

$ sudo -s  

# apt update

# apt install curl

# cd /usr/local/src

# wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.0-amd64.deb

# dpkg -i influxdb2-2.7.0-amd64.deb

起動および確認."active (running)" になっていれば OK.

# systemctl enable influxdb     (再起動時に自動起動する設定)
# systemctl start influxdb      (起動)

# systemctl status influxdb     (ステータスの確認)

  ● influxdb.service - InfluxDB is an open-source, distributed, time series database
  Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enabled)
  Active: active (running) since Tue 2023-06-06 15:22:56 JST; 3s ago                      <-- この行に注目
  ...(以下略)...

InfluxDB のバージョンの確認.

# influxd version

   InfluxDB v2.7.0 (git: 85f725f8b9) build_date: 2023-04-05T15:32:25Z

# exit
$

InfluxDB のセットアップ

公式の「Set up InfluxDB」 に従ってセットアップを行う.

Web ブラウザ上でセットアップしてみる.http://10.176.0.1XX:8086 にアクセスすること (XX は自分の VM に合わせて設定すること).但し,表示された Token は必ずコピーしておくこと.

次に作成した Organization : J4db と bucket : sample にサンプルデータを投入する. 下図のように選択していき,

InfluxDB CLI (コマンドラインインターフェイス) を選択する.

overview

YouTube ビデオ を眺めてみると良い.

Install Dependencies

Linux をクリックして,その指示に従って influxdb-client をインストールする. 但し,ダウンロードが指示されているパッケージが ver. 2.3 で若干古いので, ここでは ver. 2.7 をダウンロードして使うことにする.

$ sudo -s
# cd /usr/local/src

# wget https://dl.influxdata.com/influxdb/releases/influxdb2-client-2.7.3-linux-amd64.tar.gz
# tar zxvf influxdb2-client-2.7.3-linux-amd64.tar.gz
# mv influx /usr/local/bin/

# exit

Initialize Client

プロファイルを作る.組織 (org) 名など,大文字小文字の区別があるので注意.

$ influx config create --config-name myprofile \
     --host-url "http://10.176.0.148:8086"                    # URL は自分の VM にすること
     --org j4db \                                             # Web で作成したものを指定. 
     --token XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX== \   # コピーしておいた Token をコピペ
     --active

  Active  Name            URL                     Org
  *       myprofile       http://localhost:8086   j4db

Write Data

サンプル csv データの入力. "URL to file" をクリックして表示されたコマンドを入力する.

$ influx write --bucket sample \
  --url https://influx-testdata.s3.amazonaws.com/air-sensor-data-annotated.csv

補足

ローカルに保存されている csv ファイルを入力する場合は以下のようにする.

$ wget https://influx-testdata.s3.amazonaws.com/air-sensor-data-annotated.csv
$ influx write --bucket j4db --file air-sensor-data-annotated.csv

確認 (Flux)

コマンドラインでデータが入力されたか確認する.

$ influx query 'from(bucket:"sample") |> range(start:-30m)'

次に,ブラウザ上でも確認する.ブラウザではグラフも作ってくれるので便利である.

左カラムで "Data Explore" を選択し,Bucket : sample の中の Measurement に airSensors (サンプルファイルで入力したもの) があるか確認する.あれば, 以下の図のようにデータを書いてみる.

なお,上図において Flux で以下の命令を書いた.

from(bucket:"sample2")
|> range(start:-200m)
|> filter(fn: (r) => r._measurement == "airSensors" )
|> filter(fn: (r) => r._field == "temperature" )

確認 (InfluxQL)

コマンドラインで InfluxQL でデータを確認するときは以下のようにすると良い. influx コマンドで v1 shell を指定すると,SQL と同様なコマンド体系 (InfluxQL) が利用できる.

$ influx v1 shell

  > show databases
  > use sample
  > select * from airSensors

課題

内容

InfluxDB でデータの新たな bucket (sample2) を作成し, そこに CSV ファイルよりにデータを入力しなさい. そして influxDB で以下の移動平均を行った結果をグラフ化し, そのスナップショットを提出しなさい (URL バーを必ず含めること).

  • 10 分平均値 (前 10 分平均) →10:10 の値は 10:00~10:10 の平均値とする.
  • 60 分平均値 (10 分間隔のデータから, 毎正時の値を抽出) →10:00 の値は 09:50~10:10 の平均値とする.
  • 1 日ごとの平均値・最大値・最小値・標準偏差

なお,この移動平均の取り方は, 気象観測統計の解説 を参照している.

やり方

CSV からのデータ入力

データを取得して,influxDB に入力する.

$ wget https://www.gfd-dennou.org/arch/iotex/oss/IoTeX_2023/myroom_influxdb.csv

$ influx bucket create --name my_monitotring -c myprofile

$ influx write --bucket my_monitoring --file myroom_influxdb.csv

データ表示

ブラウザ上でデータを表示してみる.

from(bucket:"my_monitoring")
|> range(start:-3y)
|> filter(fn: (r) => r._measurement == "myroom" )
|> filter(fn: (r) => r._field == "temperature" )

移動平均

移動平均は mariaDB では組み込み関数が無く,それゆえ influxDB の 方が扱いやすい. 移動平均Window and aggregate といった機能を用いて実行することができる.

発展

Grafana のインストールを行い,Grafana 上で MariaDB と InfluxDB をソースとしてデータを表示せよ.