Webサーバーのログ設定をデフォルトのまま、運用しているとaccessログに管理する上で必要ないログがたくさん含まれてしまいます。
いざ、解析しようとするとログファイルが肥大化し、ファイルに開くのに時間がかかりますし、予想以上の行数を確認していかなければならないこともしばしば。
不要なログを記録させないように設定しておけば、ログ解析時が少しでも楽になります。
例えば
・監視サーバーからのアクセス
・ログに残す必要のないファイルの呼び出し(画像ファイルなど)
などを除外したい場合があります。
ログ取得に対し、条件をつけることで除外したいログを記録させないことができるようになります。
不要なログを除外する方法のメモを記載しますので参考にしていただければと思います。
ログから不要なログを除外する方法
-
- 除外するデータを定義する。
SetEnvIfディレクティブを使い、リクエストの属性に基づいて除外するデータを環境変数へ定義します。
※大文字小文字を区別したくない場合は、SetEnvIfNoCaseディレクティブを使うとよい
SetEnvIf Request_URI "^/robots\.txt$" nolog
利用できるリクエスト属性
Remote_Host | リクエストを行なっているクライアントのホスト名(ない場合もある) |
Remote_Addr | リクエストを行なっているクライアントのIPアドレス |
Request_Method | 使用されているメソッド名(GET,POSTなど) |
Request_Protocol | プロトコルの名前とバージョン(HTTP1.0など) |
Request_URI | URLのスキームとホストの後の部分 例: https://hoge.com/hogehoge.html |
※SetEnvIfディレクティブの詳しくは、Apache モジュール mod_setenvifに記載されていますので一読してみると詳しく理解できると思います。
-
- 定義した環境変数をCustomLogディレクティブに追加する。
CustomLogディレクティブのenv=節にSetEnvIfディレクティブでセットした環境変数名をセットする。
#nologにセットした条件のみが記録される
CustomLog logs/access_log combined env=nolog
#nologにセットした条件が場外され記録される
CustomLog logs/access_log combined env=!nolog
これで環境変数にセットされた内容のアクセスログが除外されます。
具体例
それでは、具体的な設定をみていくことにしましょう
-
- /etc/httpd/httpd.confを開く
※設定するファイルは、各々の環境で違うため、適宜読み替えてください
- ログ設定が記載されている箇所へenv=節及び条件を追加する。
・特定のIPアドレスを除外する
例:
CustomLog logs/access_log combined env=!nolog
SetEnvIf Remote_Addr xx.xx.xx.xx nolog
・特定のファイルを除外する
例:
CustomLog logs/access_log combined env=!nolog
#--特定のHTMLファイルへのアクセスを記録しない
SetEnvIf Request_URI xxxxx.html nolog
#特定の拡張子へのアクセスを記録しない
SetEnvIf Request_URI "\.(gif|jpg|png|css|js|ico)$" nolog
・特定のファイルのみを記録する
例:
CustomLog logs/tokutei_access_log combined env=nolog
SetEnvIf Request_URI xxxxx.html nolog
SetEnvIf Request_URI "\.(gif|jpg|png|css|js|ico)$" nolog
- Apacheを再起動する。
再起動完了後、設定したIPアドレスやファイル拡張子Accessログから除外されていると思います。
ログの設定に関して詳しくしりたい方は、Apache.orgのサイトへ足を運んでみてください。
https://httpd.apache.org/docs/2.4/ja/logs.html
それでは、