О 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 г.

См. также:

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

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

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

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