InfluxDB excercise 1¶
概要¶
本練習では、InfluxDBに 作業領域(Organization)、データベース領域(Bucket)、テーブル(Measurement)を作成し、時系列データを書き込み、読み出しします。
No. | 項目 | 命名 |
---|---|---|
1 | Organization | ssweepers |
2 | Bucket | dawn1 |
3 | Measurement | telemetries |
Pointデータとして、タグセットに2つのタグ、フィールドセットに1つの浮動小数点数を持つものを定義します。
Measurement | tag | field | time | |
---|---|---|---|---|
source | category | BTMP4001 | ||
telemetries | OBC_P | HK_A | 13.5 | 2024-09-08T01:00:00Z |
操作¶
データベース構造の作成¶
Organizationとtokenの作成¶
ここでは、Influx DBインストール時に作成された org、tokenを使用してOrganizationを作成、そのOrganizationで使用するtokenを作成します。
- 環境変数 INFLUX_ORG には、インストール時に作成した org名を指定
- 環境変数 INFLUX_TOKEN には、インストール時に作成した tokenを指定
Organizatin作成¶
work % influx org create --name ssweepers ID Name 123456789abcdef0 ssweepers
Tokenの作成¶
work % influx auth create --org ssweepers --all-access
コマンドを実行すると、token文字列、権限の種類とパーミッションが表示されます。
以降、ここで生成したtokenを使用します。
環境変数の更新¶
influxコマンドラインコマンドを使用する場合、
環境変数 INFLUX_ORGとINFLUX_TOKENを変更します。
export INFLUX_ORG=ssweepers export INFLUX_TOKEN=WxbEWU-7RILekvTsFegpInGpEozHeoGGP2KFj16E9GkXI7f0tTIue3AR6iKZm51NwWrGZAbZQbjtdtNhAzov6w==
- tokenはドキュメント用に作ったものです(インストール時のものから先頭1文字変更しただけ)
Bucketの作成¶
work % influx bucket create --name dawn1 ID Name Retention Shard group duration Organization ID Schema Type 6789abcdef012345 dawn1 infinite 168h0m0s 123456789abcdef0 implicit
- デフォルトでは、Retentionポリシー(データの保持期限)は無限(infinite)、shard group duration(データの格納単位の期間)は1週間(168H)、Schema Typeはimplicit
データの登録¶
コマンドラインからのデータの登録¶
ラインプロトコルで指定したデータの登録¶
- データのタイムスタンプをUnix timeに変換しておく(BSD系dateコマンドの場合)
% date -u -j -f '%Y-%m-%d %H:%M:%S' '2024-09-08 01:00:00' +%s 1725757200
- influx コマンドでデータを登録
% influx write --bucket dawn1 --precision s \ "telemetries,source=OBC_P,category=HK_A BTMP4001=13.5 1725757200
- ラインプロトコルで指定する時刻は、UNIX timeとなります。年月日時分秒からUNIX timeに変換します。その際、デフォルトではナノ秒単位となるので、
--precision
オプションで単位を(us: マイクロ秒、ms: ミリ秒、s: 秒)で指定します。
ファイルに記述したPointデータの登録¶
テキストファイルにラインプロトコルで記述したデータを読み込み登録する方法、注釈付きCSVファイルに記述したデータを読み込み登録する方法があります。
コマンドラインで登録したデータの確認¶
コマンドラインで指定可能なクエリは、Flux言語となります。ワンライナーでFlux言語を記述するのはわかりにくいので、ファイルにFlux言語でクエリを記述しコマンドラインでそれを指定するのがよいでしょう。
- query1.flux
from(bucket: "dawn1") |> range(start: 2024-09-08T00:00:00Z, stop: 2024-09-30T23:59:59Z) |> aggregateWindow(every: 1m, fn: last, createEmpty: false)
- fromで、クエリ対象 Bucket を指定
- rangeで、クエリの対象とする時刻範囲を指定、絶対時刻の他、現在時刻からの相対指定(例: -1h)も可能
- aggregateWindowで、集約範囲とする時間幅、集約関数などを指定
- every: 集約範囲の時間、必須指定
- fn: 集約関数、必須指定、lastは集約範囲で最後(最新)の値を返す
- createEmpty: デフォルトはtrueで、集約範囲にデータがない場合でも出力する(その場合、実データが空で表示される)
Flux言語でクエリを記述したファイルを実行
work % influx query --file ./query1.flux
- --fileオプションの代わりにファイル名に
を付ける簡易な方法あり(@influx query @query1.flux
)
実行結果は、次の通りです。
work % influx query @query1.flux Result: _result Table: keys: [_start, _stop, _field, _measurement, category, source] _start:time _stop:time _field:string _measurement:string category:string source:string _time:time _value:float ------------------------------ ------------------------------ ---------------------- ---------------------- ---------------------- ---------------------- ------------------------------ ---------------------------- 2024-09-08T00:00:00.000000000Z 2024-09-30T23:59:59.000000000Z BTMP4001 telemetries HK_A OBC_P 2024-09-08T01:01:00.000000000Z 13.5
データの検索¶
データの取り出し¶
influx inspect export-lp¶
https://docs.influxdata.com/influxdb/v2/reference/cli/influxd/inspect/export-lp/
TSMデータから指定したBucketのデータを、ラインプロトコル形式でファイルにエクスポートします。
$ influxd inspect export-lp \ --bucket-id 12ab34cd56ef \ --engine-path /var/lib/influxdb/engine \ --measurement example-measurement-1,example-measurement-2 \ --start 2021-01-01T00:00:00Z \ --end 2021-01-31T23:59:59Z \ --output-path path/to/export.lp
h4.