ども、cloudpackかっぱ (@inokara) です。

はじめに

Elastic Load Balancing(以下、ELB) に限らず Proxy サーバーからアプリケーション・サーバーへのヘルスチェックが access.log に溜まるのは嫌なだなーと思ったので Fluentd で何とかならないかなって思っていたら簡単に何とかなったけどメモ。

Apache や Nginx であれば、それぞれの設定でログに記録させない方法があるけど、Web サーバーを簡単に再起動出来ないけどログをちゃんと収集したい等のニーズ(があるか分からない)がある場合に役立つかな。

メモ

fluent-plugin-rewrite を使う

個人的に fluent-plugin-rewrite を利用するのがサクッと動いて嬉しかった。

ということで…

アクセスログを眺めていたら ELB のユーザーエージェントは ELB-HealthChecker という名前のようなので以下のように設定した。


  type copy
  
    type rewrite
    add_prefix filtered
    
      key     user-agent
      pattern (ELB-HealthChecker|xxxx)
      #ignore  true
      append_to_tag true
      tag     ua
    
  



  type stdout



  type stdout

上記の例では、まず add_prefix オプションで filterd というタグを付けている。そして user-agentELB-HealthChecker が含まれている場合には append_to_tag にて tag で指定したタグを付けてルーティングする。また ignore true を付けることでパースの処理を無視(行わない)することもできる。(今回は動作確認をする為に appentd_to_tag を利用してタグを付けている。)

動作確認

以下のように実行する。

echo '{"path":"/hoge","user-agent":"hoge"}' | /usr/lib64/fluent/ruby/bin/fluent-cat kondou.masahiko

以下のように td-agent.log に記録される。

2015-02-08 13:33:26 +0900 filtered.kondou.masahiko: {"path":"/foo","user-agent":"foo"}

次に以下のように実行する。

echo '{"path":"/health-check","user-agent":"ELB-HealthChecker"}' | /usr/lib64/fluent/ruby/bin/fluent-cat kondou.masahiko

以下のように出力される。

2015-02-08 13:33:34 +0900 filtered.kondou.masahiko.ua: {"path":"/health-check","user-agent":"ELB-HealthChecker"}

後は煮るなり焼くなり…。

おわり

本日の知見。

  • キーに含まれる値でルーティングさせたい場合には fluent-plugin-rewrite が俄然捗る
  • 他にも同様のことができるプラグインはあるのかしら

元記事はこちらです。
俺のメモ – ELB からのヘルスチェックアクセスで出力されるアクセスログを fluentd で良しなに振り分けるメモ