InfluxDB 2.xのセットアップと動作確認
時系列データを保存するためのデータベースとして、 InfluxDB を使用します。ただ調べてみると古い情報が割と検索で見つかり、設定に手間取ったので、本記事を作成しました。次回の構築作業時に躓かないようにするためのものですが、他の人の参考になったら幸いです。
なお、記事を書いている時点の 2.6 で以下の内容を確認しています。
InfluxDB のセットアップ
セットアップには手っ取り早く Docker コンテナイメージを使わせてもらいます。
以下の内容で docker-compose.yml
ファイルを作成します。
version: "3"
services:
influxdb:
image: influxdb:2.6.1
volumes:
- ./docker/influxdb/data/influxdb2:/var/lib/influxdb2
- ./docker/influxdb/data/config:/etc/influxdb2
ports:
- "8086:8086"
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=my-user
- DOCKER_INFLUXDB_INIT_PASSWORD=my-password
- DOCKER_INFLUXDB_INIT_ORG=my-orgs
- DOCKER_INFLUXDB_INIT_BUCKET=my-bucket
- DOCKER_INFLUXDB_INIT_RETENTION=1w
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=my-secret-token-data
このファイルでは初期アカウント情報として、以下の設定となっています。使用する際には変更をお願いします。
- ユーザー : my-user
- パスワード : my-password
- オーガニゼーション: my-orgs
- バケット : mybucket
- トークン情報 : my-secret-token-data
おなじみの以下のコマンドでこのコンテナを起動します。
docker-compose up -d
起動後にブラウザで、http://localhost:8086/ にアクセスすると以下のような画面が表示されます。
ここで先ほど設定してあったアカウントでログインすることができます。
既にオーガニゼーションおよびバケットは作成済みですが、中身が空っぽなので値の表示はできません。
データの投入
Web の GUI 画面からデータを投入する方法も多く見かけますが、ここでは各デバイスのセンシングした値を投入することを想定して、GUI を用いずデータを登録する方法を紹介します。
curl を用いてデータを登録する
一番手軽なのが curl コマンドを用いて、データを登録する方法です。
InfluxDB では一般的に見かける JSON フォーマットではなく、データをラインプロトコルという形式で投入します。
基本的なデータ構造は以下の通りです。このうち measurement と field_set の部分が必須となっています。
| measurement |,tag_set| field_set | timestamp |
field_set は複数含まれていてもよく、複数登録する場合にはカンマ区切りで繋げます。
このフォーマットで curl から POST コマンドを発行すると対象のバケットにデータを投入します。そのコマンド例が以下の通りです。
curl -X POST \
"http://myuser:my-password@localhost:8086/api/v2/write?org=my-orgs&bucket=mybucket" \
-d "cpu_data value=100" \
--header "Authorization: Token my-secret-token"
作成したアカウント情報と、書き込み先となるオーガニゼーションおよびバケットの指定を URL として渡します。そして、ボディの部分にラインプロトコルの記述で情報を設定します。
また、Authorization ヘッダが必要で、トークン情報をここに設定します。この設定が抜けるとアカウントの指定があっても、 "unauthorized" のエラーとなります。
データの確認
InfluxDB の Web にて、Data Explorer のページから投入したデータの確認ができます。
バケットを選ぶと中に含まれている measurement が表示されるので、グラフ部分に表示するデータ系列(フィールド)を選択します。
RDB でいうところのテーブルは InfluxDB において Measurement が相当する模様です。
感想
curl でデータを POST して記録できるという点で、かなりお手軽にデータを記録できると思いました。他のデータベースを用いる場合では、クライアントのライブラリを用いて簡単に投入できますが、それ以上に手軽でした。
もちろん、InfluxDB 用のライブラリもあるようで、プログラム中から送信する場合にはそれらのお世話になるほうが良いと思います。
ただ /proc や /sys, /dev 以下を定期的に読み取る場合だとbash のワンライナーでできることも多く、それらをDBに記録したいとなると、 curl でさっと記録できることは大変便利です。
Discussion