Z biegiem czasu zauważyłem pewne dzienniki w /var/log
takich jak auth
, kern
i messages
były coraz ogromne. Zrobiłem logrotate
wpisy do nich:
$ cat /etc/logrotate.d/auth.log
/var/log/kern.log {
rotate 5
daily
}
$ cat /etc/logrotate.d/kern.log
/var/log/kern.log {
rotate 5
daily
}
$ cat /etc/logrotate.d/messages
/var/log/messages {
rotate 5
daily
postrotate
/bin/killall -HUP syslogd
endscript
}
mam też compress
włączoną opcję:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Działa to wielkie dla auth.log
, kern.log
i innych, co oznacza, że każdy z tych dzienników jest skompresowane i obracany, z ostatnich 5 dni dzienników zachowana. /var/log/messages
jednak nie jest kompresowany, co powoduje, że dzienniki są dłuższe niż 5 dni:
$ ls /var/log/messages*
/var/log/messages /var/log/messages-20100213
/var/log/messages-20100201 /var/log/messages-20100214
/var/log/messages-20100202 /var/log/messages-20100215
/var/log/messages-20100203 /var/log/messages-20100216
/var/log/messages-20100204 /var/log/messages-20100217
/var/log/messages-20100205 /var/log/messages-20100218
/var/log/messages-20100206 /var/log/messages-20100219
/var/log/messages-20100207 /var/log/messages-20100220
/var/log/messages-20100208 /var/log/messages-20100221
/var/log/messages-20100209 /var/log/messages-20100222
/var/log/messages-20100210 /var/log/messages-20100223
/var/log/messages-20100211 /var/log/messages-20100224
/var/log/messages-20100212
Jak wyjaśniono w innym logrotate
pytaniu dotyczącym ServerFault , stare dzienniki (najprawdopodobniej) nie są usuwane, ponieważ końce plików są różne dla każdego pliku. Wydaje się, że dzieje się tak, ponieważ pliki nie są gzipowane.
Co mogę zrobić, aby /var/log/messages
skompresować i obrócić, zachowując ostatnie 5 dni dzienników, tak jak wszystkie inne pliki dzienników? czego mi brakuje?
EDYCJA 1 : dodatkowe informacje zgodnie z żądaniem w pierwszych kilku odpowiedziach.
Używam Gentoo Linux. Mój /etc/logrotate.conf
plik:
$ cat /etc/logrotate.conf
# $Header: /var/cvsroot/gentoo-x86/app-admin/logrotate/files/logrotate.conf,v 1.3 2008/12/24 20:49:10 dang Exp $
#
# Logrotate default configuration file for Gentoo Linux
#
# See "man logrotate" for details
# rotate log files weekly
weekly
#daily
# 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
# packages can drop log rotation information into this directory
include /etc/logrotate.d
notifempty
nomail
noolddir
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
/etc/logrotate.d
zawiera moje niestandardowe pliki konfiguracyjne, jak wspomniano powyżej, wraz z konfiguracjami mysql, rsync itp. zainstalowanymi przez te pakiety.
Mój katalog główny crontab
jest pusty:
$ sudo crontab -l
no crontab for root
Sprawdziłem wszystko pod /etc/cron.{daily,hourly,monthly,weekly}
kątem syslog, i jest skrypt, który się obraca /var/log/syslog
i /var/log/auth.log
.
Następnie utworzyłem /var/log/messages
tylko logrotate
plik konfiguracyjny, zgodnie z sugestią CarpeNoctem:
$ cat logrotate-messages
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
rotate 5
daily
postrotate
/bin/killall -HUP syslogd
endscript
}
Następnie uruchomiłem logrotate
ręcznie:
$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages
Handling 1 logs
rotating pattern: /var/log/messages forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /var/log/messages to /var/log/messages-20100224
creating new /var/log/messages mode = 0644 uid = 0 gid = 0
running postrotate script
running script with arg /var/log/messages : "
/bin/killall -HUP syslogd
"
compressing log with: /bin/gzip
$ which gzip
/bin/gzip
$ file /bin/gzip
/bin/gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
Zgodnie z powyższym dziennikiem logrotate
skompresowałem dziennik za pomocą / bin / gzip, ale nie widzę pliku skompresowanych wiadomości /var/log
. Również globowanie dla starych obróconych plików nie powiodło się.
EDYCJA 2 : dodanie danych wyjściowych debugowania logrotate
po dodaniu .gz
sufiksu do starych /var/log/message-*
plików.
Zaczynamy od:
$ ls /var/log/messages*
/var/log/messages /var/log/messages-20100222.gz
/var/log/messages-20100219.gz /var/log/messages-20100223.gz
/var/log/messages-20100220.gz /var/log/messages-20100224.gz
/var/log/messages-20100221.gz
Następnie uruchom logrotate
nasz niestandardowy plik konfiguracyjny:
$ logrotate -d logrotate-messages -f
reading config file logrotate-messages
reading config info for /var/log/messages
Handling 1 logs
rotating pattern: /var/log/messages forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/messages
log needs rotating
rotating log /var/log/messages, log->rotateCount is 5
dateext suffix '-20100224'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
removing /var/log/messages-20100219.gz
removing old log /var/log/messages-20100219.gz
destination /var/log/messages-20100224.gz already exists, skipping rotation
Tym razem logrotate
glob udaje się i znajduje szósty skompresowany plik dziennika, zamierzając go usunąć. Plik nie jest tak naprawdę usunięty; Chyba dlatego, że działamy w trybie debugowania.
Jestem ciekawy, czy włączenie tej delaycompress
opcji /var/log/messages
pomoże. Włączyłem go i sprawdzę wyniki następnego dnia rano.
Odpowiedzi:
Dodanie
delaycompress
do sekcji konfiguracji w celu/var/log/messages
rozwiązania problemu.Od
man logrotate
:Chyba
sysklogd
mój demon syslog nie może nakazać zamknięcia swojego pliku dziennika, dlatego jest to konieczne.Co ciekawe, oryginalna konfiguracja, którą miałem (bez
delaycompress
dyrektywy), pochodzi prosto zman logrotate
(z wyjątkiem tego, że zmieniłemweekly
nadaily
):źródło
Trudno powiedzieć na podstawie tych informacji, ale mogę powiedzieć, co mnie uratowało kilka razy.
Logrotate ma opcję debugowania, która drukuje play-by-play każdego kroku, który należy wykonać do standardowego wyjścia. W takim przypadku możesz wykonać:
Wyjście powie ci, co dokładnie się dzieje. Ponadto, jeśli chcesz zawęzić wyniki debugowania, możesz to zrobić
Chociaż możesz tymczasowo umieścić główne opcje logrotate.conf w tym bloku plików, ponieważ bezpośrednie określenie pliku oznacza, że nigdy nie będzie czytał głównych opcji konfiguracji. Określenie pojedynczego pliku oznacza również, że możesz użyć opcji
-f
(wymuszonej) w połączeniu z opcją debugowania, aby zobaczyć faktyczny obrót pliku wiadomości.źródło
/var/log/messages
plikiem na żywo i tadelaycompress
opcja pomoże.-d, --debug
Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file.
Rozważ wypróbowanie tego ustawienia w pliku logrotate.conf:
i zmień nazwę swoich istniejących plików wiadomości, aby użyć kropki zamiast myślnika. Następnie spróbuj ponownie logrotować.
Poniższe wskazówki doprowadziły mnie do przekonania, że kreska może powodować awarię globu, jeśli zostanie to w jakiś sposób zinterpretowane jako opcja (gdzie - to naprawi). To nie ma sensu, ale może być możliwe.
źródło
/var/log/messages
polega na tym, że obrócone/var/log/messages
pliki nie są kompresowane.