我有一個運行 rsyslog 和 logrotate 的 CentOS 機器作為我的系統日誌伺服器,用於一大堆網路設備。我已經玩了一段時間了,logrotate/壓縮部分工作正常,但我似乎無法讓它刪除舊的壓縮 .gz 日誌。這是基本設定:
日誌儲存在:/var/log/syslog 中,每個主機根據其 IP 位址或主機名稱建立一個新的子資料夾。我有兩個特別健談的主機,所以我有特定的規則讓它們在 5 GB 之後截斷。這個想法是每天壓縮並開始一個新的日誌,並保留 60 天的日誌。
這是我的配置(其中大部分不是我創建的,但我維護並修改了其中幾個):
貓 /etc/cron.hourly/logrotate
#!/bin/sh`enter code here`
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
貓 /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
compress
daily
#delaycompress
dateext
missingok
rotate 60
maxage 60
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
貓 /etc/logrotate.conf
/var/log/syslog/*/*.log {
daily
rotate 60
maxage 60
compress
}
daily
rotate 60
create
dateext
compress
include /etc/logrotate.d
/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.
# Specific rule for HOST_A
/var/log/syslog/HOST_A/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}
# Specific rule for HOST_B
/var/log/syslog/HOST_B/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}
這是我的 \var\log\syslog\host_a 資料夾中的範例:
ls /var/log/syslog/HOST_A/ | ls /var/log/syslog/HOST_A/ |廁所-l
104
ls /var/log/syslog/HOST_A/ -lh
-rw------- 1 root root 416M Jun 20 23:59 HOST_A_2018_06_20.log.1.gz
-rw------- 1 root root 64M Jun 20 16:18 HOST_A_2018_06_20.log.2.gz
-rw------- 1 root root 1.5G Jun 21 23:59 HOST_A_2018_06_21.log.1.gz
<many files redacted>
-rw------- 1 root root 1.6G Sep 4 23:59 HOST_A_2018_09_04.log.1.gz
-rw------- 1 root root 1.5G Sep 5 23:59 HOST_A_2018_09_05.log.1.gz
-rw------- 1 root root 7.7G Sep 6 10:58 HOST_A_2018_09_06.log
因此,您可以在上面看到,60 天後它不會刪除舊的存檔 .gz 日誌。它無限期地保留著它們。我必須定期進入並手動刪除舊文件以減小大小。這些文件從 6/20 到 9/6(今天),即 104 天。我確信我配置錯誤,但不確定我缺少什麼。任何幫助,將不勝感激。
答案1
您對日常日誌檔案使用兩種機制,它們不相互合作。
一方面讓 syslog 產生每日文件,另一方面讓 logrotate 輪換文件。 Logrotate 會將每個日常檔案視為一組單獨的唯一檔案(它不認為 HOST_A_2018_09_05.log 與 HOST_A_2018_09_06.log 相關)進行輪換,因此每個模式永遠不會達到 5 個檔案。
最好不要在檔案名稱中包含日期,或讓 syslog 自行修剪舊檔案。