UMGUM.COM 

Logrotate ( Инсталляция и настройка утилиты ротации лог файлов Logrotate. )

26 марта 2010  (обновлено 31 января 2015)

Эта публикация отнесена в архив. Она неактуальна.
Ресурс по следующей ссылке является преемником: Web сервис на базе "Nginx", PHP-FPM, "NodeJS", "MySQL", "MongoDB", "Memcached", "mSMTP", "inCron", LXC и "Supervisord".

OS: Linux Debian Lenny/Squeeze.
Applications: Logrotate, Apache2, Nginx.

Подход к "ротации" журнальных файлов приложений у нас будет свой, основанный на необходимости иметь представление об объёме дискового пространства, потребляемого файлами системы журналирования. Иначе говоря, нам нужно быть уверенным в том, что клиенты - активные "производители событий" не забьют нам диск своими логами. Для этого ограничим размер журнального файла, установим лимит на создание резервных копий и включим сжатие отработанных файлов. Если нужно будет хранить историю событий за длительный период времени, то мы всегда сможем вырезать более старые копии резервных файлов и переместить их на более ёмкий массив для хранения данных.


Устанавливаем приложение, если его ещё нет, которое будет управлять журнальными файлами наших серверов:

# aptitude install logrotate gzip

С настройками "по умолчанию" утилита "logrotate" запускается "cron" как часть ежедневных заданий (в шесть часов двадцать пять минут утра). Если есть желание изменить режим запуска - идем в "/etc/crontab" и делаем это.

Пробежимся по конфигурационному файлу приложения "/etc/logrotate.conf" на предмет обнаружения опций, могущих повлиять на достижение поставленных нами целей. Насколько можно заметить, работа приложения полностью описывается индивидуальными конфигурационными файлами для каждого приложения или группы приложений, чьи журнальные файлы "ротируются", и в общем конфигурационном файле практически нет ничего для нас важного.

Создаем директорию конфигураций logrotate для выделенных приложений, её файлы будут включены в общий конфигурационный файл "/etc/logrotate.conf" директивой "include /etc/logrotate.d":

# mkdir -p /etc/logrotate.d

Создаем конфигурационный файл ротации журнальных файлов для Apache2 (или корректируем имеющийся):

# touch /etc/logrotate.d/apache2

# шаблон указывающий объекты подлежащие "ротации"
/var/log/apache2/*.log /var/www/u*/log/apache.*.log {

  # размер журнального файла, после которого он обрабатывается утилитой
  size 10M

  # отсутствие файла не вызывает ошибку
  missingok

  # количество хранимых отработанных резервных копий
  rotate 10

  # указание сжимать отрабатываемые резервные копии
  compress

  # указание не сжимать первую резервную копию, делать это при повторном проходе
  delaycompress

  # указание не отрабатывать пустые файлы
  notifempty

  # добавлять к наименованию файла резервной копии даты в формате "-YYYYMMDD"
  dateext

  # задать права доступа, владельца и группу создаваемого журнального файла
  create 640 root www-ssh

  # указание на то, что следующие скрипты исполняются только один раз
  sharedscripts

  # скрипт указание Apache2 перечитать конфигурацию и перейти на новые "лог" файлы
  postrotate
    if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
      /etc/init.d/apache2 reload > /dev/null
    fi
  endscript
}

Создаем конфигурационный файл ротации журнальных файлов для Nginx (или корректируем имеющийся):

# touch /etc/logrotate.d/nginx

/var/log/nginx/*.log /var/www/u*/log/nginx.*.log {
  size 10M
  missingok
  rotate 10
  compress
  delaycompress
  notifempty
  dateext
  create 640 root www-ssh
  sharedscripts

  # скрипт указание Nginx перечитать конфигурацию и перейти на новые "лог" файлы
  postrotate
    [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
  endscript
}

Обратим внимание на то, что Nginx после "уведомления" его о смене журнального файла меняет владельца файла с устанавливаемого нами "root" на "www-nginx". Так он хочет, так пусть так и будет.

Проверить верность составления конфигурационного файла можно следующей командой (реальных действий при этом произведено не будет):

# logrotate -d /etc/logrotate.d/apache2

Произвести "форсированную" ротацию журнальных файлов не дожидаясь установленного времени можно с помощью следующей команды:

# logrotate -f /etc/logrotate.d/apache2


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )