Home » Ubuntu 日記 » Ubuntu ~Apache~ » Apache:ログ
Ubuntu ~Apache - ログ~
○ ログ
Webサーバは、(Apacheに限らず)どこからどういったアクセスがあって、どういう返答・処理をしたかということをログに残します。
Apache は以下の2種類のログを残します。
・アクセスログ
・エラーログ
設定によっては他にも様々なログ(モジュールの動作を記録するログなど)を残すことも可能ですが、一般的に利用されるものはこの2種類です。
○ ログの設定
デフォルトの設定ではログはサイトごとに残すようになっていますので、ログの設定(出力場所などの個別の設定)は /etc/apache2/sites-available/default で行います。
# アクセスログ(30行目付近)
CustomLog /var/log/apache2/access.log combined
# エラーログ(26行目付近)
ErrorLog /var/log/apache2/error.log
上記の指定場所にログが保存されます。
アクセスログの combined という引数は、ログの形式を示しています。
ログの形式など、全体設定は Apache2.conf ( httpd.conf ) で指定します。
# 形式(200行目付近)
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
combined 形式や common 形式は代表的なWebサーバログのフォーマットです。
# ログを記録するレベル(180行目付近)
LogLevel warn
エラーログに記録するレベルを設定します。
設定可能なレベルは以下のとおりです。
レベル | 概要 |
---|---|
emerg | サーバが稼動できないほどの重大なエラー |
alert | critよりも重大なエラー |
crit | 重大なエラー |
error | エラー |
warn | 警告 (初期値) |
notice | 通知メッセージ |
info | サーバ情報 |
debug | デバック用の情報 |
レベルは上から順番に重大なレベルとなり、下に行くほど軽度なエラーも含めて記録されます(情報量が増えます)。
○ logrotate
ログは何も手を加えずにしていると、どんどんサイズが大きくなります。
そこで、ログを一定期間で世代分け ( ローテート ) させます。
世代分けには、logrotate を設定します。
また、定期的に logrotate を実行するために cron と組み合わせます。
logrotate の設定は /etc/logrotate.conf で行います。
# see "man logrotate" for details
# rotate log files weekly
weekly ← ローテートの間隔(週間)
# keep 4 weeks worth of backlogs
rotate 4 ← 何世代まで保存するか(4)
# create new (empty) log files after rotating old ones
create ← ローテート処理後すぐにログファイルを作成する(作成する)
# uncomment this if you want your log files compressed
#compress ← ログファイルを圧縮する場合はコメントを外す(圧縮しない)
# packages drop log rotation information into this directory
include /etc/logrotate.d ← logrotate の個別設定ファイルの保存場所
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be configured here
Apache ログの設定ファイル(/etc/logrotate.d/apache)
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
postrotate はローテート後にコマンドを行うということを示しており、次の判定文以下が実行されます。
/var/run/apache2.pid は httpd の pidファイルの位置です。
ログをローテートした後にログファイルを見失ってログ取得に失敗しないよう再起動をかけます。
○ cron と組み合わせる
loglotate 自体には定期的に実行する機能はありません。
そこで、logrotate を定期的に実行するために cron を利用します。
必要に応じて、実行のタイミング(間隔や実行時間)を設定します。