読者です 読者をやめる 読者になる 読者になる

絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

apacheのログを内容によって複数のCustomLogに振り分ける

apache log

色々さがした挙句見つからず、ひどい方法を選択したのでメモ


事の発端は、WebAlizerが吐く

Error: Skipping oversized log record

というエラー。
どうも調べてみたところ、この辺てNULL.IDAとかその辺に来るワームが悪さする事が原因になったりするらしい。

それが今回の直接原因なのかどうかは置いといて、今後そういうのでまたエラーが飛んでくるのを回避するために
ワームのログを分離する
にある感じでログの分離をした。


で。
それとは別の悩みで、cactiとかが状態監視のためにapacheポートをたたく場合のログがゴチャゴチャ混ざるのが気になっていて、それもこの方法で別のファイルに分けてしまえ、と思いついた。
そこで、以下のような感じで設定を追加

<IfModule mod_setenvif.c>
SetEnvIf Request_URI ^/hogehoge.ida worm
SetEnvIf Request_URI ^/server-status cacti
</IfModule>

として、それをバカの一つ覚えみたいにCustamLogにこうやって追加したわけだ。

CustomLog /path/to/access_log combined env=!worm env=!cacti
CustomLog /path/to/worm_log combined env=worm
CustomLog /path/to/cacti_log combined env=cacti

これでうまくいくかなーなんて思ったけど残念ながらgracefulしたら怒られてしまって、どうやらenvの指定を2つは渡せないらしい。ちなみにenv=!(worm|cacti)とかやってみたけど案の定だめ。


でまぁ、結局これを実現したかというと、以下のようにして、同じ条件に2種類の環境変数を割り当てることで解決できた。
追記:コメントでshimookaさんに、SetEnvIf ディレクティブは環境変数を同時に複数設定可能な事を教えてもらったので、以下のように複数行書く必要は無いようです。

<IfModule mod_setenvif.c>
SetEnvIf Request_URI ^/hogehoge.ida other
SetEnvIf Request_URI ^/hogehoge.ida worm
SetEnvIf Request_URI ^/server-status other
SetEnvIf Request_URI ^/server-status cacti
</IfModule>

で、ログ指定は

CustomLog /path/to/access_log combined env=!other
CustomLog /path/to/worm_log combined env=worm
CustomLog /path/to/cacti_log combined env=cacti

とする感じ。ちょっときもいけど、まー大して大変な作業ではないので。
ググってもあんまり出てこないネタだったのでメモでした。