Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

#fluentdcasual に参加してきた


fluentd_logo

Fluentdとワタシ

scpとかrsyncでLOGを集約することが超イヤでした。メンドクサイし諸々アレだし(皆さん思ってることと同じ)。
rsyslogとsyslog-ngを試したけどアレだったし(皆さんと同じ感想)、結局scpとrsyncで運用してました。Fluentdと出会うまでは。
Scribeとかは使ったことないです。

Fluentd Casual Talks に行って来ました!

そんなインフラストラクチャ超ビギナーな自分ですが、Fluentd Casual Talks : ATNDに参加して来ましたので感想&やってみたよのエントリを書きます。
久しぶりに超大当たりな勉強会でした。
主催者の@さん、会場手配の@さん他DeNAの皆さん、登壇者の皆さん、ありがとうございました&お疲れ様でした!!

さっそくやってみたよ

@さんの、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のメモ置き場

    • -

    • -
転送側の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ってるみたいに見えたので一応・・・

上のほうがガクガクなのは俺が書いた正規表現がアレだからかなー?


今回使わせていただいたプラグインについて

全部tagomorisさんのプロダクトですね。本当にスゴイです。
詳しい使い方は、Githubやtagomorisさんのブログを見てください。

感想

Fluentdは本当に素晴らしいツールで、超簡単に導入できるし、即時性が高いなどメリットは数えきれないほど有ります。
この辺は基調講演で@さんと@さんが仰ってましたので、自分のような者が語るまでもないですね。
ですが、ドキュメントが古い(日本語ドキュメントはない)し、導入などを詳しく解説しているサイトが少ないです(コレもoranieさんが(ry)。
ドキュメントの日本語訳とか、使い方サイト作るとかだったら自分でも貢献出来そうなので、本流があれば乗っかりたいですね(メインストリームになる勇気はない・・・)。

※ GrowthForecastも使ってみて超気に入っちゃったのでGangliaを捨ててもいいかなとか思ってたりなかったり・・・

第2回があれば必ず参加したいです。そのときにはLTできるネタがあるといいなー。