#fluentdcasual に参加してきた
Fluentdとワタシ
scpとかrsyncでLOGを集約することが超イヤでした。メンドクサイし諸々アレだし(皆さん思ってることと同じ)。
rsyslogとsyslog-ngを試したけどアレだったし(皆さんと同じ感想)、結局scpとrsyncで運用してました。Fluentdと出会うまでは。
Scribeとかは使ったことないです。
Fluentd Casual Talks に行って来ました!
そんなインフラストラクチャ超ビギナーな自分ですが、Fluentd Casual Talks : ATNDに参加して来ましたので感想&やってみたよのエントリを書きます。
久しぶりに超大当たりな勉強会でした。
主催者の@tagomorisさん、会場手配の@riywoさん他DeNAの皆さん、登壇者の皆さん、ありがとうございました&お疲れ様でした!!
さっそくやってみたよ
@fujiwaraさんの、fluentdでWebサイト運用を楽にするの、ステータスコードとレスポンスタイムの可視化の部分をほぼ丸パクリしてみました。
ZabbixじゃなくてGrowthForecast、nginxじゃなくてApacheなところが違うところですね。
目的
Apacheのcombined+%Dなaccess_logを、
・パースしないでまんま生ログをログサーバに転送、ファイル保存
・解析して、レスポンスコードの割合を可視化
・解析して、レスポンスタイムの割合を可視化
します。
Recipe
・CentOS6.2
・Apache2.2.15
・GrowthForecast
・td-agent
・fluent-plugin-datacounter
・fluent-plugin-growthforecast
・fluent-plugin-file-alternative
転送側の処理
/var/log/httpd/access_logをtailして、リモートのFluentdに送ります。
fujiwaraさんの資料では、fluent-agent-liteを使って転送していますが、自分は今回は普通にin_tailを使いました。
fluent-agent-liteは正規表現を使わないために、大変効率のよい処理を行なってくれるそうです。
#fluentd 用ログ収集専用のエージェント fluent-agent-lite 書いた - tagomorisのメモ置き場
-
- -
fluent-agent-liteって、in_tailで「format /^(?<message>.*)/」とするのとどこか違うところがあるんだろうか?I need your help#fluentd
@studio3104_com 機能的には同じですが、入力時に正規表現を通さないぶん、だいぶ効率が良いです #fluentd
-
- -
転送側のtd-agent.conf
<source> type tail format /^(?<message>.*)/ path /var/log/httpd/access_log tag apache.access_log.web01 </source> <match apache.access_log.**> type forward host 192.168.xxx.xxx </match>
受信側の処理
tailで送られてきたデータを、以下の処理にかけます。
・パースされてない生ログと同じに復元してファイルに保存
・正規表現にマッチするレコードをカウントしてGwowthForecastで可視化
GrowthForecast
GrowthForecastについては作者様のblogで→「GrowthForecastというグラフ表示ツールで捗る話 - blog.nomadscafe.jp」
導入については「Scientific Linux6.2 に GrowthForecast を導入したメモ - do_akiの徒然想記」がすごくわかりやすいです(昨日のエントリ!)。
受信側のtd-agent.conf
<source> type forward </source> <match apache.access_log.**> type copy <store> type datacounter count_key message aggregate all tag apache.datacount.web pattern1 2xx " 2\d\d \d+ pattern2 3xx " 3\d\d \d+ pattern3 4xx " 4\d\d \d+ pattern4 5xx " 5\d\d \d+ </store> <store> type datacounter count_key message outcast_unmatched true aggregate all tag apache.datacount.response pattern1 0_10ms \s\d{1,4}$ pattern2 10_100ms \s\d{5}$ pattern3 100_500ms \s[1-4]\d{5}$ pattern4 500_1000ms \s[5-9]\d{5}$ pattern5 1_1.99s \s1\d{6}$ pattern6 2_4.99s \s[2-4]\d{6}$ pattern7 5_9.99s \s[5-9]\d{6}$ pattern8 10s_over \s\d+$ </store> <store> type file_alternative path /tmp/file_alternative output_include_time false output_include_tag false output_data_type attr:message add_newline true </store> </match> <match apache.datacount.**> type growthforecast gfapi_url http://192.168.xxx.xxx:5125/api/ service httpd tag_for section remove_prefix apache.datacount name_key_pattern .*_(rate|count|percentage)$ </match>
こんな感じで出ました。
なんか汚いセンスのないグラフですが・・・ (色の指定の話です。GrowthForecastをdisってるみたいに見えたので一応・・・
上のほうがガクガクなのは俺が書いた正規表現がアレだからかなー?
感想
Fluentdは本当に素晴らしいツールで、超簡単に導入できるし、即時性が高いなどメリットは数えきれないほど有ります。
この辺は基調講演で@oranieさんと@kzk_moverさんが仰ってましたので、自分のような者が語るまでもないですね。
ですが、ドキュメントが古い(日本語ドキュメントはない)し、導入などを詳しく解説しているサイトが少ないです(コレもoranieさんが(ry)。
ドキュメントの日本語訳とか、使い方サイト作るとかだったら自分でも貢献出来そうなので、本流があれば乗っかりたいですね(メインストリームになる勇気はない・・・)。
※ GrowthForecastも使ってみて超気に入っちゃったのでGangliaを捨ててもいいかなとか思ってたりなかったり・・・
第2回があれば必ず参加したいです。そのときにはLTできるネタがあるといいなー。