1500 万人の時系列データベースファンの皆様、おはようございます。かっぱです。
はじめに
InfluxDB
をRuby
経由で使いたくなったのでメモGrafana
と連携が簡単なので合わせてメモ
InfluxDB のうんちく
うんちくよりも以下の参考サイト。
- 本家
- InfluxDB をちょっとさわってみた
- InfluxDB と fluentd を組み合わせを試してみた
- InfluxDB を10分だけ触ってみた
- Grafana on InfluxDB をちょっとだけ触ってみた
ざっくり言うと...
time series database
(時系列データベース)の一つ- イベントデータ等の時系列なデータを蓄積するのに特化している
- バックエンドでは
leveldb
というエンジンが動いている - 実装は
go
HTTP
でデータの登録や検索可能- スキーマレス
SQL
ライクなクエリWeb UI
が同梱されているRDBMS
で言うところのデータベースのことは同じくデータベースと呼ぶ- テーブルのことは
series
と呼ぶようだ - 絶賛開発中(というイメージ)
個人的な印象としては...
- セットアップ簡単(簡単に Dcokerfile に落とし込めた)
- 軽量
SQL
ライクなところは良いWeb API
が不親切(だと思った)→レスポンスはヘッダを見ろとのことで...
InfluxDB の構築
docker build からの docker run
Dcokerfile を作ったのでそやつを利用する。
git clonehttps://github.com/inokappa/dockerfiles.git cd dockerfiles/InfluxDB docker build -t your_name/your_repo .
build
が終わったら run
する。
docker run -t -d your_name/your_repo
run
したらブラウザでアクセスしてみる。
おお、とっても簡単。
Ruby から InfluxDB を操作する
influxdb/influxdb-ruby の一択
今のところ influxdb/influxdb-ruby が一択。
インストールは...
sudo gem install influxdb-ruby --no-ri --no-rdoc -V
簡単ですな。
サンプル(1)データベース作成
tutorial
というデータベースを 'xxx.xxx.xxx.xxx' 上の InfluxDB
に作成する。
#!/usr/bin/env ruby require 'influxdb' database = 'tutorial' influxdb = InfluxDB::Client.new host: 'xxx.xxx.xxx.xxx' influxdb.create_database(database)
簡単ですな。
サンプル(2)データベースにデータを登録
tutorial
というデータベースに test1
から test5
のシリーズにランダムな数字を順次書き込む。
#!/usr/bin/env ruby require 'influxdb' host = 'xxx.xxx.xxx.xxx' username = 'xxxx' password = 'xxxx' database = 'tutorial' time_precision = 's' influxdb = InfluxDB::Client.new database, :username => username, :password => password, :host => host, :time_precision => time_precision NAMES = ['test1', 'test2', 'test3', 'test4', 'test5'] NAMES.each do |name| data = { :value => rand(10000) + 1, :time => Time.now.to_i } influxdb.write_point(name, data) end
Grafana との連携
config.js
Grafana
の config.js
に以下を設定する。
datasources: { influx: { default: true, type: 'influxdb', url: "http://xxx.xxx.xxx.xxx:8086/db/tutorial", username: 'root', password: 'root', } },
ポチポチと...
サンプル(2)を cron
で叩かせた状態でメトリクスを Grafana
で見てみる。
config.js
の設定が適切であればデータベースやシリーズの情報が Grafana
に自動で読み込まれているのでポチポチとメトリクスの設定を行っていく。
こんな感じで...
出来ました。
引き続き
- influxdb/influxdb-ruby を使いながら
InfluxDB
のAPI
について理解を深めていきたい