Ротация логов на сервере Apache под Linux Ubuntu

Здравствуйте. В этом посте расскажу про ротирование логов на сервере. Я буду рассказывать на примере сервера Apache установленного на операционной системе Linux Ubuntu. Вообще инструментов для ротирования логов достаточно много, я поведаю о, наверное самом популярном, logrotate.

Итак, что мы имеем. Логи вебе сервера, которые надо как то автоматически обрабатывать, что бы они не разрастались до неимоверных размеров. Дла начала установим программу logrotate:

apt-get install logrotate

Вообще, по идее, эта утилита есть в Ubuntu по умолчанию, поэтому ничего устанавливать, возможно, не понадобится. В общем убедитесь, что logrotate у вас есть в системе.

Далее приступим к его конфигурированию. Для этого создадим новый файл конфигурации:

nano /etc/logrotate.d/mysites

Туда вставим, что-то вроде этого:

/home/sites/site1/logs/*.log #путь к файлам логов первого сайта
/home/sites/site2/logs/acces.log 
/home/sites/site2/logs/error.log { #логи второго сайта
size 10M # ротация файлов под достижению указанного размера, можно указать переодичность (день, неделя, месяц)
compress # сжимать копию лога, по умолчанию для этого используется архиватор gzip, хотя можно прицепить и какой-то внешний
delaycompress # сжимать последнюю копию только при следующей ротации, это удобно, потому что самые свежие логи не придётся разархивировать
notifempty # не ротировать лог, если он пуст
missingok # не проверять наличие файла (если лога нет, то ничего страшного)
rotate 5 # количество сохраняемых копий
create 644 root root # сразу после ротации старого создать новый пустой лог, указываются, соответственно, права доступа, юзер и группа файла
sharedscripts # запустить скрипт или утилиту после ротации всех логов
postrotate # выполнить далее указанный скрипт сразу после ротации
# Скрипт на перезагрузку Апача
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
endscript # признак окончания вызова скрипта
}

Думаю поясняющие комментарии в коде не должны оставить вопросов. Все директивы настроек опциональны и могут писаться в любой последовательности.

Перед запуском работы утилиты предлагаю её протестировать, т.е. запустить в режиме отладки. При запуске logrotete передаём ему в качестве аргумента наш файл конфигурации:

sudo logrotate -d /etc/logrotate.d/mysites

Если всё в порядке, то запускаем программу для работы:

sudo logrotate -v -f /etc/logrotate.d/mysites

Теперь ротация логов будет работать как часы. Утилита logrotate будет автоматически запускаться через cron каждый день и проверять файлы логов. Дополнительно настраивать планировщик cron не требуется, там уже всё было прописано при установке logrotate в системе.

Краткие сведения по logrotate

Для полноты картины, ниже приведу основные сведения для работы с утилитой. За подробностями всегда можно обратиться к мануалу:

man logrotate

Основные ключи запуска Logrotate

При запуске logrotate из командной строки допускаются следующие опции (список не полный):

  • -d. Всключает режим отладки, а так же дублирует опциию -v. В режиме отладки никаких действий с логами не будет выполнено.
  • -f, —force. Заставляет logrotate выполнить ротацию логов. Бывает необходимо после добавления новых конфигурационных файлов или если старый лог файл был удалён вручную; таким образом будут созданы новые лог-файлы и журналирование будет корректно продолжено.
  • -m, —mail command. Указывает, какую команду использовать для отправки журналов по почте. Команда должна принимать 2 входных параметра:
    • заголовок письма
    • получателя письма

    После этого команда должна прочитать сообщение со стандартного входа (STDIN) и отправить его получателю. Командой по умолчанию является /usr/bin/mail -s

  • -s, —state statefile. Указывает на использование альтернативный файл состояния. Полезно в случаях, когда logrotate работает от имени разных пользователей для различных наборов лог-файлов. Дефолтный файл состояния: /var/lib/logrotate/status
  • —usage. Выводит краткую инструкцию по использованию утилиты.
  • -v, —verbose. Вывод диагностических сообщений во время ротации.

Параметры настроек logrotate

Для справки приведу данные по остальным директивам (параметрам) настроек logrotate.

Параметр Описание
rotate <число> Количество хранимых файлов
dailyweekly

monthly

Производить ротацию раз в день/неделю/месяц
size <байт>size 1000

size 100k

size 1M

Производить ротацию если log-файл превысил указанный размербайт

Кбайт

Мбайт

start <число> число с которого начнётся нумерация файлов
compress Архивировать файлы (по умолчанию gzip)
nocompress Отключает compress
delaycompress Не сжимать ‘свеже’ созданный архив. Например access.log.1 не будет зжат.Используется с compress
create <права><владелец><группа>create 640 root root После ротации создать пустой log-файл. Любые из этих атрибутов могут быть опущены,в этом случае вместо них для нового файла будут использованы атрибуты,

имеющие те же значения, что и первоначальный log-файл

nocreate Не создавать файл
copy Создать копию оригинального log-файла, не изменяя его. Исключает create
nocopy Отключает copy
copytruncate Создать копию оригинального log-файла, а потом его ‘обнулить’.Таким образом сам файл не удаляется.

Исключает copy, create

ifempty Архивирует даже пустой файл (используется по умолчанию)
notifempty Не архивировать пустые файлы
missingok В случае отсутствия оригинального log-файла не вызовет ошибку
nomissingok В случае отсутствия оригинального log-файла вызовет ошибку
postrotate<команды>

endscript

Строки, находящиеся между postrotate и endscriptбудут выполнены как sh скрипт после архивирования log-файла
prerotate<команды>

endscript

Аналогично postrotate, только действия будут выполнены до начала архивирования
sharedscripts Скрипты postrotate и prerotate будут выполнены только один раз в рамках своей секции.
nosharedscripts Отключает sharedscripts.Скрипты будут выполняются при ротации каждого log-файла,

при определение /var/log/apache2/*.log скрипт будет выполнен столько раз

сколько уникальных log-файлов будет находится в данной директории

olddir <путь>olddir /home/logs Перемещать архивные файлы в указанную директорию
noolddir Отключает olddir

На этом думаю будет достаточно, благодарю за внимание.

Поделиться!
Tags: , , , , ,

49.67MB | MySQL:54 | 0,282sec