そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

DockerでサクッとGrafana/InfluxDBを試してみる

用途的には以前にやってみたKibana/Elasticsearchとも重複するところだけど、まあ色々の事情で。

blue1st.hateblo.jp

ひとまず環境構築+テストデータ投入+グラフ化まで体験してみた感じでは直感的で分かりやすく好印象。


環境構築@Docker Compose

個人的にはお馴染みDocker Composeで。

blue1st.hateblo.jp

ひとまずデータファイルの類は/srv/docker/grafana以下にマウントする形で集約する方針。

ポートやドメイン、パスワードなんかは適時読み替えで。

InfluxDBのAPIにあたる8086ポートに関しては同じ番号を割り当てておいた方が各所で楽ではある。

version: "2"

services:
  influxdb:
    image: influxdb
    volumes:
      - /srv/docker/grafana/influxdb:/var/lib/influxdb
    ports:
      - 8084:8083 #InfluxDBのWeb UI
      - 8086:8086 #InfluxDBのHTTP API

  grafana:
    image: grafana/grafana
    ports:
      - 8085:3000 #grafanaのポート
    volumes:
      - /srv/docker/grafana/grafana:/var/lib/grafana
    environment:
      - GF_SERVER_ROOT_URL=http://192.168.77.6:8085 #最終的にリクエストする際のURL
      - GF_SECURITY_ADMIN_PASSWORD=admin

これでdocker-compose up -dで立ち上がるはず。


データ投入

ひとまず何かしらデータを入れてみる。

Rubyでinfluxdbというgemがあって、それを使うのが簡単そう。

github.com

以下のスクリプトを作成してみた。

create_db.rb

tutorialという名前のデータベースを作成。

#!/usr/bin/env ruby
require 'influxdb'

database = 'tutorial'

influxdb = InfluxDB::Client.new host: '192.168.77.6'
influxdb.create_database(database)

insert_data.rb

先に作成したtutorialデータベースにテストデータとしてランダムな値を持つ5要素のデータを投入していく。

#!/usr/bin/env ruby

require 'influxdb'

host     = '192.168.77.6'
database = 'tutorial'
time_precision = 's'

influxdb = InfluxDB::Client.new database, :host => host, :time_precision => time_precision

NAMES = ['test1', 'test2', 'test3', 'test4', 'test5']
NAMES.each do |name|
  data = {
    values: {value: rand(10000) + 1},
    timestamp: Time.now.to_i
  }
  influxdb.write_point(name, data)
end

グラフ化するので時間を開けて何回か叩いておく。

面倒であればcronにでも仕込んでおくと良いかもしれない。


InfluxDB上で確認

InfluxDBのWeb UIより、新たにデータベースが作成されていることと、データが入ってきていることが確認できる。

f:id:blue1st:20160704012445p:plain

f:id:blue1st:20160704012549p:plain


Grafanaで可視化

データソースの登録

画面左上のアイコンのメニューよりデータソースを選択し、InfluxDBをつなぎこむ。

f:id:blue1st:20160704012659p:plain

ダッシュボードの作成

新たなダッシュボードを作成し、グラフの要素を登録していく。

アイコン隣のHomeのところからNewボタンでダッシュボードを作成し・・・

f:id:blue1st:20160704013013p:plain

表示のための行をadd_rowボタンで追加し・・・

f:id:blue1st:20160704013443p:plain

グラフのためのクエリを登録していく。

f:id:blue1st:20160704013514p:plain

一つのグラフに複数の要素を表示できる。

f:id:blue1st:20160704014121p:plain

期間を選択して表示。

f:id:blue1st:20160704014159p:plain

グラフ以外の表示方法も選択できる。

f:id:blue1st:20160704014303p:plain


(慣れもあるかもしれないけど、)前のKibana/Elasticsearchはドキュメントを目を皿のようにして追いながらいじってたのに比べると、 かなり直感的で分かりやすい印象をもった。

例えばサービスのKPIなんかは専用の管理画面をいちいち作るのもかったるいわけで、 FluentdだったりバッチからカジュアルにInfluxDBにデータを投入していって、 それを適時ダッシュボードとして作成して可視化するような運用をできたら幸せかもしれない。

時系列データベース としての特性なんかはまだ全然押さえられていないところなので、 これから勉強していきたいところ。