influxDBとGrafanaを使ってみた所感とその覚書
influxDBとGrafanaというものにすこしふれてみて「これはすごそう!」となったので,後に使うことになった時の備忘録としてやってみたことを書こうと思う.
influxDB
influxDBはタイムスタンプを伴った時系列に特化したデータベース.
とあるデータをデータベースに値を記録するときにタイムスタンプが自動的に押されて記録される.
利用例としてログやIoTセンサー記録,リアルタイム解析などに用いられる(下記サイト参照)
influxDBの扱いについてはほとんど以下のブログを参考にさせていただきました.
この記事になぞらえて,Macだったのでbrewでインストールして,ちょこちょことさわってみた.
influxDBを実際にさわる前に別端末で以下をしてあげる必要がある.
$ influxd -config /usr/local/etc/influxdb.conf
とても柔軟なデータベースであるからか記録もとても簡単で扱いやすい.
また,influxDBへのコマンドをまとめた日本語記事もあった.
influxDBへの接続
このサイトではRubyからinfluxDBに接続しているが,今回はPythonを用いてinfluxDBに接続する.
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は時系列データをうまいこと可視化,グラフ化などをしてくれるスグレモノ.
先に挙げた参考サイトには「ぽちぽちやれば」と書いてあるが,そのぽちぽちが記載されていなかったため,ここで簡単に説明を加える.
先ほどのNOAA_testデータベースを適用して例をあげてみる.
導入はこれも同じくbrewで導入できる.
デフォルトでは3000番ポートに設定されているので,導入したらブラウザで"http://localhost:3000"と入力して飛ぶと,以下のログイン画面が表示される.
デフォルトでは「admin / admin」でログインできる.
はじめにデータベースを設定する.設定は以下のようにした.一部insecureな設定をしているが,ローカル環境で行なっているため気にしないこととした.
あとはURL欄で"localhost"ではなく,127.0.0.1と明記しているのはうっかりIPv6と解釈されて502 Bad Gatewayなんて返されるのは御免だからである.
データベースにうまく繋がると下のところに緑の四角が出てくる.
Backを選択すると,Data Sourcesで"NOAA_test"ができている.
左の+を押すとGraphやTableなどの表が出てくる.今回はGraphに少し触れてみる.
Graphを押すとそれらしい枠が出てくるので,グラフ上でeを押すか,Panel Titleの部分をクリックしてEditを選択する.デフォルトではこのような感じ.
選択するとSQLクエリのような枠が出てくるので,それに合わせてクエリを投げてみる.Data Sourceの部分は明示的に"NOAA_test"にしておくと混乱せずに済みそうである.今回は単純に以下のクエリを投げた.
select field(degrees) from average_temperature
もしかしたらここでそれらしい表示があるかもしれないが,おそらくNo data pointsのままであると思う.このNOAA_data.txtのデータは2015年8月ー2015年9月のデータであるため,見ている時間が違うために表示されない.
そのため,右上の時間を例えばLast 5 yearsに変更してみると,以下のようになにやらまとまった何かが生じると思う.
該当部分を範囲指定すると,その部分にフォーカスされて拡大される.だいぶそれらしいグラフが出てきた.縮小するには上のマイナス虫眼鏡をクリックするか,グラフをダブルクリックする.
Legend枠にあるMax, Min, Avgを選択すると,凡例部分にグラフ表示されている部分の具体的な数値を表示してくれる.
以上,influxDBとGrafanaを軽くふれてみたものをまとめてみた.
時系列データに強いツールなのでこの二つの相性はとても良く,また使い勝手も良さそうである.