Какой инструмент ротации журналов вы предпочитаете?
По моему опыту, 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:
Я предпочитаю 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"
И получите файл журнала, который показывает трафик по дням недели. например все воскресенье, все вторники.
Что лучше, так это то, что даже если сервер не работает какое-то время, при перезапуске будет использоваться правильный файл журнала.