Rsyslog

Logrotate 不刪除壓縮日誌

  • September 6, 2018

我有一個執行 rsyslog 和 logrotate 的 CentOS 機器作為我的系統日誌伺服器,用於一大堆網路設備。我已經玩了一段時間了,logrotate/compression 工作正常,但我似乎無法刪除舊的壓縮 .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/ | wc -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 天。我確定我配置錯誤,但不確定我缺少什麼。任何幫助,將不勝感激。

您正在為日常日誌文件使用兩種機制,並且它們彼此不合作。

一方面讓 syslog 生成每日文件,另一方面讓 logrotate 旋轉文件。Logrotate 會將每個每日文件視為一組單獨的唯一文件(它不認為 HOST_A_2018_09_05.log 與 HOST_A_2018_09_06.log 相關)進行輪換,因此每個模式永遠不會達到五個文件文件。

最好不要在文件名中包含日期,或者讓 syslog 自己修剪舊文件。

引用自:https://serverfault.com/questions/929758