時系列DBって結局どれがいいんだっけ #TSDB
※4/6 その後調べた情報などを記事末尾に追記
前提となるニーズ
- サーバの負荷情報とか、アクセス状況のような KPI を取得・保存し、可視化(参照してグラフ化)したい。
- リアルタイム性が要求される。5分以上前のデータしか見れませんみたいなのはお呼びでない。
- 古いデータはそんなに精度は気にしないけど、ロングスパンで俯瞰して見れたら便利。
最近はビッグデータ環境の時系列データ解析もビジネスではけっこうニーズがありそうだけど、そっちはもう少し要求が多そう。
ここでは考えないことにする。
選択肢になりそうなもの
- 古きよき RRDtool
- Elasticsearch + Kibana
- Graphite + Grafana
- InfluxDB + Grafana 等
- Zabbix
他に、現実的には SaaS に任せるという手段もあるだろうけど、そう言うと話が終わってしまいそうなので、ここでは考えないことにする。
以下、順に所感を。
1. RRDtool
枯れてる。
一昔前のデファクトスタンダードの位置にあると思う。
Munin や Cacti などの監視ソフトウェアの多くで採用されているものでもある。
枯れているがゆえに目新しい話題はないが、自前でサーバメトリクス等を可視化する上では、まあまあ妥当な選択肢ではないだろうか。
各種開発言語のライブラリもあるし、GrowthForecast や CloudForecast のような RRDtool をラップしたツールもある。
2. Elasticsearch + Kibana
最近よく聞く組合せ。
Fluentd からデータを流して Elasticsearch + Kibana で可視化する、という例は枚挙に暇がない。
ログデータの可視化ではよく使われていそう。
やりようによってはその他のサーバメトリクスを載せることも可能だろう。
もともと検索エンジンであり、高機能なので、今回のニーズに対してはリッチ過ぎるという感もなくはない。
3. Graphite + Grafana
はてなや Y! で採用されている。
覚えている記事や発表の情報だと、「大規模だとつらそう」という印象。
4. InfluxDB + Grafana 等
一時期盛り上がったのだけど、最近あまり新しい話題を聞かない。
どうなったんだろう、という感じ。
オフィシャルページなど見たところ、開発は活発に続いている様子。
v0.9 でバックエンドの DB が LevelDB から BoltDB になったみたい。
※記事末尾に追記有り。
5. Zabbix
監視で取得したデータをかんたんにグラフ化できる機能があるようだ。
Zabbix は RRDtool ではないらしい。
全体的な補足
職場の Slack の #infra チャンネルでこの辺りのモヤモヤした疑問について、ふわっとつぶやいてみたところ、グラフツールを作ったりチューニングしていた人から、下のようなコメントを頂いた。
InfluxDB に期待したこともありましたが、なかなか難しいですね
描画部分も問題で、Kibana (or Grafana) は表示の時に頑張るので、グラフたくさん並べると遅いとかあったり、
ユースケースで選ぶ必要があると思っています。
その他
"timeseries db" や「時系列 DB」などで検索すると、他のプロダクトもちらほらヒットします。
OpenTSDB なんかは Hadoop と HBase をバックエンドにした大規模分析環境に向いてそうな時系列DBです。
雑なまとめ
決定版はいま無いのかなぁというところです。
「ユースケースによる」と言ってしまえばそれまでですが。
NewRelic 等の監視 SaaS や AWS の CloudWatch を使っているところもそれなりにあるでしょうし、「ツールが乱立している」とも言えるのかもしれませんね。
SaaS に頼らず自前でやるとして、正直、サーバメトリクス程度なら、そんなに大量になることは(たぶん、ふつう)ないので、どのツールでも工夫次第でなんとかできそうな気もしないでもないです。
使っている監視ソフトウェアが制約条件になるというケースもあるでしょう。
たとえば Zabbix を使っているなら、Zabbix で可視化するのが理に適っていると思います。
監視は監視でやっているけど、別途メトリクスも取りたいような場合は、どれを使うか迷う状況がしばらく続くかもしれません。
求む、決定版。
参考
- ログ集計/時系列DB/可視化ツールの調査結果 ... RRDtool は登場しませんが、それ以外についてはざっとまとまってる感じ。
- Graphs
- Prometheus - Monitoring system & time series database ... 記事を書いてる途中にたまたま見つけました。Go製のプロダクトで、単に時系列DBだけでなく、監視システムも含んでいるようです。GitHubでスター4000以上。
4/6 追記
その後調べたりして得た情報を追記しておきます。
RRDtool 2.x
RRDtool の作者 Tobias Oetiker が、次の15年も陳腐化しないことを見据えて RRDtool のリニューアルを計画している(していた?)ようです。
こちらは3年前の記事:
イシューで要求を募って、設計をドキュメントに書いている段階のようですが、イシューの最終更新は去年の7月なので、止まっていないか心配です。
InfluxDB のニュース
クラスタリング機能は将来的に Enterprise プランでのみの提供になるとのこと。
スタンドアローン版は OSS としての開発が継続されます。
その他
このランキングは参考になるなと思いました。/ DB-Engines Ranking - popularity ranking of time Series DBMS : https://t.co/Ot8lhosjl1 #TSDB
— きいあむ → @progrhyme (@key_amb) 2016年4月6日
mod_rrd_graph ってあるんだ。rrdgraphコマンドをNginx経由で叩けるようになる。これで事実上なんでもできるのかな。 #TSDB / “RRD Graph | NGINX” https://t.co/zwKiecaucy
— きいあむ → @progrhyme (@key_amb) 2016年4月6日