Назад | Перейти на главную страницу

Cronolog против logrotate

Какой инструмент ротации журналов вы предпочитаете?

По моему опыту, 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 при ротации файлов журналов, что в основном решает все, что описано выше.

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

  1. Ошибка Debian # 301702
  2. Ошибка Debian # 400455

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

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

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

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

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

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

например в lighttpd config вы можете указать:

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"

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

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