chroot("/home/hibari")

備忘録とかに使えそうなノート

influxDBとGrafanaを使ってみた所感とその覚書

influxDBとGrafanaというものにすこしふれてみて「これはすごそう!」となったので,後に使うことになった時の備忘録としてやってみたことを書こうと思う.

 

influxDB

influxDBはタイムスタンプを伴った時系列に特化したデータベース.

とあるデータをデータベースに値を記録するときにタイムスタンプが自動的に押されて記録される.

利用例としてログやIoTセンサー記録,リアルタイム解析などに用いられる(下記サイト参照)

www.influxdata.com

 

influxDBの扱いについてはほとんど以下のブログを参考にさせていただきました.

この記事になぞらえて,Macだったのでbrewでインストールして,ちょこちょことさわってみた.

influxDBを実際にさわる前に別端末で以下をしてあげる必要がある.

$ influxd -config /usr/local/etc/influxdb.conf

とても柔軟なデータベースであるからか記録もとても簡単で扱いやすい.

kakakakakku.hatenablog.com

 

また,influxDBへのコマンドをまとめた日本語記事もあった.

qiita.com

 

influxDBへの接続

このサイトではRubyからinfluxDBに接続しているが,今回はPythonを用いてinfluxDBに接続する.

github.com

 

READMEに大まかなチュートリアルが記載されている.

導入はpipで行った

$ pip install influxdb

Exampleの欄には簡単な使用例が記載されている.

大まかな流れとしては,

InfluxDBClientでクライアントオブジェクトを生成する

create_databaseでデータベースを生成する

write_pointsでデータを突っ込む

となる.

上でデータベースにデータを突っ込むところについてはwrite_points()で行うと書いたが,この関数で登録するためのプロトコルはlineかjsonの2通りである.デフォルトではJSON形式が採用されている.

JSONで登録する際には「dictのlist」で表された記述をする必要がある.(Exampleより下記引用)

このうちtimeを省略した場合は,データベースに登録した際のタイムスタンプが押される.

json_body = [
    {
        "measurement": "cpu_load_short",
        "tags": {
            "host": "server01",
            "region": "us-west"
        },
        "time": "2009-11-10T23:00:00Z",
        "fields": {
            "value": 0.64
        }
    }
]

 

今回は例に用いられている↓のデータを用いて,lineで登録をしてみる.

https://s3.amazonaws.com/noaa.water-database/NOAA_data.txt

lineでの登録の仕方は簡単で,protocolにlineを指定してあげればよい. 

 

from influxdb import InfluxDBClient as idbc

filename = 'NOAA_data.txt'
f = open(filename)


client = idbc('127.0.0.1', '8086', 'root', 'root', 'NOAA_test')
client.create_database('NOAA_test')

for line in f:
	client.write_points(line, time_precision='s' protocol='line')

f.close()

 

実行したあとに確認してみた結果,データベースに登録されていて,クエリを投げることもできた.

> show databases
name: databases
name
----
_internal
NOAA_test

> use NOAA_test
Using database NOAA_test
> select count(*) from average_temperature
name: average_temperature
time count_degrees
---- -------------
0 15258

 

 

Grafana

Grafanaは時系列データをうまいこと可視化,グラフ化などをしてくれるスグレモノ.

grafana.com

 

先に挙げた参考サイトには「ぽちぽちやれば」と書いてあるが,そのぽちぽちが記載されていなかったため,ここで簡単に説明を加える.

先ほどのNOAA_testデータベースを適用して例をあげてみる.

導入はこれも同じくbrewで導入できる.

デフォルトでは3000番ポートに設定されているので,導入したらブラウザで"http://localhost:3000"と入力して飛ぶと,以下のログイン画面が表示される.

デフォルトでは「admin / admin」でログインできる.

f:id:lcstmarck:20180929004554p:plain

 

はじめにデータベースを設定する.設定は以下のようにした.一部insecureな設定をしているが,ローカル環境で行なっているため気にしないこととした.

あとはURL欄で"localhost"ではなく,127.0.0.1と明記しているのはうっかりIPv6と解釈されて502 Bad Gatewayなんて返されるのは御免だからである.

データベースにうまく繋がると下のところに緑の四角が出てくる.

f:id:lcstmarck:20180929005053p:plain

f:id:lcstmarck:20180929005123p:plain

 

Backを選択すると,Data Sourcesで"NOAA_test"ができている.

左の+を押すとGraphやTableなどの表が出てくる.今回はGraphに少し触れてみる.

f:id:lcstmarck:20180929005816p:plain

 

Graphを押すとそれらしい枠が出てくるので,グラフ上でeを押すか,Panel Titleの部分をクリックしてEditを選択する.デフォルトではこのような感じ.

f:id:lcstmarck:20180929011116p:plain

選択するとSQLクエリのような枠が出てくるので,それに合わせてクエリを投げてみる.Data Sourceの部分は明示的に"NOAA_test"にしておくと混乱せずに済みそうである.今回は単純に以下のクエリを投げた.

select field(degrees) from average_temperature

もしかしたらここでそれらしい表示があるかもしれないが,おそらくNo data pointsのままであると思う.このNOAA_data.txtのデータは2015年8月ー2015年9月のデータであるため,見ている時間が違うために表示されない.

そのため,右上の時間を例えばLast 5 yearsに変更してみると,以下のようになにやらまとまった何かが生じると思う.

f:id:lcstmarck:20180929011832p:plain

 

該当部分を範囲指定すると,その部分にフォーカスされて拡大される.だいぶそれらしいグラフが出てきた.縮小するには上のマイナス虫眼鏡をクリックするか,グラフをダブルクリックする.

f:id:lcstmarck:20180929012144p:plain

 

Legend枠にあるMax, Min, Avgを選択すると,凡例部分にグラフ表示されている部分の具体的な数値を表示してくれる.

f:id:lcstmarck:20180929012445p:plain

 

 

 

以上,influxDBとGrafanaを軽くふれてみたものをまとめてみた.

時系列データに強いツールなのでこの二つの相性はとても良く,また使い勝手も良さそうである.