logrotate / var / log / mesajlarını sıkıştırmaz


11

Zamanla ben bazı günlükleri fark /var/loggibi auth, kernve messagesbüyük başlamıştı. Onlar için logrotategirişler yaptım :

$ 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
}

Ayrıca ben compressseçeneği etkin:

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

Bu harika için çalışır auth.log, kern.logbu günlükler her gzip'lenmiş ve tutulan günlük dosyalarının son 5 gün ile, döndürüldüğünde, yani ve diğerleri. /var/log/messagesAncak edilir değil şekilde günlükleri fazla 5 gün sonuçlanan sıkıştırılmış olan:

$ 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

ServerFault ile ilgili başka bir logrotatesoruda açıklandığı gibi, dosya sonları her dosya için farklı olduğu için eski günlükler (büyük olasılıkla) kaldırılmaz. Bunun nedeni dosyaların sıkıştırılmamasıdır.

/var/log/messagesDiğer tüm günlük dosyalarım gibi günlüklerin tutulduğu son 5 günlük sıkıştırılmış ve döndürülmüş olması için ne yapabilirim ? Neyi kaçırıyorum?

DÜZENLEME 1 : ilk çift cevaplarında istenen ek bilgiler.

Gentoo Linux kullanıyorum. Benim /etc/logrotate.confdosyam:

$ 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 bu paketler tarafından yüklenen mysql, rsync, vb. ile birlikte yukarıda belirtildiği gibi özel yapılandırma dosyalarımı içerir.

Köküm crontabboş:

$ sudo crontab -l
no crontab for root

Bütün kontrol /etc/cron.{daily,hourly,monthly,weekly}alakalı herhangi bir şeyin syslog için ve bir senaryo döndüğü var /var/log/syslogve /var/log/auth.log.

Sonra, CarpeNoctem tarafından önerilen bir /var/log/messages-onec logrotateyapılandırma dosyası yaptım :

$ cat logrotate-messages 
weekly
rotate 4
create
dateext
compress
notifempty
nomail
noolddir
/var/log/messages {
    rotate 5
    daily
    postrotate
        /bin/killall -HUP syslogd
    endscript
}

Sonra logrotateelle koştu :

$ 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

Yukarıdaki günlüğe göre, günlüğü logrotate/ bin / gzip ile sıkıştırdı, ancak sıkıştırılmış bir ileti dosyası görmüyorum /var/log. Ayrıca, eski döndürülmüş dosyalar için globbing başarısız oldu.

DÜZENLEME 2 : eski dosyalara logrotatebir .gzsonek ekledikten sonra çalıştırmada hata ayıklama çıktısı ekleme /var/log/message-*.

Şununla başlıyoruz:

$ 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

Ardından logrotateözel yapılandırma dosyamızla çalıştırın :

$ 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

Bu kez, logrotateglob başarılı olur ve altıncı sıkıştırılmış günlük dosyasını bulur ve kaldırmayı düşünür. Dosya aslında kaldırılmaz; Sanırım bunun nedeni hata ayıklama modunda çalıştığımızdır.

İçin delaycompressseçeneği etkinleştirmenin /var/log/messagesyardımcı olup olmayacağını merak ediyorum . Bunu etkinleştirdim ve ertesi sabah sonuçları kontrol edeceğim.


Logrotate.conf dosyasını gönderebilir misiniz? Şimdiye kadar paylaştığınız alıntılarda yer alan hiçbir şey, bu mesaj dosyalarındaki tarih sonekini açıklayamaz. Logrotate, döndürülmüş günlük dosyalarındaki tarih soneklerini desteklemek için kullanılmadı. Bu beni başka bir şeyin tamamen bu dosyaları yarattığına inandırıyor. Aynı işi yapmaya çalışan başka bir komut dosyanız olup olmadığını görmek için / etc / crontab, root'un crontab ve /etc/cron.daily öğelerini kontrol edin.
jmtd

buna ek olarak, hangi linux dağıtımını yaptığınızı söyleyebilir misiniz? Debian / Ubuntu, logrotate öğelerinizi doldurabilecek kendi günlük rotasyon komut dosyasına sahiptir.
thepocketwade

Yanıt için teşekkürler. Gentoo Linux kullanıyorum. Crontabs'ım / var / log / mesajlarının yönetimini yapmıyor. Ayrıntılar için lütfen sorumdaki yeni bilgilere bakın.
Mike Mazur

