Fluent Dashboard+Norikraでリアルタイムダッシュボードを7分で作る話 #dockerjp

  • 231
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Fluent Dashboardって?

Fluent Dashboardは、Fluentdで集計したデータをグラフやテーブルで表示できるGoogle Spreadsheet。fluent-plugin-https-jsonを使ってイベントログを送ると、以下のようにリアルタイムにデータを表示してくれる。

Fluent Dashboard

使い方

詳しい使い方は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にはdoGetdoPostという外部からの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に載せてみた:

Screen Shot 2014-04-11 at 3.24.12 PM.png

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のラムダを完成させて公開したいので乞うご期待...!