logrotate tidak memampatkan / var / log / pesan

11

Seiring waktu saya perhatikan beberapa log /var/logseperti auth, kerndan messagessemakin besar. Saya membuat logrotateentri 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 compressopsi yang diaktifkan:

$ grep compress /etc/logrotate.conf 
# uncomment this if you want your log files compressed
compress

Ini berfungsi baik untuk auth.log, kern.logdan yang lainnya, yang berarti bahwa masing-masing log tersebut di-gzip dan diputar, dengan 5 hari terakhir dari log tersebut dipertahankan. /var/log/messagesnamun 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 logrotatetentang 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/messagesmengompresi 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.confFile 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 crontabkosong:

$ 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/syslogdan /var/log/auth.log.

Selanjutnya, saya membuat file konfigurasi /var/log/messages-hanya logrotateseperti 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 logrotatesecara 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, logrotatekompres 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 logrotaterun setelah menambahkan .gzakhiran 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 logrotatedengan 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, logrotateglob 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 delaycompressopsi untuk /var/log/messagesakan membantu. Saya mengaktifkannya dan akan memeriksa hasilnya keesokan paginya.

Mike Mazur
sumber
Bisakah Anda memposting logrotate.conf Anda? Tidak ada dalam kutipan yang Anda bagikan sejauh ini akan menjelaskan akhiran tanggal pada file pesan tersebut. Logrotate tidak digunakan untuk mendukung sufiks tanggal pada file log yang diputar. Ini membuat saya percaya bahwa ada hal lain yang sama sekali membuat file-file itu. Periksa / etc / crontab, crontab root dan /etc/cron.daily untuk melihat apakah Anda memiliki skrip lain yang mencoba melakukan pekerjaan yang sama.
jmtd
selain itu, dapatkah Anda memberi tahu kami distribusi linux apa yang Anda jalankan? Debian / Ubuntu memiliki skrip rotasi log sendiri yang dapat mengubah hal-hal logrotate Anda.
thepocketwade
Terima kasih balasannya. Saya menjalankan Gentoo Linux. Crontab saya tidak melakukan manajemen / var / log / messages. Silakan lihat info baru di pertanyaan saya untuk detailnya.
Mike Mazur

Jawaban:

8

Menambahkan delaycompresske bagian konfigurasi untuk /var/log/messagesmenyelesaikan masalah.

Dari man logrotate:

   delaycompress
          Postpone  compression of the previous log file to the next rota‐
          tion cycle.  This only has effect when used in combination  with
          compress.   It  can  be used when some program cannot be told to
          close its logfile and thus might continue writing to the  previ‐
          ous log file for some time.

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 delaycompressarahan), langsung keluar dari man logrotate(kecuali saya berubah weeklymenjadi daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }
Mike Mazur
sumber
Disebutkan opsi 'delalycompress' tidak dikenal 'logrotate -v /etc/logrotate.d/apc_rtbinfo.conf membaca file config /etc/logrotate.d/apc_rtbinfo.conf membaca info konfigurasi untuk /mnt/log/frengo/apc_rtbinfo.log galat: /etc/logrotate.d/apc_rtbinfo.conf:7 opsi 'delalycompress' tidak dikenal - mengabaikan baris Penanganan 1 log
Ashish Karpe
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {harian missingok ukuran notifempty 2000M kompres delalycompress sharedscripts copytruncate rotate 3}
Ashish Karpe
1
ok punya kesalahan ada kesalahan ketik di "delalycompress"
Ashish Karpe
Tapi sekarang masalahnya adalah bahwa log.1 lebih dari 2000M # du -sh /mnt/log/frengo/apc_rtbinfo.log* 0 /mnt/log/frengo/apc_rtbinfo.log 4.7G /mnt/log/frengo/apc_rtbinfo.log .1 80M /mnt/log/frengo/apc_rtbinfo.log.2 0 /mnt/log/frengo/apc_rtbinfo.log-20151222 679M /mnt/log/frengo/apc_rtbinfo.log-20151225.gz 681M / mnt / log / frengo /apc_rtbinfo.log-20151226.gz 691M /mnt/log/frengo/apc_rtbinfo.log-20151227.gz 0 /mnt/log/frengo/apc_rtbinfo.log-20151228 70M /mnt/log/frengo/apc_rtbinfo.log.2. gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe
5

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:

logrotate -d /etc/logrotate.conf

Output akan memberi tahu Anda apa yang sebenarnya terjadi. Juga, jika Anda ingin mempersempit hasil debug yang dapat Anda lakukan

logrotate -d /etc/logrotate.d/messages

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.

CarpeNoctem
sumber
Saya mencoba menjalankan logrotate secara manual seperti yang Anda sarankan, dan itu memberi tahu saya itu mengompresi log, tapi saya tidak menemukan log terkompresi di mana pun. Lihat pertanyaan saya di atas untuk detailnya.
Mike Mazur
1
ganti nama 5 file pesan terlama sehingga berakhir dengan .gz dan lihat apakah logrotate menghapus yang tertua seperti yang seharusnya. Jika tidak maka kita tahu bahwa globbing gagal karena gzip tidak berjalan dengan benar. Ini setidaknya akan mengkonfirmasi bahwa kurangnya kompresi yang harus disalahkan atas kurangnya rotasi.
CarpeNoctem
Selesai, detail ditambahkan ke pertanyaan di atas. Saya ingin tahu apakah ada beberapa masalah pertentangan dengan /var/log/messagesfile langsung dan delaycompressopsi akan membantu.
Mike Mazur
Hal menarik lainnya yang saya temukan. Saat Anda mengaktifkan opsi -d, perintah logrotate tidak akan menyentuh file log. Periksa manual untuk info lebih lanjut. -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.
CBR
1

Pertimbangkan mencoba pengaturan ini di logrotate.conf Anda:

dateformat .%Y%m%d

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.

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
Dijeda sampai pemberitahuan lebih lanjut.
sumber
Saya kira ini bukan akar masalahnya. Format tanggal saat ini, dengan tanda hubung, berfungsi dengan baik untuk file log lainnya. Perbedaan antara file-file log dan /var/log/messagesbahwa /var/log/messagesfile yang diputar tidak dikompresi.
Mike Mazur