Cronolog vs logrotate

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

4 ответа

Решение

In my experience, logrotate is great. It's very flexible, and works well with most software.

However, there are some issues with it, and as cronolog is primarily a web log rotation facility, I'll write down my experience with logrotate + apache which was problematic:

When rotating logs, we must notify apache that a log is being rotated, as even if logrotate renames access.log to access.log.1, apache will continue writing to access.log.1, as it is writing to the inode, and renaming the file doesn't affect the inode number.

В 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

Я предпочитаю 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 Конфигурационный файл, вы можете положить:

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"

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

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

Другие вопросы по тегам