Нужно отдать должное возможности ведения лога программами, т.к. в них записывается полезная информация, которая при необходимости может дать знать об активности в системе, тем самым помочь в починке каких-либо неполадок в работе программы. Есть и обратная сторона логов – это их размерность. Если размеры логов достигают больших значений то рано или поздно, как правило, это заканчивается некорректной работой программного обеспечения, не говоря о сложности при попытке прочитать лог.
В качестве примера мы будем использовать логи веб-сервера Apache, который работает на системе Linux CentOS 7. Большая активность на сайте может порождать большое количество записей в логах. И если размеры логов разрастаются до больших размеров, то как правило Apache подвисает, и перестает отвечать на запросы.
На самом деле, проблема переполнения логов программ в системе Linux уже давно решена. Для этих целей существует программа logrotate которая с большой вероятностью уже есть в системе при установке дистрибутива системы. Logrotate говоря простым языком переименовывает файл лога программы, а так же перезапускает программу чтобы создался новый файл лога. Таким образом, файлы логов будут складываться упорядоченно в директории, размерность и максимальное количество файлов так же может быть настроено. Logrotate используется большинством программ в Linux, однако не все знают о том, что разбиением файлов лога занимается именно эта программа.
Теперь давайте начнем с начала, предположим, что у вас не установлен logrotate, и мы его попробуем поставить, для этого выполните команду:
# yum install logrotate
Если вы используете другую версию Linux, к примеру Ubuntu, то команда установки будет выглядеть иначе:
# aptitude install logrotate
После установки logrotate (надеюсь у вас это получилось), мы переходим к конфигурации. Основной файл конфигурации находится тут:
/etc/logrotate.conf
Файлы конфигурации для журналирования логов программ стоит размещать в директории /etc/logrotate.d. Именовать файл конфигурации рекомендуется таким образом, чтобы было понятно для какой программы он предназначен.
# vi /etc/logrotate.d/example
В качестве example мы зададим httpd, таким образом, мы получаем:
# vi /etc/logrotate.d/httpd
Таким образом, каждая программа, у которой есть ротация логов, будет иметь свой отдельный файл конфигурации в директории /etc/logrotate.d.
Пример файла конфигурации для ротации логов веб-сервера Apache:
/var/www/*.log { weekly compress delaycompress notifempty missingok rotate 5 create 644 root root postrotate service httpd restart > /dev/null endscript }
Опции:
weekly — регулярность ротации — ротация раз в неделю, возможна иная периодичность: daily, monthly;
compress — сжимать копию лога, по умолчанию для этого используется архиватор gzip, хотя можно прицепить и какой-то внешний;
delaycompress — сжимать последнюю копию только при следующей ротации, это удобно, потому что самые свежие логи не придётся разархивировать;
notifempty — не ротировать лог, если он пуст;
missingok — не проверять наличие файла (если лога нет, то ничего страшного);
rotate 24 — количество сохраняемых копий, мне вот хватает данных и за последние полгода
mail mail@example.com — отправляет свежую созданную копию на указанный e-mail, не всегда практично при больших размерах логов
create 644 root root — сразу после ротации старого создать новый пустой лог, указываются, соответственно, права доступа, юзер и группа файла
postrotate/endscript – действие, выполняемое после ротации логов, в нашем случае перезагрузка httpd сервера;
size – можно указать размер вместо weekly, например size 10M – в этом случае лог будет писаться в файл до того момента пока он не превысит 10-мегабайт.
После того как файл вы указали настройки для ротации логов, самое время проверить корректность файла конфигурации. Проверяется таким образом:
# logrotate -d /etc/logrotate.d/httpd
Ключ –d указывает на эмуляцию работы программы ротации логов, при этом логи затрагиваться не будут, а на экран будут выводиться диагностические сообщения.
Если всё в порядке, можно запустить утилиту в боевом режиме:
# logrotate -v -f /etc/logrotate.d/httpd
После выполнения команды, будет включена ротация логов сервера, раз в неделю (об этом указывает параметр weekly), количество файлов-логов будет 5 шт. (параметр rotate 5). Информацию о том, что и когда было в ротации программой logrotate можно посмотреть в файле:
/var/lib/logrotate/status
Чтобы система работала стабильно важно правильно рассчитать доступные ресурсы памяти, и настраивать ротацию логов в пределах доступности этих ресурсов. Кроме того стоит оценить скорость заполнения файлов лога, к примеру может быть достаточно и суток, чтобы файл лога стало невозможно открыть для чтения, и в этом случае ротация раз в неделю как вы наверное уже понимаете не совсем подходит.