Ротация логов веб-сервера Apache (и любых других логов тоже)
Логи (или журналы) хранят в себе ценную информацию, позволяющую понять, что, когда и как происходило в системе. Логи веб-сервера — это ещё и важный источник данных для аналитики (ну, там, исследование аудитории веб-ресурса, определение основных источников трафика и прочее, хотя сегодня для подобных целей мало серверных логов, надо ещё подключать Google Analytics и Яндекс.Метрику). Но есть проблема: если на веб-ресурс ходит немало посетителей (или если система долго трудится без присмотра администратора), то логи вырастают до гигантских объемов.
Для того, чтобы однажды диск столь «самостоятельной» системы не переполнился логами под завязку и эту самую стабильную систему не завалил, надо логи периодически подчищать. Но удалять их вручную или по планировщику — плохая идея, ведь самые свежие (последние добавленные) данные из логов, как правило, действительно нужны для мониторинга системы или веб-сайта. Перед удалением надо как-то сохранять последние версии логов. Процесс сохранения нескольких копий логов с удалением самой старой при создании самой новой копии — называется ротацией. Задача типовая, а потому для ротации логов есть несколько известных инструментов, но я остановился на logrotate
.
Итак, устанавливаем:
aptitude install logrotate
Далее создаём свой файл конфигурации:
nano /etc/logrotate.d/example
Рекомендую вам именно создавать новые файлы для каждого вашего сайта, а не сваливать все директивы в /etc/logrotate.conf
(последнее возможно, но как-то что ли неопрятно).
Итак, в новом файле мы должны описать что ротировать и как. Синтаксис чем-то похож, например, на описание виртуальных хостов nginx (и вообще такой синтаксис много где встречается). Предполагается, что лог-файлы вашего сайта лежат в /var/www/access.log
и /var/www/error.log
, если это нитак, то вы уж поменяйте путь в первой строке конфига.
Итак, конфигурация:
/var/www/*.log {
weekly # регулярность ротации — ротация раз в неделю, возможна иная периодичность: daily, monthly
compress # сжимать копию лога, по умолчанию для этого используется архиватор gzip, хотя можно прицепить и какой-то внешний
delaycompress # сжимать последнюю копию только при следующей ротации, это удобно, потому что самые свежие логи не придётся разархивировать
notifempty # не ротировать лог, если он пуст
missingok # не проверять наличие файла (если лога нет, то ничего страшного)
rotate 24 # количество сохраняемых копий, мне вот хватает данных и за последние полгода
mail # отправляет свежую созданную копию на указанный e-mail, я этим не пользуюсь, но опция полезная для любителей сохранять всё ненужное на gmail`е, следите только за тем, чтоб лог пролезал в ваш ящик
create 644 root root # сразу после ротации старого создать новый пустой лог, указываются, соответственно, права доступа, юзер и группа файла
sharedscripts # запустить скрипт или утилиту после ротации всех логов
postrotate # выполнить далее указанный скрипт сразу после ротации
apache2ctl restart > /dev/null # перезапустим apache
endscript # признак окончания вызова скрипта
}
Вместо
weekly
можно было указать
size 10M
тогда лог будет ротироваться вне зависимости от регулярности, но на основе своего размера: ротироваться будет лог по объему больший или равный 10 мегабайтам. Какой вариант более подходит вам — решайте сами. Но учтите, что при регулярной ротации, вам надо хотя бы примерно прикинуть максимальный размер лога, умножить его на количество сохраняых копий и убедится, что места у вас на диске хватит и останется (иначе вся ротация смысл теряет).
Теперь давайте протестируем, удачно ли создан конфиг:
logrotate -d /etc/logrotate.d/example
С ключом -d
программа будет только эмулировать полезную активность, выводя вам на экран диагностические сообщения (реально она логи не тронет).
Если всё в порядке, то запускайте утилиту в боевом режиме:
logrotate -v -f /etc/logrotate.d/example
И всё, логи будут ротироваться (руками в cron ничего добавлять не надо, всё будет сделано за вас).
В файл /var/lib/logrotate/status
станет записывать информация о том, что и когда ротировал logrotate
.
- 28549 просмотров
Re: Ротация логов веб-сервера Apache (и любых других логов тоже)
Скажите, а параметр "rotate 24" удаляет/перезываписывает или оставляет логи на месте?
Re: Ротация логов веб-сервера Apache (и любых других логов тоже)
А как узнать из-за чего вешается apache?
Отправить комментарий