logrotate + 如何控制 /var/log 下的安全日誌
我們伺服器中 /var/log 下的安全日誌超過 1G,如下所示
du -sh * | grep sec 0 secure 4.2G secure-20210726 1.8G secure-20210801 1.2G secure-20210804
所以我們決定在 maxsize 達到 100M 後輪換安全日誌
所以我們將以下內容添加到 /etc/logrotate.conf
more /etc/logrotate.conf # see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. /var/log/secure { monthly minsize 1M maxsize 100M rotate 5 }
然後我們
/var/log/secure
從中刪除了該行/etc/logrotate.d/syslog
,以避免重複條目最後我們刷新日誌輪換為
logrotate /etc/logrotate.conf
一段時間後,我們檢查了 /var/log 下的安全日誌
du -sh * | grep sec 0 secure 4.2G secure-20210726 1.8G secure-20210801 1.2G secure-20210804
但正如我們在上面看到的,沒有任何改變
那麼我的配置有什麼問題?
你的配置沒有問題。
logrotate
將輪換條件應用於目前日誌文件,它不檢查輪換文件(secure-20210726
等)的屬性。只有當您有足夠的文件達到輪換限制時,您才會看到輪換文件的更改,此時最舊的文件將被刪除。您可以啟用壓縮,並手動壓縮現有文件。
好吧,看看時間戳,即使在您更改之前,文件的最後一次成功輪換是 2021 年 8 月 4 日,這大約是今天加上或減去我們所在的時區,所以……您期望看到什麼?logrotate 通常每天通過 cron 作業或 systemd 計時器啟動一次,因此在此之前不會發生任何事情。
手動呼叫
logrotate /etc/logrotate.conf
幾乎什麼也沒做。由於 logrotate 不是守護程序,因此您不需要顯式“重新載入配置”,並且它可能發現由於 logrotate 經常在晚上執行,日誌文件還不足以輪換。根據您的配置,您將在大約一個月內看到輪換,除非
secure
增長到超過 1 億。(我之所以這麼說是因為就個人而言,我很少發現大小選項很有用——我更喜歡定期輪換,即使它會導緻小的舊日誌文件,如果發生某些事情導致我的日誌文件爆炸,logrotate 不會保存無論如何我,所以我只需將規則更改為daily
併計算出我想要保留多少天。)