Fluent Dashboardって?
Fluent Dashboardは、Fluentdで集計したデータをグラフやテーブルで表示できるGoogle Spreadsheet。fluent-plugin-https-jsonを使ってイベントログを送ると、以下のようにリアルタイムにデータを表示してくれる。
使い方
詳しい使い方はREADMEにある通りで、Spreadsheetをコピーして公開設定等をポチポチするだけで準備完了。3分もかからない。あとはfluent-plugin-https-jsonのログ送信先URLとしてFluent SpreadsheetのエンドポイントURLを指定すれば動き始める。
集計ログの表示向け
任意のFluentdログを受け取ってグラフやテーブルを描けるけど、大量のログを直接受け取ることはできない。集計後のログを3秒に1回ほどの割合で受け取って表示する、といった使い方になる。ログを受け取ってからおよそ1秒程度で描画される。
Fluentのタグ名でグラフを自動描画
例えばfoo
というタグが付いたイベントログを送ると、同名のシートが作成されて一行ずつシート最上部に挿入されていく。デフォルトでは1シート最大100件保存できて、保存件数は設定で変更可能。ログは古いものから自動的に削除される。つまり、ログのアーカイブ用ではなく主に表示用である。
さらに、タグ名が以下のいずれかで終わる場合はグラフを描いてくれる。
-
_AREA
,_BAR
,_COLUMN
,_LINE
,_SCATTER
, or_TABLE
-
_AREA_STACKED
,_BAR_STACKED
or_COLUMN_STACKED
_STACKED
が付くと、1行内の各フィールドの値を積み重ねたグラフになる。
どんな仕組み?
Google SpreadsheetのJavaScriptマクロであるGoogle Apps ScriptにはdoGet
とdoPost
という外部からのhttpsリクエストを受け付けるハンドラがあって(!)、それで受信したJSONをApps Scriptコードでシートに挿入する仕組み。俺はスプレッドシートを使ってると思ったらいつのまにかWebサーバを書いてた。何を言ってるのか(略
nginx > Norikra > Dashboard 構築まで7分
もともとはNorikraのダッシュボードとして作ったので、Norikraと連携して簡単にダッシュボードを構成するためのDockerfileとDockerイメージも作成した。デモとして、
- Google Compute Engineのインスタンスを3つ作る
- Norikraサーバーを立てる(Dockerfile)
- nginxサーバーを立てる(Dockerfile)
- Apache Benchクライアントを立てる(Dockerfile)
- アクセスログからreq/sグラフ、dstatからcpuグラフを描くNorikraクエリを登録する
- Apache Benchから3000 req/sくらいの負荷をかける
- Fluent Dashboardにグラフが表示される
という作業を7分間で済ませているところをYouTubeに載せてみた:
Fluent Dashboard demo on YouTube
このデモと同じ作業を再現する手順書はここに載せておいた。
このデモに出てくるように、Debian + DockerのイメージをGCEに登録しておけば、インスタンス作成後にsudo docker run
一発でフルスタック構築完了! になるのでとてもラクだ。GCE+Dockerが快適すぎる... #ステマ
リクエスト受信からグラフ表示まで10秒
このダッシュボードはリアルタイム性を追求したので、nginxにHTTPリクエストが届いてから10秒ほどでグラフに反映できている。ゲームやキャンペーンサイトのイベント開始時など、今すぐどうなってるか見たい! って人はこういうダッシュボードがほしいはず。
そしてlambdaへ
ElasticsearchじゃなくてなぜNorikraか? それはlambda architectureを作りたいからだ。リアルタイム分析部分をNorikra等のオンメモリ系にしておけば、そもそもログを保存しないので、ログ分量が巨大化して重くなったりすることはない。巨大データのハンドリング性とリアルタイム性を両立させるにはこの方向かなと思う。Elasticsearchが重くて困る、過去1年の集計と過去1分の集計の両方をリアルタイムで見たい、といった人にはぴったりなソリューションになるはず。
1〜2週間ほどの内にNorikra+BigQueryのラムダを完成させて公開したいので乞うご期待...!