メモ > サーバ > 構築: 基本設定 > ログローテートを設定
ログローテートを設定
■ログ保存期間を設定
※本番環境などで、ログの保存期間を伸ばしたい場合に設定する。
※プロバイダ責任制限法のこともあるので、原則3ヶ月以上ログを保存しておくのが良さそう。
logrotate.confファイルを読み解くメモ
http://masasuzu.hatenablog.jp/entry/20111117/1321512757
ログローテートソフトウエア logrotate についてまとめ - Qiita
https://qiita.com/shotets/items/e13e1d1739eaea7b1ff9
# vi /etc/logrotate.conf
なお個別の設定が /etc/logrotate.d にあり、そちらの方が優先されるので注意。
またAWSの場合、この期間を長くするよりも、CloudWatch Logsに転送する方が正攻法だと思われる。
■ログローテートの追加例
/etc/logrotate.d 内に例えば sample というファイルを作成し、以下のように記述する。
#rotate 4
rotate 12 … 3ヶ月(12周間)残す場合。(※restartなどは不要と思われるが要検証。)
/path/to/sample/*.log {
daily
rotate 14
missingok
notifempty
compress
}
以下で想定の結果を確認できる。
# logrotate -dv /etc/logrotate.conf
以下で実際にローテートが実行される。
# logrotate /etc/logrotate.conf
以下のようなエラーになってローテートされない場合、設定内の最初に「su root root」と記述するといい。
rotating pattern: /path/to/sample/file after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /path/to/sample/file
error: skipping "/path/to/sample/file" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
任意のログをlogrotateを使って管理する - Qiita
https://qiita.com/Esfahan/items/a8058f1eb593170855a1
logrotate 〜 ログがローテートされないときに〜 - GMOインターネットグループ グループ研究開発本部(次世代システム研究室)
https://recruit.gmo.jp/engineer/jisedai/blog/logrotate/
1777 なディレクトリのログを logrotate したときのエラー - Qiita
https://qiita.com/ngyuki/items/9a0ebfdb09e3b779e4fd
【Linux】パーミッションエラーでログローテーションされない時の対処法|RyoNotes
https://ryonotes.com/linux-logrotate-permission-error/
ログローテートの具体例は、Etcetera.txt の「root宛のメールを削除する」も参照。
■root宛メールの内容をローテート
/etc/logrotate.d/mail を作成し、以下を記述する。
これでroot宛メールの内容がローテートされ、古いものは自動で削除される。
(サーバの異常は、別途監視ツールなどで把握する前提。)
/var/spool/mail/root {
su root root
daily
rotate 14
missingok
notifempty
compress
}
■logrotateでのプロセス中断対策
※未検証。
ログローテートの際にApacheやNginxは再起動されるみたい。
「後日再読み込みさせよう」として設定ファイルを編集していると、自動で適用されてしまう可能性があるので注意。
以下はApacheとNginxのログローテートのデフォルト設定。
# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
create 0640 nginx root
daily
rotate 10
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
以下に再起動への対策が書かれている。
「systemctl reload httpd.service」を「systemctl graceful httpd.service」にすれば良さそう。
サービスを停止せずにログローテーション(logrotate)を行う - ゆーも
https://humo-life.net/blog/centos/187/
nginxの場合は「nginx -s reload」でgraceful扱いになるようだが、そもそも「restart」や「reload」と書かれていない。
対策は不要か、もしくは別の対策が必要か。
「nginx実践ガイド」のコマンドのメモ - Qiita
https://qiita.com/u310i/items/3b99b2dfb4897ca83374
【nginx】『途中の処理』を途中で止めないサーバー再起動【652日目】 - エンジニアのひよこ_level10
https://www.nyamucoro.com/entry/2019/07/27/222829
Nginxでgracefulってどうやるの!? - ADACHIN SERVER LABO
https://blog.adachin.me/archives/2820
Nginx を再起動せずに設定の変更だけ適用(graceful)する | PzGleaner
https://pzgleaner.com/archives/nginx-graceful
Nginxでgraceful - ハックノート
https://hacknote.jp/archives/20066/
「/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true」の意味は以下が参考になるか。
任意のログをlogrotateを使って管理する - Qiita
https://qiita.com/Esfahan/items/a8058f1eb593170855a1