fluentd + growthforecastを早速試してみた
Fluentd Casual Talks に参加させていただき、
いろいろと捗る話を聞いていうちに
「Fluentdやばいこれは使うしかない!」
というテンションになったので早速試してみました。
インストール
gem install fluent # 捗りそうなプラグインも gem install fluent-plugin-mongo gem install bson_ext gem install fluent-plugin-flowcounter gem install fluent-plugin-datacounter gem install fluent-plugin-growthforecast
今回試すアプリ
ping のレスポンスをログって、そのままgrowthforecastに投げて可視化するまでを目標とします。
pingをログるスクリプト
use strict; use utf8; use Time::Piece; use Time::HiRes qw/gettimeofday tv_interval/; use Net::Ping::External qw/ping/; while (1) { my $start = [gettimeofday]; ping(host => 'yahoo.co.jp', timeout => 3); my $end = [gettimeofday]; my $time = Time::Piece->new->strftime('%Y-%m-%dT%H:%M:%S'); printf "%s %d\n", $time, tv_interval($start, $end) * 1000; #printf "%s %.4f\n", $time, tv_interval($start, $end) * 1000; sleep 5; }
これをログにリダイレクトしておく。
perl ping.pl > /tmp/ping.log
growthforecast
今回は直接growthforecastにアクセスするので
事前にたちあげておきます。
インストールは割愛。以下参照。
http://blog.nomadscafe.jp/2011/12/growthforecast.html
fluentdの設定
今回は送信/受信を同一サーバで行うため
一つのコンフィグファイルに記述します。
<source> type forward </source> # 入力:pingログをtailで読み込む <source> type tail format /^(?<date>[^ ]+) (?<response_time>[^ ]+)/ time_format %Y-%m-%dT%H:%M:%S path /tmp/ping.log tag net.ping pos_file /tmp/ping.log.pos </source> # 出力(中間):レスポンスを集計する設定 <match net.ping> type copy <store> type stdout </store> <store> type datacounter count_key response_time outcast_unmatched true aggregate all tag ping.result pattern1 0_10ms ^\d{1,1}$ pattern2 10_100ms ^\d{2,2}$ pattern3 100_900ms ^\d{3,3}$ pattern4 1s_over ^\d{4,}$ </store> </match> # 出力:集計した結果をgrothforecastに投げる設定 <match ping.result> type copy <store> type stdout </store> <store> type growthforecast gfapi_url http://localhost:5125/api/ service servicetest section ping2 name_keys 0_10ms_count,10_100ms_count,100_900ms_count,1s_over_count </store> </match>
fluentd起動
コンフィグファイルを指定して起動。
ログがズラズラ出てきて赤いのがなければ多分大丈夫。
fluentd -c fluent.conf
雑記
まだまだ使いこなせていませんが
datacounter / flowcounter は使い所ありまくりんぐな印象。やばい。
これを使えばリアルタイム集計っぽいのが出来そうですね!
つぎにTips的なこと。
stdoutにも出力するとデバッグログとして使えるので重宝しました。
あと
ログ出力をファイルにしたらうまくいかなかった、とか
ping.logで出力するところを source type exec でやってみようとしたけど
やり方がよく分からなかった、とか
growthforecastプラグインでname_keysの間にスペース入れると複数表示されない、とか
細かい部分でハマったり。。。
最後に。
ログ管理に困っている方/業務を捗らせたい方は是非とも導入すべき!
でしょう。
しかしWebの情報はまだまだ少ないと感じたので
最初はドキュメント見ながらある程度自分で頑張る必要があるかもしれませんね。
レシピがどっかにまとまっているといいなぁ〜