🙆

Apacheのアクセスログに記録する内容を絞る

2024/09/29に公開

Apacheのアクセスログには大量のアクセス記録が保存される。
どのページにアクセスがあったかだけ記録していればよく、JSやCSSや画像のアクセスログは不要である。JSやCSSや画像や「自分」のアクセス記録を排除する。

設定の流れ

  1. nologフラグの設定ファイルを作成する
  2. 設定ファイルに正規表現で条件を書く
  3. nologフラグが立ったアクセスは記録しない設定を追加する
  4. configtestして問題なければgracefulする

nologフラグの設定

正規表現にマッチしたらnologというフラグを設定する。
以下の内容をhttpd.confに追記してもよいが、nolog.confというファイルを作成して、インクルードさせるのが良い。
redhat系ならconf.dディレクトリに保存するのが良いだろう。
debian系はクソなので、クソ面倒くさい。debianはApacheの設定だけがクソ過ぎる。致命的にダメである。

nolog.conf
# 指定した画像、JS、CSSのアクセスは記録しない
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)|(ico)$" nolog

# 指定したIPアドレスのアクセスは記録しない
SetEnvIf Remote_Addr ^192\.168\.   nolog
SetEnvIf Remote_Addr ^127\.0\.0\.1 nolog

# 指定したユーザーエージェントのアクセスは記録しない
SetEnvIf User-Agent "crawler"   nolog
SetEnvIf User-Agent "spider"    nolog
SetEnvIf User-Agent "msnbot"    nolog
SetEnvIf User-Agent "bingbot"   nolog
SetEnvIf User-Agent "Googlebot" nolog
SetEnvIf User-Agent "SAKURA Cloud Simplemon"    nolog
SetEnvIf User-Agent "internal dummy connection" nolog

CustomLog

CustomLogの末尾にenv=!nologを追加する。
nologフラグが立っていると、そのアクセスは記録しない。

CustomLog ${APACHE_LOG_DIR}/access-default.log combined env=!nolog

Apacheのリロード

sudo apachectl configtest
sudo apachectl graceful

Discussion