Linux

logrotate + 如何控制 /var/log 下的安全日誌

  • August 4, 2021

我們伺服器中 /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併計算出我想要保留多少天。)

引用自:https://unix.stackexchange.com/questions/663267