Seiring waktu saya perhatikan beberapa log /var/log
seperti auth
, kern
dan messages
semakin besar. Saya membuat logrotate
entri untuk mereka:
$ 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
}
juga saya memiliki compress
opsi yang diaktifkan:
$ grep compress /etc/logrotate.conf
# uncomment this if you want your log files compressed
compress
Ini berfungsi baik untuk auth.log
, kern.log
dan yang lainnya, yang berarti bahwa masing-masing log tersebut di-gzip dan diputar, dengan 5 hari terakhir dari log tersebut dipertahankan. /var/log/messages
namun tidak dikompres, menghasilkan log lebih dari 5 hari:
$ 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
Seperti dijelaskan dalam pertanyaan lain logrotate
tentang ServerFault , log lama (kemungkinan besar) tidak dihapus karena ujung file berbeda untuk setiap file. Ini tampaknya karena file tidak sedang di-gzip.
Apa yang dapat saya lakukan untuk /var/log/messages
mengompresi dan memutar dengan 5 hari terakhir dari log yang disimpan seperti semua file log saya yang lain? Apa yang saya lewatkan?
EDIT 1 : informasi tambahan seperti yang diminta dalam jawaban pasangan pertama.
Saya menjalankan Gentoo Linux. /etc/logrotate.conf
File saya :
$ 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
berisi file konfigurasi khusus saya seperti yang disebutkan di atas bersama dengan konfigurasi untuk mysql, rsync, dll yang diinstal oleh paket-paket itu.
Root saya crontab
kosong:
$ sudo crontab -l
no crontab for root
Saya memeriksa semua /etc/cron.{daily,hourly,monthly,weekly}
untuk syslog yang terkait, dan ada skrip yang berputar /var/log/syslog
dan /var/log/auth.log
.
Selanjutnya, saya membuat file konfigurasi /var/log/messages
-hanya logrotate
seperti yang disarankan oleh 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
}
Lalu saya berlari logrotate
secara manual:
$ 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
Menurut log di atas, logrotate
kompres log dengan / bin / gzip, tapi saya tidak melihat file pesan terkompresi di /var/log
. Gagal menggilir untuk file yang diputar lama.
EDIT 2 : menambahkan output debug dari logrotate
run setelah menambahkan .gz
akhiran ke /var/log/message-*
file lama .
Kami mulai dengan:
$ 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
Kemudian jalankan logrotate
dengan file konfigurasi khusus kami:
$ 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
Kali ini, logrotate
glob berhasil dan menemukan file log terkompresi keenam, bermaksud untuk menghapusnya. File sebenarnya tidak dihapus; Saya kira itu karena kita sedang menjalankan dalam mode debug.
Saya ingin tahu apakah mengaktifkan delaycompress
opsi untuk /var/log/messages
akan membantu. Saya mengaktifkannya dan akan memeriksa hasilnya keesokan paginya.
Jawaban:
Menambahkan
delaycompress
ke bagian konfigurasi untuk/var/log/messages
menyelesaikan masalah.Dari
man logrotate
:Saya kira
sysklogd
, daemon syslog saya, tidak dapat diberitahu untuk menutup logfile-nya, dan dengan demikian ini diperlukan.Menariknya, konfigurasi asli yang saya miliki (tanpa
delaycompress
arahan), langsung keluar dariman logrotate
(kecuali saya berubahweekly
menjadidaily
):sumber
Sulit untuk mengatakan hanya dengan info ini, tetapi saya dapat memberi tahu Anda apa yang telah menyelamatkan saya beberapa kali.
Logrotate memiliki opsi debug yang akan mencetak play-by-play dari setiap langkah yang diperlukan untuk stdout. Jadi dalam hal ini yang bisa Anda lakukan:
Output akan memberi tahu Anda apa yang sebenarnya terjadi. Juga, jika Anda ingin mempersempit hasil debug yang dapat Anda lakukan
Meskipun Anda mungkin ingin untuk sementara waktu menempatkan opsi logrotate.conf utama di blok file itu karena menentukan file secara langsung berarti tidak akan pernah membaca opsi konfigurasi utama. Menentukan file individual juga berarti Anda dapat menggunakan opsi
-f
(force) dalam kombinasi dengan opsi debug untuk melihat rotasi aktual dari file pesan yang sedang berlangsung.sumber
/var/log/messages
file langsung dandelaycompress
opsi akan membantu.-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.
Pertimbangkan mencoba pengaturan ini di logrotate.conf Anda:
dan ganti nama file pesan yang ada untuk menggunakan titik alih-alih tanda hubung. Kemudian coba logrotate Anda lagi.
Petunjuk di bawah ini membuat saya percaya bahwa tanda hubung mungkin menyebabkan glob gagal jika ditafsirkan entah bagaimana sebagai pilihan (di mana - akan memperbaikinya). Itu tidak masuk akal, tapi itu mungkin saja.
sumber
/var/log/messages
bahwa/var/log/messages
file yang diputar tidak dikompresi.