プロジェクト

全般

プロフィール

InfluxDB

概要

InfluxDBは、NoSQLの時系列データベースに分類されるデータベースです。

TSM (Time Structured Merge Tree) と呼ぶ列指向のストレージエンジンに、タイムスタンプ、タグおよびフィールド値から構成されるPointデータを高速に読み書きします。Pointデータのフィールド値は、timestamp、float、integer、boolean型であれば列指向により差分符号化、string型についてはSnappy圧縮を使い、ストレージの使用量を低減します。
データの格納は、シャードと呼ぶある一定の時間範囲のデータを特定のファイルに格納します。

この仕組みから、ある時刻範囲のデータを取り出すのが非常に得意です。

古いデータを時刻に基づき自動で削除できるRetention Policyを搭載しており、永続保存か、期限付き保存かを Measurementごとに指定できます。

データベースへの問い合わせは、Fluxと呼ぶ関数指向の問い合わせ言語が用意されています。

トランザクションのACIDは一部を満たしていません。

インストールと初期設定

インストール

macOS

初期設定

操作

インタフェース

Web UI

デフォルトで、8086ポートにWebブラウザでアクセスすると、InfluxDBの管理アプリケーションのWeb画面を利用できます。
InfluxDBインストール後の初回アクセス時は、[GET STARTED]ボタンのみ表示され、初期設定を実施します。
設定終了後にアクセスすると、ログイン画面となります。

データの検索・表示は、Data Explorer を使います。
データの登録は、Load Data(左側[↑]アイコンから Sources、File Upload で、CSVファイルまたはLine Protocolファイル)

コマンドライン

influxコマンドで操作を行います。
書式: influx [command]

接続先のInfluxDBの指定、使用するOrganization、認証するためのTokenを指定します。

~ % influx bucket list \
 --host http://localhost:8086 \
 --org myorg \
 --token VxbEWU-7RILekvTsFegpInGpEozHeoGGP2KFj16E9GkXI7f0tTIue3AR6iKZm51NwWrGZAbZQbjtdtNhAzov6w==
  • --hostで接続先を指定、同じマシン上で実行しているInfluxDBに接続(省略可能、省略した場合、ローカルマシンの8086ポートが使用される)
  • アクセスのためのTokenは、権限を指定して生成しておきます。簡単に生成・削除できるので、必要に応じて作ります。
    (上述はドキュメント用に生成したtokenで、生成後、破棄済みです)

コマンドラインで毎回指定する他、環境変数に定義する方法もあります。INFLUX_HOSTは省略時ローカルマシンの8086ポートが使用。

  • INFLUX_HOST, INFLUX_ORG, INFLUX_TOKEN
    export INFLUX_ORG=myorg
    export INFLUX_TOKEN=VxbEWU-7RILekvTsFegpInGpEozHeoGGP2KFj16E9GkXI7f0tTIue3AR6iKZm51NwWrGZAbZQbjtdtNhAzov6w==
    
authコマンド

authコマンドには、さらに create, delete, list, active, inactive コマンドがあります。

tokenを確認するには、influx auth ls を実行します。

backupコマンド
bucketコマンド

bucketコマンドには、さらに create, delete, list, update コマンドがあります。

deleteコマンド
exportコマンド
orgコマンド

orgコマンドには、さらに create, delete, list, members, update コマンドがあります。

queryコマンド
restoreコマンド
writeコマンド

PointデータをLine protocol形式で指定してデータベースに書き込みます。


h4. REST API

InfluxDBへの問い合わせには、REST APIが使えます。

h3. データ

h4. データの階層

<pre>
Bucket
  +-- Measurement
        +-- Point data
</pre>

RDBMSのdatabaseに相当するものがBucketです。
RDBMSのtableに相当するものがMeasurementです。
RDBMSのrowに相当するものが Point です。
RDBMSのcolumnに相当するものが、Time, Tag, Field です。
Timeは、1つだけ必須で存在するPointのタイムスタンプ情報です。(主キーのようなもの)
Tagは、文字列のKey-valueペアから成り、複数定義可能で、インデックスで検索時に条件指定に使うことができます。時刻とともに変化する時系列データ自体ではなく、データの属性として、例えばセンサーID、位置、種別などをデータに与えます。
Fieldは、文字列のKeyと、ある型のvalueペアから成り、時系列で変化する実際の値を持ち、複数定義可能です。

