logrotate ไม่บีบอัด / var / log / ข้อความ


11

เมื่อเวลาผ่านไปผมสังเกตเห็นบางอย่างในการบันทึก/var/logเช่นauth, kernและmessagesได้รับมาก ฉันทำlogrotateรายการสำหรับพวกเขา:

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

ฉันยังมีcompressตัวเลือกเปิดใช้งาน:

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

นี้ทำงานได้ดีสำหรับauth.log, kern.logและอื่น ๆ ซึ่งหมายความว่าแต่ละบันทึกเหล่านั้น gzipped และหมุนด้วย 5 วันสุดท้ายของการบันทึกเก็บไว้ /var/log/messagesอย่างไรก็ตามไม่มีการบีบอัดทำให้มีการบันทึกมากกว่า 5 วัน:

$ 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

ตามที่อธิบายไว้ในคำถามอื่นlogrotateใน ServerFaultล็อกเก่าไม่น่าจะถูกลบออกเพราะไฟล์จบจะแตกต่างกันสำหรับแต่ละไฟล์ สิ่งนี้ดูเหมือนจะเป็นเพราะไฟล์ไม่ได้ถูก gzipped

ฉันจะทำอย่างไรเพื่อให้มีการ/var/log/messagesบีบอัดและหมุนด้วยการบันทึก 5 วันสุดท้ายเช่นเดียวกับไฟล์บันทึกอื่น ๆ ของฉัน ฉันกำลังคิดถึงอะไร

แก้ไข 1 : ข้อมูลเพิ่มเติมตามที่ร้องขอในคำตอบคู่แรก

ฉันใช้ Gentoo Linux /etc/logrotate.confไฟล์ของฉัน:

$ 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 มีไฟล์ config ที่กำหนดเองตามที่กล่าวไว้ข้างต้นพร้อมกับ config สำหรับ mysql, rsync และอื่น ๆ ที่ติดตั้งโดยแพ็คเกจเหล่านั้น

รากของฉันcrontabว่างเปล่า:

$ sudo crontab -l
no crontab for root

ฉันจะตรวจสอบทั้งหมด/etc/cron.{daily,hourly,monthly,weekly}สำหรับสิ่งที่ syslog ที่เกี่ยวข้องและมีสคริปต์ซึ่งหมุนและ/var/log/syslog/var/log/auth.log

ต่อไปผมจะทำ/var/log/messagesเท่านั้นlogrotateไฟล์ config ตามที่แนะนำโดย 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
}

จากนั้นฉันก็วิ่งlogrotateด้วยตนเอง:

$ 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

ตามบันทึกข้างต้นlogrotateบีบอัดเข้าสู่ระบบด้วย / bin / gzip /var/logแต่ฉันไม่เห็นไฟล์บีบอัดในข้อความ นอกจากนี้การวนสำหรับไฟล์ที่หมุนแล้วเก่าก็ล้มเหลว

แก้ไข 2 : การเพิ่มเอาต์พุตการดีบักของการlogrotateรันหลังจากผนวก.gzส่วนต่อท้ายเข้ากับ/var/log/message-*ไฟล์เก่า

เราเริ่มด้วย:

$ 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

จากนั้นเรียกใช้logrotateไฟล์ปรับแต่งของเรา:

$ 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

เวลานี้logrotateglob สำเร็จและพบ logfile ที่บีบอัดที่หกตั้งใจที่จะลบมัน ไฟล์ไม่ได้ถูกลบจริงๆ ฉันเดาว่าเป็นเพราะเรากำลังทำงานในโหมดแก้ไขข้อบกพร่อง

ฉันอยากรู้ว่าการเปิดใช้งานdelaycompressตัวเลือกสำหรับ/var/log/messagesจะช่วยได้หรือไม่ ฉันเปิดใช้งานมันและจะตรวจสอบผลลัพธ์ในเช้าวันรุ่งขึ้น


คุณสามารถโพสต์ logrotate.conf ของคุณได้หรือไม่? ข้อความที่ตัดตอนมาที่คุณแบ่งปันไม่มีในตอนนี้จะอธิบายคำต่อท้ายวันที่ในไฟล์ข้อความเหล่านั้น Logrotate ไม่ได้ใช้เพื่อสนับสนุนคำต่อท้ายวันที่ในไฟล์บันทึกที่หมุน สิ่งนี้ทำให้ฉันเชื่อว่ามีบางสิ่งที่กำลังสร้างไฟล์เหล่านั้นทั้งหมด ตรวจสอบ / etc / crontab, root ของ crontab และ /etc/cron.daily เพื่อดูว่าคุณมีสคริปต์อื่นที่พยายามจะทำงานเดียวกัน
jmtd

นอกจากนี้คุณสามารถบอกเราได้ว่าคุณใช้งาน linux แบบใด Debian / Ubuntu มีสคริปต์การหมุนบันทึกของตัวเองซึ่งอาจทำให้ข้อมูลของคุณยุ่งเหยิง
thepocketwade

ขอบคุณสำหรับการตอบกลับ. ฉันใช้ Gentoo Linux crontabs ของฉันไม่ได้ทำการจัดการ / var / log / ข้อความใด ๆ โปรดดูข้อมูลใหม่ในคำถามของฉันสำหรับรายละเอียด
Mike Mazur

คำตอบ:


8

การเพิ่มdelaycompressไปยังส่วนการกำหนดค่าสำหรับการ/var/log/messagesแก้ไขปัญหา

จาก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.

ฉันเดาsysklogd, syslog daemon ของฉัน, ไม่สามารถบอกให้ปิด logfile ของมัน, และนี่คือสิ่งที่จำเป็น

