О web-разработке
и даже немного больше...

Ротация логов в Linux

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

В качестве примера мы будем использовать логи веб-сервера 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

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

Опубликован: 04.08.2017 г.

См. также:

Как включить сжатие GZip в Nginx?
Подробнее о логах в Apache
Denwer в локальной сети
HTTP авторизация
Просмотр списка загруженных модулей Apache
httpd грузит процессор, что делать?
Тестирование сайта под нагрузкой
Как создать SSL сертификат на Apache для CentOS 6?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта