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 を利用します。
必要に応じて、実行のタイミング(間隔や実行時間)を設定します。


自宅サーバーWebRing << 前 |ID=231 |次 >> 乱移動前後5表示サイト一覧