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і інші, а це означає , що кожен з цих колод архівований і обертати, останні 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 , старі журнали (швидше за все) не видаляються, оскільки закінчення файлів для кожного файлу різні. Це, мабуть, тому, що файли не збираються.

Що я можу зробити, щоб /var/log/messagesстиснуті та обернені журнали за останні 5 днів зберігалися так само, як і всі інші мої файли журналу? Що я пропускаю?

EDIT 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 містить мої власні конфігураційні файли, як згадувалося вище, а також налаштування для mysql, rsync тощо, встановлені цими пакетами.

Мій корінь crontabпорожній:

$ sudo crontab -l
no crontab for root

Я перевірив все /etc/cron.{daily,hourly,monthly,weekly}на що-небудь пов'язане з системою, і є сценарій, який обертається /var/log/syslogі /var/log/auth.log.

Потім я зробив /var/log/messages-Тільки logrotateконфігураційний файл , як запропоновано 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. Також помилка глобальної роботи старих повернутих файлів.

EDIT 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

Цього разу, logrotate's globlo вдається і знаходить шостий стислий файл журналу, маючи намір його видалити. Файл фактично не видалено; Я думаю, це тому, що ми працюємо в режимі налагодження.

Мені цікаво, чи допоможе включення delaycompressопції для /var/log/messages. Я це ввімкнув і перевіряю результати наступного ранку.


Чи можете ви розмістити свій logrotate.conf? Ніщо з уривків, якими ви ділилися до цього часу, не пояснювало б суфікс дати у цих файлах повідомлень. Logrotate не використовувався для підтримки суфіксів дати у повернутих файлах журналу. Це приводить мене до думки, що щось інше цілком створює ці файли. Перевірте / etc / crontab, crontab root та /etc/cron.daily, щоб побачити, чи є у вас інший сценарій, який намагається виконати ту саму роботу.
jmtd

на додаток до цього, чи можете ви сказати нам, який дистрибутив Linux ви працюєте? У Debian / Ubuntu є власний скрипт обертання журналу, який може придумати ваші логротатні речі.
thepocketwade

Дякую за відповідь. Я запускаю Gentoo Linux. Мої кронт-вкладки не виконують ніякого управління / var / log / повідомленнями. Будь ласка, дивіться нову інформацію в моєму запитанні для детальної інформації.
Майк Мазур

Відповіді:


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 не можна сказати закрити свій логін-файл, і, отже, це необхідно.

Цікаво, що вихідна конфігурація у мене була (без 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 читання інформації конфігурації для /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 rotate 3}
Ashish Karpe

1
ок, отримала помилку, була помилка друку в "delalycompress"
Ашиш Карпе

Але тепер питання полягає в тому, що 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.2. 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(force) у поєднанні з параметром налагодження, щоб побачити фактичне обертання файлу повідомлень, що відбувається.


Я спробував запустити логротат вручну, як ви запропонували, і він говорить мені, що він стискає журнали, але я ніде не знаходжу стислих журналів. Дивіться моє запитання вище для детальної інформації.
Майк Мазур

1
перейменуйте 5 найстаріших файлів повідомлень так, щоб вони закінчувались .gz і побачили, чи логротат видаляє найстаріший, як слід. Якщо це так, то ми знаємо, що глобус провалюється через те, що gzip не працює належним чином. Це принаймні підтвердить, що у недостатньому обертанні винна відсутність стиснення.
CarpeNoctem

Готово, подробиці додані до питання вище. Мені цікаво, чи є проблема із суперечливим /var/log/messagesфайлом, і delaycompressпараметр допоможе.
Майк Мазур

Ще один цікавий момент, який я дізнався. Якщо ввімкнути параметр -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.
ЦБР

1

Спробуйте скористатися цим налаштуванням у своєму logrotate.conf:

dateformat .%Y%m%d

і перейменуйте наявні файли повідомлень, щоб використовувати крапку замість тире. Потім спробуйте ваш логротат ще раз.

Наведені нижче дані змусили мене повірити в те, що тире може спричинити невдачу глобуса, якщо його якось інтерпретуватимуть як варіант (де - це б виправити). Це не має сенсу, але це просто можливо.

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файли не стискаються.
Майк Мазур
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.