ที่น่าสนใจคือการกำหนดค่าดั้งเดิมที่ฉันมี (ไม่มีdelaycompressคำสั่ง) มาตรงจากman logrotate(ยกเว้นฉันเปลี่ยนweeklyเป็นdaily):

   # sample logrotate configuration file
   compress

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

มีการพูดตัวเลือกที่ไม่รู้จักที่ไม่รู้จัก 'delalycompress' # logrotate -v /etc/logrotate.d/apc_rtbinfo.conf การอ่านไฟล์ปรับแต่งไฟล์ /etc/logrotate.d/apc_rtbinfo.conf กำลังอ่านข้อมูล config สำหรับ /mnt/log/frengo/apc_rtbinfo.log ข้อผิดพลาด: /etc/logrotate.d/apc_rtbinfo.conf:7 ตัวเลือกที่ไม่รู้จัก 'delalycompress' - ละเว้นบรรทัดการจัดการ 1 บันทึก
Ashish Karpe

# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {ขนาดที่หายไปในชีวิตประจำวันที่ไม่ได้รับการแจ้งเตือนขนาด 2000M การบีบอัด delalycompress sharedscripts copytruncate หมุน 3}
Ashish Karpe

1
ตกลงได้รับข้อผิดพลาดที่มีการพิมพ์ผิดใน "delalycompress"
Ashish Karpe

แต่ตอนนี้ปัญหาคือ log.1 มากกว่า 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-20151226.gz 691M gz 80M /mnt/log/frengo/apc_rtbinfo.log.3 80M /mnt/log/frengo/apc_rtbinfo.log.4
Ashish Karpe

5

มันยากที่จะพูดด้วยข้อมูลนี้ แต่ฉันสามารถบอกคุณได้ว่าอะไรช่วยฉันสองสามครั้ง

Logrotate มีตัวเลือกดีบั๊กที่จะพิมพ์การเล่นแบบเล่นตามแต่ละขั้นตอนที่ใช้ในการ stdout ดังนั้นในกรณีนี้คุณสามารถทำได้:

logrotate -d /etc/logrotate.conf

ผลลัพธ์จะบอกคุณว่าเกิดอะไรขึ้น นอกจากนี้หากคุณต้องการ จำกัด เอาต์พุตการดีบักให้แคบลงคุณสามารถทำได้

logrotate -d /etc/logrotate.d/messages

แม้ว่าคุณอาจต้องการวางตัวเลือกหลัก logrotate.conf ไว้ในไฟล์นั้นบล็อกเนื่องจากการระบุไฟล์โดยตรงหมายความว่ามันจะไม่เคยอ่านตัวเลือกการตั้งค่าหลัก การระบุไฟล์แยกต่างหากยังหมายความว่าคุณสามารถใช้-fตัวเลือก (บังคับ) ร่วมกับตัวเลือกดีบั๊กเพื่อดูการหมุนเวียนที่แท้จริงของไฟล์ข้อความที่เกิดขึ้น


ฉันพยายามเรียกใช้ logrotate ด้วยตนเองตามที่คุณแนะนำและมันบอกฉันว่ากำลังบีบอัดบันทึก แต่ฉันไม่พบบันทึกที่บีบอัดใด ๆ ดูคำถามของฉันข้างต้นสำหรับรายละเอียด
Mike Mazur

1
เปลี่ยนชื่อไฟล์ข้อความที่เก่าแก่ที่สุด 5 ไฟล์เพื่อให้ลงท้ายด้วย. gz และดูว่า logrotate ลบไฟล์เก่าที่สุดอย่างที่ควรจะเป็นหรือไม่ หากเป็นเช่นนั้นเราจะทราบว่าการทำให้เกิดความล้มเหลวเกิดขึ้นเนื่องจาก gzip ทำงานไม่ถูกต้อง อย่างน้อยจะเป็นการยืนยันว่าการขาดการบีบอัดคือการตำหนิการขาดการหมุน
CarpeNoctem

เสร็จแล้วมีการเพิ่มรายละเอียดของคำถามด้านบน ฉันอยากรู้ว่ามีปัญหาการขัดแย้งกับ/var/log/messagesไฟล์สดหรือไม่และdelaycompressตัวเลือกจะช่วยได้
Mike Mazur

อีกจุดที่น่าสนใจที่ฉันค้นพบ เมื่อคุณเปิดใช้งานตัวเลือก -d คำสั่ง logrotate จะไม่แตะไฟล์บันทึก ตรวจสอบคู่มือสำหรับข้อมูลเพิ่มเติม -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 ของคุณ:

dateformat .%Y%m%d

และเปลี่ยนชื่อไฟล์ข้อความที่มีอยู่เพื่อใช้จุดแทนเส้นประ จากนั้นลอง logrotate ของคุณอีกครั้ง

เบาะแสด้านล่างทำให้ฉันเชื่อว่าเส้นประอาจทำให้ก้อนกลมล้มเหลวหากตีความว่าเป็นตัวเลือก (ที่ - จะแก้ไขปัญหานี้) มันไม่สมเหตุสมผล แต่อาจเป็นไปได้

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

ฉันไม่คิดว่านี่คือสาเหตุที่แท้จริง รูปแบบวันที่ปัจจุบันที่มีเส้นประทำงานได้ดีสำหรับไฟล์บันทึกอื่น ๆ ความแตกต่างระหว่างไฟล์บันทึกเหล่านั้นและ/var/log/messagesคือ/var/log/messagesไฟล์ที่หมุนจะไม่ถูกบีบอัด
Mike Mazur
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.