ようへいの日々精進XP

よかろうもん

fluentd で format の apache2 を使うと user とか referer が null になってしまったので調べたメモ

はじめに

  • fluentd で format の apache2 を使うと user とか referer が null になってしまったので調べてみた
  • そもそも、この挙動が正しい場合にはすいません!

調べた環境

  • AWS(ubuntu/images/ebs/ubuntu-precise-12.04-amd64-server-20130411.1 (ami-fe6ceeff))
  • td-agent 0.10.38
  • Apache/2.2.22 (Ubuntu)
  • access.log (combined)

メモ

現象

td-agent.confformatapache2 を指定すると以下のように userreferernull になってしまう。access.log の中で値が - となってしまっている部分が概ね null となってしまっているようだ。

書き出し先の typetextmongodb だったりするとプラグインがよろしくやってくれていたけど、プラグインによっては(dynamodb) は Warning となってしまう。

parse.rb

fluentd でログ解析を行なっていると思われるのが parse.rbformat タイプの apache2 は以下の部分が該当しているっぽい。

切り分け

  • ログの中で userreferer の値が - の時に発生する
  • - 以外の値が入っている場合には null にはならない
  • format タイプが apache の場合にはこの現象は発生しない

とりあえずの回避策

parse.rb の修正

以下のように parse.rb を修正してみた。

結果を見てみる

user や referer に値がある場合

user や referer に値が無い場合

null にはならず、- がそのまま値として入っている。

ということで...

  • 一般的にはあまり問題にはなっていないのかなって...
  • issue で質問してみたい気がするけど、もう少し詰めてからにしようと思う