Logrotate - ротация логов в Ubuntu Server на примере Squid.

  • Автор:

logrotate-ubuntu-000.jpgКак показал читательский отклик - ротация логов одна из тем, вызывающих некоторое затруднение. В частности возникают проблемы с настройкой ротации логов прокси сервера squid, что затрудняет получение отчетов за длительный период. Поэтому мы решили внести ясность и рассказать, что такое ротация логов и как ее настроить.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

Чтобы избежать бесконтрольного роста таких файлов нужен механизм ограничивающий число записей некоторым разумным пределом, это может быть размер файла, при превышении которого старые записи будут затираться, либо срок, по истечении которого записи перестанут быть актуальными и могут быть удалены. В Ubuntu Server такой механизм называется ротацией логов и реализуется с помощью системной службы logrotate.

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

Никаких ограничений тут нет, кроме здравого смысла и объема жесткого диска, что позволяет настроить этот процесс в полном соответствии с вашими потребностями. Так например вы можете делать ежедневную ротацию и хранить вчерашний лог в несжатом виде, а остальные в виде архивов. При каждой следующей ротации цепочка как-бы сдвигается, самый последний лог перезаписывается предпоследним, а текущий лог очищается (или создается заново).

Рассмотрим настройку ротации на примере логов прокси-сервера squid, которая вызывает у наших читателей ряд затруднений. Основные настройки ротации хранятся в /etc/logrotate.conf, кроме того отдельные службы могут иметь собственные настройки ротации, которые хранятся в специальных файлах в директории /etc/logrotate.d, настройки которых перекрывают настройки logrotate.conf.

Такой подход позволяет гибко настроить ротацию для каждой конкретной службы, не затрагивая общих настроек. Сама служба вызывается раз в сутки через планировщик cron.

Откроем файл /etc/logrotate.d/squid, у нас он имеет следующий вид:

#
#Logrotate fragnment for squid.
#
/var/log/squid/*.log {
daily
compress
delaycompress
rotate 2
missingok
nocreate
sharedscripts
prerotate
test ! -x /usr/sbin/sarg-reports || /usr/sbin/sarg-reports
endscript
postrotate
test ! -e /var/run/squid.pid || /usr/sbin/squid -k rotate
endscript
}

Разберем его структуру подробнее. Первая строка указывает путь к обрабатываемым файлам логов. В данном случае обрабатываются все файлы в директории /var/log/squid в соответствии с указанными ниже опциями:

  • daily - задает ежедневную ротацию, для еженедельной или ежемесячной используйте weekly или monthly.
  • compress - указывает сжимать архивные логи, обратная опция nocompress.
  • delaycompress - не сжимать текущий лог до следующей ротации, обычно используется в тех случаях, когда в лог происходит непрерывная запись.
  • rotate 2 - количество ротаций до удаления файла, в данном случае будут храниться два архива.
  • missingok - при отсутствии файла журнала указывает продолжить работу без вывода сообщения об ошибке.
  • nocreate - не создавать новый файл лога.
  • sharedscripts - используется для секций prerotate и postrotate, данная опция указывает исполнять скрипты из этих секций один раз перед и после ротации всех логов, в противном случае скрипты будут исполнены перед и после ротации каждого лога.

Ниже идут секции prerotate и postrotate, каждая из которых заканчивается строкой endscript, все что расположено между этих строк исполняется перед и после процесса ротации.

Секция postrotate проверяет, запущен ли squid и запускает ротацию логов самим прокси сервером. Остановимся на этом моменте немного подробнее. В конфигурационном файле squid имеется опция:

logfile_rotate n

где n - число ротаций (по умолчанию 0), т.е. сам squid может хранить несколько ротаций логов, каждая из которых будет в свою очередь обрабатываться logrotate. При настройках по умолчанию данная команда приводит к очистке основного лога squid.

Секция prerotate добавлена автоматически при установке анализатора логов SARG и в случае если файл /usr/sbin/sarg-reports существует и является исполняемым, запускает его.

Отдельно следует остановиться на записи команд, используемая в них конструкция может быть непонятна с первого раза. В данном случае используется двойное отрицание, если отрицание условия ложно, то выполняется команда указанная за символом || (логическое ИЛИ), это связано с логикой работы команды test и синтаксисом записи файла (восклицательный знак после test указывает на отрицание условия).

Как видим logrotate позволяет весьма гибко настраивать процесс ротации логов. Так если мы хотим формировать статистику использования squid помесячно, то должны указать период ротации - месяц и в секции prerotate изменить команду для формирования месячного отчета.

Дополнительные материалы:

  1. logrotate (Русские man: Команды системного администрирования)
  2. test (Русские man: Команды и прикладные программы пользовательского уровня)

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.


Loading Comments