apacheのログを内容によって複数のCustomLogに振り分ける
色々さがした挙句見つからず、ひどい方法を選択したのでメモ
事の発端は、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
とする感じ。ちょっときもいけど、まー大して大変な作業ではないので。
ググってもあんまり出てこないネタだったのでメモでした。