Любой программист или системный администратор прекрасно понимает, насколько важно ведение логов системы. Все работает, логи пишутся. Но если это дело не контролировать, то файлы со временем разрастаются до удручающих размеров и количеств. Для контроля логов - ротации - существует утилита logrotate. Что она делает? Эта утилита по заданным параметрам архивирует логи и складывает их туда, куда необходимо, а также управляет количеством бэкапов для каждого log-файла. Это вкратце. Подробнее можно почитать в
man logrotate
Итак, допустим, мы имеем какой-либо программный продукт, который круглосуточно одаривает нас подробными логами. Их наличие нам необходимо для анализа и наблюдения за работой системы, и мы хотим прибегнуть к их ротированию. Как это сделать при помощи logrotate?
Итак, я буду “говорить” за Ubuntu, и, надеюсь, за Debian.
Конфигурационные файлы logrotate размещаются в директории
/etc/logrotate.d/
Это типичное расположение конфигурационных файлов. Оно описывается в основном конфиге в строчке
include /etc/logrotate.d
Естественно, все это дело можно изменить. Но, я сейчас не об этом. Допустим, у меня есть директория, в которую сваливается кучка log-файлов с расширением (это которое file extension) .log. Мне необходимо ротировать логи ежедневно, при этом сжимать их и отправлять в определенную директорию. Как это сделать? Скачем в директорию /etc/logrotate.d/
, создаем в ней файл с понятным нам именем, открываем его редактором (конечно делать все это надо из под root) и пишем примерно следующее:
/<путь>/<до>/<логов>/*.log {
daily
missingok
rotate 28
compress
nodelaycompress
notifempty
create 640 user group
olddir /var/log/<директория с логами>
}
Итак, что здесь что означает:
- daily — периодичность ротации “ежедневно”, может быть, например monthly — ежемесячно;
- missingok — данный параметр сообщает утилите, что отсутствие лога не является ошибкой;
- rotate 28 — параметр определяет сколько фрагментов одного лога хранить. в Данном случае я указал, чтобы хранилось 28 фрагментов каждого лога, по одному фрагменту на день;
- compress — параметр определяет, сжимать логи или нет;
- nodelaycompress — не откладывать сжатие фрагмента на следующий цикл ротации;
- notifempty — не ролировать лог, размер которого 0 байт;
- create 640 user group — с какими правами доступа и какого пользователя с группой делать владельцем лога;
- olddir /var/log/<директория с логами> — директория, в которую будут складываться сжатые фрагменты логов.
Я не указал еще несколько параметров, таких, как, например, size — размер log-файла. Параметр позволяет ротировать логи не по временному промежутку, а по размеру логов. Подробнее можно прочитать в
man logrotate
После конфигурирования имеет смысл выполнить
logrotate -f
для принудительного запуска утилиты. Это полезно, если вы создали новые записи в конфигах logrotate.
Вот и всё, держите ваши файлы в порядке ;).