InfluxDB 1.7 の使い方 その2( RETENTION POLICY , CONTINUOUS QUERY )

メモ:

InfluxDB では、データを保持しておく期間を指定することができ期限が過ぎたデータを自動的に削除することができます。また、定期的にデータの解像度を下げたデータを生成したりすることもできます。

【動作環境】

  • CentOS 7
  • InfluxDB 1.7

データ保持期間に関するポリシー[RETENTION POLICIES(RP)]

InfluxDB にデータベースを作成すると autogen という名前の保持期間無期限のポリシーが作成されます。作成されているポリシーを確認するには、「 SHOW RETENTION POLICIES 」コマンドを実行します。

# influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> USE データベース名
Using database factory_env
> SHOW RETENTION POLICIES
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true
>

例えば、 「 factory_env 」 データベースに RETENTION POLICY を1時間で作成します。

> CREATE RETENTION POLICY "one_hour" ON "factory_env" DURATION 1h REPLICATION 1 DEFAULT

DURATION に保持しておく期間を指定し、 DEFAULT と付加することでデータベースのデフォルトポリシーとしています。

REPLICATION は、クラスター構成時に影響を与えるようですが必須パラメータとなっておりシングルノードインスタンスの場合は、「1」になります。

> SHOW RETENTION POLICIES ON "factory_env"
name     duration shardGroupDuration replicaN default
----     -------- ------------------ -------- -------
autogen  0s       168h0m0s           1        false
one_hour 1h0m0s   1h0m0s             1        true

設定されたことを確認し、しばらくしてからデータを確認するとおよそ 1時間 分のデータが残っていることが確認できます。

DURATION の単位

Units Meaning
ns nanoseconds (1 billionth of a second)
u or µ microseconds (1 millionth of a second)
ms milliseconds (1 thousandth of a second)
s second
m minute
h hour
d day
w week

ダウンサンプリング

もう一つ特徴的な機能として「 CONTINUOUS QUERY 」という機能があり、データの解像度を下げたデータを作ることができます。

また、 measurement と RETENTION POLICY はセットとして扱うことができポリシーに紐ついた状態でデータを管理することができます。

例えば、1年分のデータを保持する RETENTION POLICY を作成します。

> CREATE RETENTION POLICY "yearly" ON "factory_env" DURATION 52w REPLICATION 1
> SHOW RETENTION POLICIES ON "factory_env"
name     duration  shardGroupDuration replicaN default
----     --------  ------------------ -------- -------
autogen  0s        168h0m0s           1        false
one_hour 1h0m0s    1h0m0s             1        true
yearly   8736h0m0s 168h0m0s           1        false

「 CONTINUOUS QUERY 」を使って15分単位にまとめたデータを downsampling_env という measurement に追加していきます。このとき、事前に作成しておいた RETENTION POLICY に紐付けておくことができます。

> CREATE CONTINUOUS QUERY "cq_15m" ON "factory_env" 
    BEGIN 
        SELECT mean("temp") AS "mean_temp" INTO "yearly"."downsampling_env" 
        FROM "environment" 
        GROUP BY time(15m) 
    END

しばらくしてからデータを確認すると yearly.downsampling_env に指定単位でデータができていることを確認できます。

> SELECT * FROM yearly.downsampling_env
name: downsampling_env
time                 mean_temp
----                 ---------
2019-08-08T15:45:00Z 37.77499999999999
2019-08-08T16:00:00Z 38.425
2019-08-08T16:15:00Z 38.3
2019-08-08T16:30:00Z 37.525000000000006