ようへいの日々精進XP

よかろうもん

InfluxDB を Ruby から操作するチュートリアル

1500 万人の時系列データベースファンの皆様、おはようございます。かっぱです。

はじめに

  • InfluxDBRuby 経由で使いたくなったのでメモ
  • Grafana と連携が簡単なので合わせてメモ

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 したらブラウザでアクセスしてみる。

f:id:inokara:20140601093726p:plain

おお、とっても簡単。


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

Grafanaconfig.js に以下を設定する。

     datasources: {
      influx: {
        default: true,
        type: 'influxdb',
        url: "http://xxx.xxx.xxx.xxx:8086/db/tutorial",
        username: 'root',
        password: 'root',
       }
     },

ポチポチと...

サンプル(2)を cron で叩かせた状態でメトリクスを Grafana で見てみる。

f:id:inokara:20140601093740p:plain

config.js の設定が適切であればデータベースやシリーズの情報が Grafana に自動で読み込まれているのでポチポチとメトリクスの設定を行っていく。

こんな感じで...

f:id:inokara:20140601093752p:plain

出来ました。


引き続き