ども、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-agent
に ELB-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 で良しなに振り分けるメモ」