h4. データの構成

InfluxDBでは、Pointデータが1件の基本的なデータ構成となります。
Pointデータは、Measurement、tagセット、fieldセットとタイムスタンプから構成されます。
Pointデータの正規化された表現形式をLine Protocolと呼びます。

<pre>
my measurement,tag1=val1,tag2=val2 field1="v1",field2=1i 0000000000000000000
-------------- ------------------- --------------------- -------------------
Measurement     tag set             field set              timestamp
</pre>

Pointデータは、指定したmeasurementに timestampとともに格納されます。時系列データベースなので、timestampが特別扱いされます。
field setは、1つ以上のfieldの名前と値の組み合わせで構成されます。
tag setは、0個以上のkey-valueのデータの組み合わせで、主に条件付きでデータを検索する際に使用されます。
timestampは、UNIX timeのナノ秒表現です。登録データのLine protocolでは、timestampを省略した場合、登録時のサーバー時刻が適用されます。

h4. CSVデータ

データを登録する際に、注釈付きのcsvデータを使用できます。
https://docs.influxdata.com/influxdb/v2/reference/syntax/annotated-csv/
→ 書式が少し複雑そう

1行目に #で開始する注釈(Annotation)でLine protocolの構成・型情報を定義します。
2行目に、名前(key)を定義します。
3行目以降に、Line protoclに基づくデータを記述します。

例)datatypeアノテーションを指定

<pre>
#datatype measurement,tag,double,double,dateTime:RFC3339
name, sensor, temperature, humidity, time
weather,H103,31.8,78.1,2024-08-30T00:00:00Z
weather,H103,34.2,75.4,2024-08-30T03:00:00Z
weather,H103,35.9,73.2,2024-08-30T06:00:00Z
</pre>

datatypeアノテーションで、最初のカラムがmeasurement、2列目がタグ、3列目と4列目がフィールドで型がdouble、5列目が時刻でRFC3339形式を指定しています。

タグとフィールドについては、2行目の見出し行にある名前がkeyとして使用されます。

h4. ストレージの構造

Pointデータの書き込みバッチは、まずWAL(先行書き込みログ)にfsyncされruとともに、メモリ上のcacheに書き込まれます。
WALは、クラッシュリカバリに使うための追記型ファイルです。
cacheは、クエリーに備えてPointデータをメモリに保管しています。WALはクエリには適さないためです。
Pointデータは、cacheから定期的にTSMに書き込まれて永続化されます。TSMは一定期間の時間(shard group duration)で分割されるチャンクに構成されます。

h3. クエリ

InfluxDBでは、Ver.1で用意されたInfluxQLと、Ver.2で追加されたFluxとの2つのクエリ言語が利用できます。

h2. 初期設定

h3. インストール後の設定

h4. Web UIからの設定

InfluxDBをインストールした後、データベース実行して Web UIからアクセスすると、[GET STARTED]ボタンが表示され、クリックすると初期設定画面が表示されます。

設定事項は次です。

* Username
WebUIアクセスで認証するユーザー名
* Password
WebUIアクセスで認証するパスワード(8文字以上)
* Initial Organization Name
任意の名前を設定、複数ユーザーを束ねるグループの概念(workspace)
* Initial Bucket Name
最初に作成するbucketの名前

入力後、アクセスに必要なTOKENが表示されるのでコピーをとっておきます。(全権限を持つTOKEN)

h2. 練習

h3. 練習データベースの作成と利用

* [[InfluxDB_excercise-1]] 

h2. トラブルシュート

h4. ユーザー・パスワード指定で接続がエラー

<pre>
$ curl -G http://www.torutk.com:8086/query -u <ユーザー名>:<パスワード> --data-urlencode "q=SHOW DATABASES" 
{"code":"unauthorized","message":"Unauthorized"}
</pre>

InfluxDB 2.xでは、ユーザー・パスワード指定でREST APIがエラーを返しています。
そこで、Tokenを使用して接続します。

<pre>
$ curl -G http://www.torutk.com:8086/query  --data-urlencode "q=SHOW DATABASES" \
--header "Authorization: Token <トークン文字列>" 
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_monitoring"],["_tasks"],["mybucket"]]}]}]}
</pre>

{{fnlist}}

<div id="wiki_extentions_footer">

---

p=. {{lastupdated_at}}

</div>