Yanıtlar:


8

delaycompressYapılandırma bölümüne ekleme /var/log/messagessorunu çözdü.

Gönderen 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.

Sanırım sysklogd, sistem günlüğü arka plan programımın günlük dosyasını kapatması söylenemez ve bu yüzden bu gereklidir.

İlginçtir, ben (olmadan vardı orijinal yapılandırma delaycompress, direktif) düz out geldi man logrotate(ben değiştirdi hariç weeklyiçin daily):

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

Bilinmeyen bilinmeyen seçenek 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf okuma yapılandırma dosyası /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log için yapılandırma bilgilerini okuyor hata: /etc/logrotate.d/apc_rtbinfo.conf:7 bilinmeyen seçenek 'delalycompress' - satırı yoksayma 1 günlükleri işleme
Ashish Karpe

# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {daily missingok notifempty size 2000M sıkıştırmak paylaşımlı komut dosyalarını kopyala copytruncate rotate 3}
Ashish Karpe

1
Tamam "delalycompress" yazım hatası var
Ashish Karpe

Ama şimdi sorun, log.1'in 2000M'den fazla olması # 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

Sadece bu bilgi ile söylemek zor, ama beni birkaç kez neyin kurtardığını söyleyebilirim.

Logrotate, stdout için gereken her adımın bir play-by-play yazdırmasını sağlayacak bir hata ayıklama seçeneğine sahiptir. Yani bu durumda şunları yapabilirsiniz:

logrotate -d /etc/logrotate.conf

Çıktı size tam olarak neler olduğunu söyleyecektir. Ayrıca, hata ayıklama çıktısını daraltmak isterseniz,

logrotate -d /etc/logrotate.d/messages

Ana logrotate.conf seçeneklerini geçici olarak bu dosyalar bloğuna yerleştirmek isteyebilirsiniz, çünkü dosyayı doğrudan belirtmek ana yapılandırma seçeneklerini asla okumaz demektir. Tek tek dosyanın belirtilmesi, -fgerçekleşen mesajlar dosyasının gerçek bir dönüşüne bakmak için (zorla) seçeneğini hata ayıklama seçeneği ile birlikte kullanabileceğiniz anlamına gelir .


Logrotate'i önerdiğiniz gibi manuel olarak çalıştırmayı denedim ve günlükleri sıkıştırdığını söylüyor, ancak hiçbir yerde sıkıştırılmış günlük bulamıyorum. Ayrıntılar için yukarıdaki soruma bakın.
Mike Mazur

1
.gz ile bitecek şekilde en eski 5 ileti dosyasını yeniden adlandırın ve logrotate öğesinin olması gerektiği gibi en eski olanı kaldırıp kaldırmayacağını görün. Bunu yaparsa, gzip'in düzgün çalışmaması nedeniyle globbingin başarısız olduğunu biliyoruz. Bu en azından sıkıştırma eksikliğinin dönme eksikliğinden sorumlu olduğunu doğrulayacaktır.
CarpeNoctem

Tamamlandı, yukarıdaki soruya ayrıntılar eklendi. Canlı /var/log/messagesdosyada bir çekişme sorunu olup olmadığını merak ediyorum ve delaycompressseçenek yardımcı olacaktır.
Mike Mazur

Bulduğum bir başka ilginç nokta. -D seçeneğini etkinleştirdiğinizde, logrotate komutu günlük dosyalarına dokunmaz. Daha fazla bilgi için kılavuza bakın. -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

Logrotate.conf dosyasında bu ayarı denemeyi düşünün:

dateformat .%Y%m%d

ve mevcut ileti dosyalarınızı tire yerine nokta kullanmak üzere yeniden adlandırın. Sonra tekrar logrotatınızı deneyin.

Aşağıdaki ipuçları, bir şekilde bir seçenek olarak yorumlanırsa, çizginin glob'un başarısız olmasına neden olabileceğine inanmamı sağladı (nerede - bunu düzeltir). Mantıklı değil, ama mümkün olabilir.

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

Bunun temel neden olduğunu sanmıyorum. Geçerli tarih biçimi, kısa çizgiyle diğer günlük dosyaları için iyi çalışır. Bu günlük dosyaları ile arasındaki fark /var/log/messages, döndürülen /var/log/messagesdosyaların sıkıştırılmamış olmasıdır.
Mike Mazur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.