はじめに
Apacheのアクセスログやエラーログは、放っておくとどんどん肥大化していきます。
実際に私が担当していたサーバーで数GBのログファイルができていました。
そんなときに必要になるのが 「logrotate(ログローテート)」 の設定です。
本記事では、
- Apacheログのローテーション設定方法
- よくある権限エラーの対処法
- 実際の動作確認コマンド
をまとめました。
Apacheログの保存場所を確認する
まずは、Apacheのログファイルがどこに出力されているかを確認します。
# 例
ls /var/log/apache2/
主なログは以下の2つです:
-
access.log… アクセスログ -
error.log… エラーログ
ログローテートの仕組みとは?
logrotate は、Linuxでログを定期的に整理・圧縮・削除する仕組みです。
設定ファイルは以下の場所にあります:
/etc/logrotate.conf # 全体設定
/etc/logrotate.d/ # 各アプリ用の個別設定
/etc/logrotate.d/apache2 # apache2の設定ファイル
基本設定例(最小構成)
まずは、シンプルな設定例から。
/var/log/apache2/*.log {
daily
rotate 14
size 100M
missingok
notifempty
compress
delaycompress
dateext
dateformat -%Y%m%d
su root adm
create 0640 www-data adm
sharedscripts
postrotate
/usr/sbin/apachectl -k graceful > /dev/null 2>&1 || true
endscript
}
各オプションの意味
| オプション | 説明 |
|---|---|
daily |
毎日ローテートする |
rotate 14 |
14世代分のログを保持(=2週間分) |
size 100M |
サイズが100MBを超えたらローテートする |
compress |
ログをgzipで圧縮(例:access.log → access.log.1.gz) |
delaycompress |
次のローテートまで圧縮を遅らせる(最新ログは未圧縮) |
su root adm |
ローテート時のユーザー/グループ指定(重要!) |
create 0640 www-data adm |
新規ログファイルをこの権限で作成する |
postrotate ... endscript |
ローテート後にApacheを再起動(ログ再オープン) |
ログローテートのテスト方法
設定を反映する前に、必ずドライラン(dry-run)を実行しましょう。
sudo logrotate -d /etc/logrotate.conf
出力を確認して問題なければ、実際にローテートします。
sudo logrotate -f /etc/logrotate.conf
ローテートの状態確認
実際にどのログがローテートされたかは以下で確認できます👇
cat /var/lib/logrotate/status
古いログの削除と圧縮状態を確認
ls -lh /var/log/apache2/
# 圧縮ファイルを確認
zcat /var/log/apache2/access.log-20250929.gz | head