logrotate не сжимает / var / log / messages

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 дней, как и все мои другие файлы журналов? Что мне не хватает?

РЕДАКТИРОВАТЬ 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. Также не удалось выполнить глобализацию для старых повернутых файлов.

РЕДАКТИРОВАНИЕ 2 : добавление отладочных выходных данных logrotaterun после добавления .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 завершается успешно и находит шестой сжатый файл журнала, намереваясь удалить его. Файл на самом деле не удален; Я думаю, это потому, что мы работаем в режиме отладки.

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

Майк Мазур
источник
Можете ли вы опубликовать свой logrotate.conf? Ничто в приведенных вами выдержках не объясняет суффикс даты в этих файлах сообщений. Logrotate не поддерживал суффиксы даты в повернутых файлах журнала. Это заставляет меня верить, что что-то еще полностью создает эти файлы. Проверьте / etc / crontab, crontab root и /etc/cron.daily, чтобы увидеть, есть ли у вас другой скрипт, пытающийся выполнить ту же работу.
JMTD
В дополнение к этому, вы можете сказать нам, какой дистрибутив Linux вы используете? Debian / Ubuntu имеет свой собственный скрипт ротации логов, который может испортить ваши логи.
thepocketwade
Спасибо за ответ. Я использую Gentoo Linux. Мои crontabs не управляют / var / log / messages. Пожалуйста, смотрите новую информацию в моем вопросе для деталей.
Майк Мазур

Ответы:

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 журналов
Ашиш Карпе
# cat /etc/logrotate.d/apc_rtbinfo.conf /mnt/log/frengo/apc_rtbinfo.log {ежедневно отсутствующий notifempty размер 2000M сжимать delalycompress sharedscripts copytruncate rotate 3}
Ашиш Карпе
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 80 мес. /mnt/log/frengo/apc_rtbinfo.log.3 80 мес. /mnt/log/frengo/apc_rtbinfo.log.4
Ашиш Карпе
5

Трудно сказать только с помощью этой информации, но я могу рассказать вам, что спасло меня несколько раз.

Logrotate имеет опцию отладки, которая будет печатать play-by-play каждого шага, который требуется для stdout. Так что в этом случае вы можете сделать:

logrotate -d /etc/logrotate.conf

Выходные данные скажут вам, что именно происходит. Кроме того, если вы хотите сузить выходные данные отладки, вы можете сделать

logrotate -d /etc/logrotate.d/messages

Хотя вы можете временно разместить основные параметры logrotate.conf в этом блоке файлов, поскольку непосредственное указание файла означает, что он никогда не будет читать основные параметры конфигурации. Указание отдельного файла также означает, что вы можете использовать -fопцию (force) в сочетании с опцией отладки, чтобы взглянуть на фактическое вращение файла сообщений.

CarpeNoctem
источник
Я попытался запустить logrotate вручную, как вы предложили, и он говорит мне, что он сжимает журналы, но я нигде не нахожу сжатых журналов. Смотрите мой вопрос выше для деталей.
Майк Мазур
1
переименуйте 5 самых старых файлов сообщений так, чтобы они заканчивались на .gz, и посмотрите, удаляет ли logrotate самое старое, как должно. Если это так, то мы знаем, что сбои не удаются из-за некорректной работы 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файлы не сжимаются.
Майк Мазур