Cronolog vs logrotate

Ответы:

14

По моему опыту, logrotate великолепен. Это очень гибкий и хорошо работает с большинством программного обеспечения.

Однако с этим есть некоторые проблемы, и поскольку cronolog - это прежде всего средство ротации веб-журналов, я напишу свой опыт работы с logrotate + apache, который был проблематичным:

При ротации журналов мы должны уведомить apache о том, что журнал вращается, как если бы logrotate переименовал access.log в access.log.1, apache продолжит запись в access.log.1, так же как запись в inode, и переименование файла не влияет на номер инода.

В debian etch (и, возможно, во многих других дистрибутивах) logrotate используется для вращения журналов apache. Теперь у apache есть изящный перезапуск, который советует дочерним процессам apache завершать работу после завершения обслуживания существующих соединений, apache затем перечитывает свою конфигурацию, порождает новые дочерние процессы, которые начинают запись в новый файл журнала (в случае, если предыдущий был повернутый).

Это звучит как отличное решение, однако изящный перезапуск не всегда работает в определенных условиях (например, при большой нагрузке), поэтому разработчики Debian решили использовать перезапуск apache вместо изящного перезапуска в конфигурации apache logrotate. К сожалению, это приводит к одновременному разрыву всех соединений, что очень плохо для сильно загруженных сайтов. Кроме того, перезапуск apache также может вызвать такие проблемы, как остановка и не запуск apache (также в определенных ситуациях загрузки), подробности см. В ссылках об ошибках ниже.

Суть в том, что logrotate великолепен, но может привести к определенным проблемам для определенных программ. У меня нет большого опыта работы с cronolog, но поскольку он записывает журналы через канал, он не требует перезагрузки apache при ротации файлов журналов, что в основном решает все, что описано выше.

Связанные ошибки logrotate / apache debian:

  1. Ошибка Debian # 301702
  2. Ошибка Debian # 400455
Том Файнер
источник
1
решение для вышеупомянутого состоит в том, чтобы использовать усечение! он копирует содержимое файла access.log в файл access.log.1, а затем очищает файл access.log (как вы видите, остаточный элемент access_log остается неизменным). Обычно у вас нет журналов размером более нескольких ГБ (в худшем случае), поэтому весь процесс не займет много времени!
Николайдис Фотис
3

Я предпочитаю cronolog, но это не очень сильное предпочтение.

logrotate где запускается cron, и если система по какой-то причине не работает, когда должно было произойти вращение, то ваши файлы журнала не будут вращаться.

Мне также нравится, когда в файлах журналов указывается дата (% Y% m.combined.access.log), потому что я храню эти журналы в течение длительного времени. В большинстве систем по умолчанию apache logrotate называет файлы access.log, access.log.1 и т. Д. Может быть возможно использовать дату в лог-файлах с logrotate, но я не мог понять, как это сделать в прошлый раз, когда я смотрел.

Zoredache
источник
2
Проблема, при которой logrotate не работает, если прошло время cron, может быть исправлена ​​установкой пакета «anacron».
andrewd18
или, что еще лучше, вы можете сохранить свои журналы в желаемом формате - это можно сделать с помощью шаблонов в rsyslog - (% year% -% month% -% day% _lala.log). в этом случае вам даже не нужно вращать журналы, потому что каждый день имя меняется!
Николайдис Фотис
2

Только когда-либо использовал logrotate. Это то, что Debian использует по умолчанию, и у меня никогда не было жалоб на это.

Дэвид Пашли
источник
2

Я почти исключительно использовать cronologболее logrotate. logrotateпоставляется с Debian, и я позволяю ему продолжать работать для системных служб, таких как журналы почтового сервера. Но для Apache и lighttpdлог-файлов это все cronolog.

Одна из причин, почему я использую cronologэто то, что вся конфигурация происходит в строке файла журнала конфигурации веб-сервера

например, в lighttpdфайле конфигурации вы можете поместить:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

И все получают новый файл журнала каждую неделю без какой-либо другой конфигурации. Или вы можете проявить творческий подход и сделать что-то вроде:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

И получите файл журнала, который показывает трафик по дням недели. например, все воскресенья, все вторники.

Что еще лучше, даже если сервер не работает какое-то время, при перезапуске будет использоваться правильный файл журнала.

Марк Д.М.
источник
1
Это очень похоже на svlogd (линии runit и daemontools).
Тобу