08-30-2013, 09:39 AM
Может кому пригодится...
Начнём с того, что же такое "ротация" логов.
Для примера можно посмотреть на логи апач сервера (/var/log/apache2) - при достижениия определённого размера или времени (например по прошествии одного месяца), текущий лог-файл запаковывается, переименовывается и создаётся новый пустой лог-файл.
Делается это в основном для удобства чтения логов - ведь куда удобнее, когда на каждый месяц\день лежит свой лог, и не приходится искать дату в одной большой свалке. Ну и немножко для экономии места - текстовые логи очень неплохо ужимаются.
Итак. Первое, что приходит по этому поводу в голову - можно написать простенький скрипт, который проверял бы дату создания файла, его размер и т.п. и повесить его на крон. Но, в убунте для ротации логов предусмотрена замечательная программка - logrotate, заморочек с ней гораздо меньше так что именно её и будем использовать.
Для начала установим её (хотя зачастую она уже установлена):
Настройки logrotate лежат в двух местах:
тут определяются настройки для приложений по умолчанию. А в папке
лежат настройки для каждого приложения отдельно.
Первый файл, с дефолтными настройками, можно не трогать. Нас интересуют файлы настроек для приложений.
Создадим новый файл для сервера, например назовём его pw_logs и отредактируем его:
(тут надо заметить, что можно сразу открыть файл на редактирование и при сохранении система его создаст, но мне так привычней )
Теперь нужно вписать в него собственно настройки. Первой строкой пишем путь к логам
Звёздочка в конце указывает, что ротация будет вестись независимо от расширения файла. Сами настройки указываются в блоке фигурных скобок, т.е. файл должен выглядеть примерно так:
Сначала у меня указано время ротации - monthly, т.е. в начале каждого месяца логи будут упакованы.
Далее размер - size 10M (10 Мб), выбрал 10, потому что логи чаще приходится смотреть через фтп, а ждать пока скачается 100 метров ненужного лога долго =) Опция думаю понятна - при достижении логом размера в 10Мб производится ротация.
compress - указывает на то, что логи надо архивировать, а не просто переименовывать.
rotate 10 - количество сохраняемых логов, в данном примере старые логи будут упаковываться, пока их количество не станет 10, тогда самый старый лог удалится.
missingok - пропуск возможных ошибок при ротации лога, с этой опцией ошибки игнорируются и новый лог-файл создаётся в любом случае.
notifempty - флаг, говорящий о том, что пустые файлы паковать не надо =)
create 644 root root - права, пользователь и группа, с которыми создаются новые логи, лучше всего посмотреть с какими правами у вас создаются логи сейчас и поставить такие же тут (разумеется поставьте свой путь до логов)
С настройкой закончили, можно конечно добавить ещё кучу всего, но этого вполне достаточно (подробнее можно почитать например здесь)
Теперь можно запустить logrotate
и посмотреть что стало с логами (если были те, которые удовлетворяют условиям)
По умолчанию logrotate запускается ежедневным кроном (/etc/cron.daily), но при желании можно сделать запуск и в другое время, для этого нужно просто добавить "logrotate /etc/logrotate.conf" в крон.
Кажется всё
Начнём с того, что же такое "ротация" логов.
Для примера можно посмотреть на логи апач сервера (/var/log/apache2) - при достижениия определённого размера или времени (например по прошествии одного месяца), текущий лог-файл запаковывается, переименовывается и создаётся новый пустой лог-файл.
Делается это в основном для удобства чтения логов - ведь куда удобнее, когда на каждый месяц\день лежит свой лог, и не приходится искать дату в одной большой свалке. Ну и немножко для экономии места - текстовые логи очень неплохо ужимаются.
Итак. Первое, что приходит по этому поводу в голову - можно написать простенький скрипт, который проверял бы дату создания файла, его размер и т.п. и повесить его на крон. Но, в убунте для ротации логов предусмотрена замечательная программка - logrotate, заморочек с ней гораздо меньше так что именно её и будем использовать.
Для начала установим её (хотя зачастую она уже установлена):
Код:
sudo apt-get update
sudo apt-get install logrotate
Код:
/etc/logrotate.conf
Код:
/etc/logrotate.d/
Первый файл, с дефолтными настройками, можно не трогать. Нас интересуют файлы настроек для приложений.
Создадим новый файл для сервера, например назовём его pw_logs и отредактируем его:
Код:
sudo touch /etc/logrotate.d/pw_logs
sudo nano /etc/logrotate.d/pw_logs
Теперь нужно вписать в него собственно настройки. Первой строкой пишем путь к логам
Код:
/pwserver/logs/*
Код:
/pwserver/logs/* {
monthly
size 10M
rotate 10
compress
missingok
notifempty
create 644 root root
}
Далее размер - size 10M (10 Мб), выбрал 10, потому что логи чаще приходится смотреть через фтп, а ждать пока скачается 100 метров ненужного лога долго =) Опция думаю понятна - при достижении логом размера в 10Мб производится ротация.
compress - указывает на то, что логи надо архивировать, а не просто переименовывать.
rotate 10 - количество сохраняемых логов, в данном примере старые логи будут упаковываться, пока их количество не станет 10, тогда самый старый лог удалится.
missingok - пропуск возможных ошибок при ротации лога, с этой опцией ошибки игнорируются и новый лог-файл создаётся в любом случае.
notifempty - флаг, говорящий о том, что пустые файлы паковать не надо =)
create 644 root root - права, пользователь и группа, с которыми создаются новые логи, лучше всего посмотреть с какими правами у вас создаются логи сейчас и поставить такие же тут (разумеется поставьте свой путь до логов)
Код:
ls -la /pwserver/logs
С настройкой закончили, можно конечно добавить ещё кучу всего, но этого вполне достаточно (подробнее можно почитать например здесь)
Теперь можно запустить logrotate
Код:
sudo logrotate /etc/logrotate.conf
По умолчанию logrotate запускается ежедневным кроном (/etc/cron.daily), но при желании можно сделать запуск и в другое время, для этого нужно просто добавить "logrotate /etc/logrotate.conf" в крон.
Кажется всё