Posted on Apr 20
time series database
(時系列データベース)の一つleveldb
というエンジンが動いているgo
HTTP
でデータの登録や検索可能SQL
ライクなクエリWeb UI
が同梱されているRDBMS
で言うところのデータベースのことは同じくデータベースと呼ぶseries
と呼ぶようだInfluxDB
の構造等については上記の参考文献等に頼るとしてこれをどのように利用出来る(したい)かを考えてみた。
各種ログ等のデータを収集する基盤としてデファクトになっている(と思っている)fluentd
との連携がすぐに思いつく。既に fluentd
のプラグインとして fluent-plugin-influxdb
というものがあり fluentd
でかき集めてきたデータを蓄積する為の基盤として InfluxDB
を利用しようとされている方がいらっしゃるようだ。
自分自身は実際に試せていないが監視メトリクスデータのストレージ基盤として Elasticsearch
から InfluxDB
に移行された方の事例はある。
おおっ!て感じだ。
個人的な最近のトレンドである sensu
という監視ツール(monitoring router
)との組み合わせてみたいなと考えている。
自分が調べた限りだと sensu
監視イベントデータは Redis
に保存されてはいるが、例えば Load Average
等の推移についてはデフォルトの状態だと sensu-server.log
という sensu-server
自身のログが出力されるファイルに書かれるのみとなっているはずなので、これを handler
プラグイン等を使って InfluxDB
に保存出来るのではないかと考えている…と探していたら既にプラグインがありました…。
きっと誰かが作っているよねっ。
以下はその妄想図。
InfluxDB
は時系列データベースということもあり上記のような用途は得意分野ではないだろうか…。
ドキュメントを読んだりして色々と気づいた事など。
Date time strings have the format YYYY-MM-DD HH:MM:SS.mmm where mmm are the milliseconds within the second.
上記のように時間は mmm
のようにミリ秒まで登録出来るようだ。
You can specify timestamp in epoch time, which is defined as the number of nanoseconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970. You can use the same suffixes from the previous section if you don’t want to specify timestamp in nanoseconds.
UNIX
タイムでの指定も出来るようだ。InfluxDB
を標準でサポートする grafana
ではミリ秒込みでの UNIX
タイムで InfluxDB
にデータを登録必要があるようだ。
for(var i = 0; i < series.points.length; i++) {
var t = Math.floor(series.points[i][timeCol] / 1000);
var v = series.points[i][index];
datapoints[i] = [v,t];
}
ちなみに grafana
の services/influxdb/influxdbDatasource.js
に上記のように書かれている。
InfluxDB
は面白そうsensu
との連携や grafana
について書いてみたい2014 かっぱのほげふが