概要
時系列データベース InfluxDB の Ruby クライアント influxdb
の簡単な使い方をメモしています。
influxdb-ruby 0.8.0
テスト環境の用意
Docker に公式のイメージが用意されているのでそれを使います。
docker run -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb
gem のインストールを行います。
gem install influxdb
使い方
データベースの作成や削除
require 'influxdb'
database = 'db1'
influxdb = InfluxDB::Client.new database
# 作成
influxdb.create_database(database)
# 削除
influxdb.delete_database(database)
# リスト
influxdb.list_databases
書き込み
name = 'foobar'
data = {
values: { value: 0 },
tags: { foo: 'bar', bar: 'baz' },
timestamp: Time.now.to_i
}
influxdb.write_point(name, data)
# バッチ処理
data = [
{
series: 'foobar',
values: { value: 1 },
timestamp: Time.now.to_i
},
{
series: 'foobar',
values: { value: 2 },
timestamp: Time.now.to_i
}
]
influxdb.write_points(data)
アイテム保持ポリシー
一定期間経過した後に自動的にデータを削除する機能
# ポリシーの作成
database = 'db1'
name = '1h.cpu'
duration = '1h'
replication = 2
influxdb.create_retention_policy(name, database, duration, replication)
# ポリシーを使ったデータの書き込み
name = 'foobar'
data = { values: { value: 0 } }
retention = '1h.cpu'
influxdb.write_point(name, data, nil, retention)
# ポリシーの削除
influxdb.delete_retention_policy(name, database)
クエリ
influxdb.query 'select * from foobar'
# => [{"name"=>"foobar", "tags"=>nil, "values"=>[{"time"=>"2020-04-17T05:32:36Z", "bar"=>"baz", "foo"=>"bar", "value"=>0}]}]
# 特定のフィールドに四則演算した値を取得する
influxdb.query 'select ("value" + 2) * 3 from foobar'
# => [{"name"=>"foobar", "tags"=>nil, "values"=>[{"time"=>"2020-04-17T05:32:36Z", "bar"=>"baz", "foo"=>"bar", "value"=>6}]}]
# 非正規化されたデータを受け取る
influx.query 'select * from foobar', denormalize: false
# => [{"name"=>"foobar1", "columns"=>["time", "bar", "foo", "value"], "values"=>[["2020-04-17T05:32:36Z", "baz", "bar", 0]]}]