Apacheのログローテーション設定

作成:2021年03月01日

Apacheのログローテーション設定

Server settings documentation!!

ホストOS:Debian GNU/Linux 10.7
ゲストOS:FreeBSD 12.2-RELEASE r366954 GENERIC amd64 
Apacheバージョン:Apache/2.4.46 (FreeBSD)

Apacheのログは自動的にローテーションは行わない。状況に合わせてログローテーションの設定が必要である。

参考サイト:FreeBSD Manual Pages (newsyslog.conf)

/etc/newsyslog.conf.d/配下には、下記のファイルがある。

-rw-r--r--  1 root  wheel  146 Oct 23 14:37 amd.conf
-rw-r--r--  1 root  wheel  147 Oct 23 14:37 ftp.conf
-rw-r--r--  1 root  wheel  148 Oct 23 14:37 lpr.conf
-rw-r--r--  1 root  wheel  173 Oct 23 14:37 opensm.conf
-rw-r--r--  1 root  wheel  168 Oct 23 14:37 pf.conf
-rw-r--r--  1 root  wheel  158 Oct 23 14:37 ppp.conf
-rw-r--r--  1 root  wheel  154 Oct 23 14:37 sendmail.conf

/etc/newsyslog.conf で、上記の設定ファイルを読み込む仕様となっている。

<include> /etc/newsyslog.conf.d/*
<include> /usr/local/etc/newsyslog.conf.d/*

Apacheのログは、下記の仕様でローテーションすることにした。

毎月1日、0時にgz圧縮を実行する。ログファイルは1年分(12個)保存する。

/etc/newsyslog.conf.d/apache.confに下記追加した。

/var/log/httpd-access.log 644 12 * $M1D0 Z /var/run/httpd.pid 30
/var/log/httpd-error.log 644 12 * $M1D0 Z /var/run/httpd.pid 30

ログローテーションの結果

# ls -l /var/log
-rw-r--r--  1 root   wheel        267430 Mar  1 14:53 httpd-access.log
-rw-r--r--  1 root   wheel       1458675 Mar  1 00:00 httpd-access.log.0.gz
-rw-r--r--  1 root   wheel         67677 Mar  1 13:31 httpd-error.log
-rw-r--r--  1 root   wheel       2824799 Mar  1 00:00 httpd-error.log.0.gz

FreeBSD Manual Pagesより引用

フォーマット概要

空白で区切られた5つの必須フィールドと 4 つのオプションフィールドからなる。
空行や‘ #’で始まる行は、無視される。
‘ #’が行の途中にある場合、‘ #’文字とこの後の行の残りは無視される。
この特殊な意味を避けるために、‘ #’文字を‘ \’でエスケープ可能である。
この場合、前の‘ \’は、削除され、‘ #’は、通常文字として扱われる。

各フィールド概要

logfile_name
保存するシステムログファイル名。

owner: group
保存ファイルの所有者とグループ名を指定する。
owner あるいは group のどちらかが空白のままである場合でも‘ :’は、必須である。指定は、数値、あるいは /etc/passwd か /etc/group にある名前で行うこと。

mode
ログファイルと保存ログファイルのファイルモードを指定する。

count
残しておく保存ログファイルの最大数を指定する。

size
ログファイルのサイズが size キロバイトに達すると、入れ替えられる。
このフィールドが単一のアスタリスク (‘ *’) である場合、ログファイルのサイズによる入れ替えはされない。

when
インターバル、特定の時刻、もしくは両方。
when フィールドが単一のアスタリスク (‘ *’) の場合、ログのローテイトは、 size フィールドにのみ依存する。
そうでない場合、 when フィールドは、オプションの、時間単位のインターバルであり、通常は、これに単一の‘ @’記号と制限付 ISO 8601 フォーマットの時刻が続きます。さらに、単一の‘ $’記号と共に時刻を指定し、日に 1 回、週に 1 回、もしくは月に 1 回の所定の時刻にログファイルをローテイトするように指定することもできる。

path_to_pid_cmd_file
デーモンのプロセス ID、または U フラグ指定時には、デーモンのプロセスグループ ID を含むファイルを指定する。
このフィールドが存在しているなら、 signal_number が、このファイルに含まれたプロセス ID に送られる。

signal_number
デーモンプロセス (または U フラグ指定時には、プロセスグループに属する全てのプロセス) に送られるシグナル番号を指定する。

newsyslogの -nvオプションで確認する。

−n 実際にログの入れ換えは行わず、このオプションが指定されない場合に 本来行うはずの処理内容を表示。
−v 詳細情報出力モード。このモードでは、ログを入 れ換えるあるいはそれをスキップするたびに、そのログファイル名と理由を表示。

#  newsyslog -nv
Processing /etc/newsyslog.conf
Found: <include> /etc/newsyslog.conf.d/*
Found: <include> /usr/local/etc/newsyslog.conf.d/*
Processing /etc/newsyslog.conf.d/amd.conf
Processing /etc/newsyslog.conf.d/apache.conf
Processing /etc/newsyslog.conf.d/ftp.conf
Processing /etc/newsyslog.conf.d/lpr.conf
Processing /etc/newsyslog.conf.d/opensm.conf
Processing /etc/newsyslog.conf.d/pf.conf
Processing /etc/newsyslog.conf.d/ppp.conf
Processing /etc/newsyslog.conf.d/sendmail.conf
/var/log/all.log <7J>: does not exist, skipped.
/var/log/auth.log <7J>: --> will trim at Sat Jan  1 00:00:00 2022
/var/log/console.log <5J>: does not exist, skipped.
/var/log/cron <3J>: size (Kb): 387 [1000] --> skipping
/var/log/daily.log <7J>: does not exist, skipped.
/var/log/debug.log <7J>: size (Kb): 321 [1000] --> skipping
/var/log/init.log <3J>: does not exist, skipped.
/var/log/kerberos.log <7J>: does not exist, skipped.
/var/log/maillog <7J>: --> will trim at Tue Mar  2 00:00:00 2021
/var/log/messages <5J>: --> will trim at Sat Jan  1 00:00:00 2022
/var/log/monthly.log <12J>: does not exist, skipped.
/var/log/devd.log <3J>: size (Kb): 1 [1000] --> skipping
/var/log/security <10J>: size (Kb): 1 [1000] --> skipping
/var/log/utx.log <3>: --> will trim at Thu Apr  1 05:00:00 2021
/var/log/weekly.log <5J>: does not exist, skipped.
/var/log/rtx.log <5Z>: size (Kb): 59 [100] --> skipping
/var/log/iplog <10J>: size (Kb): 1 [200] --> skipping
/var/log/amd.log <7J>: does not exist, skipped.
/var/log/httpd-access.log <12Z>: --> will trim at Thu Apr  1 00:00:00 2021
/var/log/httpd-error.log <12Z>: --> will trim at Thu Apr  1 00:00:00 2021
/var/log/xferlog <7J>: size (Kb): 1 [1000] --> skipping
/var/log/lpd-errs <7J>: size (Kb): 1 [1000] --> skipping
/var/log/opensm.log <7J>: does not exist, skipped.
/var/log/pflog <3J>: does not exist, skipped.
/var/log/ppp.log <3J>: size (Kb): 1 [1000] --> skipping
/var/log/sendmail.st <10>:  age (hr): 116 [168] --> skipping