ども、@kimihom です。
今回はログベースでの解析に関して調べたことをまとめてみる。Heroku に関連する範囲で調べたので、 Heroku ユーザーには最適かと思う。
ログベースのサービス
例えば、メトリクスサービスで有名な以下のようなサービスは、既にメトリクス内容が決まっている場合にのみ有効に活用できる。
- Google Analytics などの JavaScript 埋め込み型ツール
- NewRelic などのサーバー埋め込み型のモニタリングツール
上記の提供するコードをアプリケーションに埋め込むことで、何もしなくても必要な情報をそれなりに収集してくれるようになる。しかし、メトリクスサービスの提供する範囲までしか収集することができないので、例えば独自の項目(サインアップ回数や金額など)を集計したいって時にはまた他のサービスを探すか、手動でデータベースにアクセスしてエクセルを更新するかなどの対策をするしかなくなる。
メトリクス集計の柔軟性を実現ために、アプリケーション内で情報を送信する方法を取ることもできなくはない。Keen.io は色々なメトリクス数値をアプリケーション内から送信し、 Keen.io内で集計してメトリクス分析が可能になる。ただこの方法ではアプリケーションのレスポンス速度に影響が出てしまうのが難点だ。それを解決するためにはメトリクスを送信する部分はバックグランドジョブに任せるという方法になるが、それ専用のプロセスを立ち上げなければならなかったりする。Heroku ユーザーならご存知の通り、他の Dyno を立ち上げなければならなくなる。
そんな時こそログメトリクスサービスの出番だ。ログベースであれば、そのようなアプリケーション側の負荷や追加実装をほとんど気にする必要がなくなる。やることは、集計したいメトリクス情報をログに書き出すだけだ。
ログはどんなサーバーにもどんどん蓄積されていく。ログ情報は宝の山だ。ユーザーがいつどんな行動をしたのかが事細かに記されているし、どんなエラーが起きたのか。サーバーはどんな状態なのかが記されている。それ以外にも好きなタイミングで好きな内容をログに書き出すことができる。
Heroku のログベースのメトリクスアドオン
ログのアドオンといえば Papertrail と前回の記事 で紹介したけど、 Papertrail は大事なログが出た時に"通知"する仕組みは提供しているけども"集計"する仕組みは提供していない。てことで今回のログベースのメトリクスサービスとしては適切ではない。
ログベースのメトリクス視点で Heroku アドオンを調べてみると、いくつか候補があったのでご紹介する。
- Librato
Librato - Add-ons - Heroku Elements
おそらくこれがファーストチョイスになるかと思う。Librato はデフォルトでも Heroku のログから得られるメトリクス情報を集計し、表示してくれる。 個人的に考える Librato の最大の魅力は、カスタムメトリクスだ。Librato の提供する Gem 経由でログを吐き出すと、最終的に Librato の集計データとしてログを書き出してくれる。私たちがしなければならないのは、メトリクスに必要な数値をログに書き出すだけだ。それだけなら何もサーバーに負荷がかからない。
カスタムメトリクスは有料プランでないと使えないけども、有料で払ってでも使う価値はあるだろう。その集計したデータは自由にグラフ化することができるので、サーバー監視だけでなくビジネスに有用なデータとしてもグラフ化することが可能だ。
メトリクス集計に開発時間を取れて、グラフ描画など時間をかけてこだわりたいって人には最適な Heroku アドオンだと思う。
- Hosted Graphite
Hosted Graphite - Add-ons - Heroku Elements
もっとシンプルなのがいいよ!という方はよりシンプルな Hosted Graphite を検討するのもいいだろう。 Hosted Graphite はAPI キー:属性 値
のフォーマットを Heroku Log に出力するだけで、グラフ化してくれるアドオンだ。
しかも割と柔軟にグラフ描画できるっぽいので、試してみる価値はあると思う。
終わりに
今回は Heroku のログ集計についての考察を記事にまとめた。
もし Heroku を使っていなければ、サーバーのログ転送の仕組みから構築してさらにそのデータをどこかに投げる処理を実現しなければならないが、Heroku ならアドオンで一発だ。Dyno がいくつ増えても関係なしだ。
サーバー構築の手間だけではなく、ログの集計も使いこなすことで Heroku をより効果的に使いこなせることになるだろう。もし上記のようなアドオンを使ってみた方がいれば、ぜひブログ等で書いていただけたらと思う。そうして Heroku で本番運用して活用する事例がもっと増えていって欲しい。