Настройка и управление ротацией журналов с помощью Logrotate в Linux

Одним из самых интересных (и, возможно, одним из самых важных) каталогов в системе Linux является /var/log. Согласно Стандарту иерархии файловых систем, деятельность большинства служб, работающих в системе, записывается в файл внутри этого каталога или одного из его подкаталогов.

Такие файлы называются журналами и являются ключом к изучению того, как работает система (и как она вела себя в прошлом). Журналы также являются первым источником информации, на который обращают внимание администраторы и инженеры при устранении неполадок.

linux

Установка Logrotate в Linux

Чтобы установить logrotate, просто воспользуйтесь менеджером пакетов:

Debian и Ubuntu

CentOS, RHEL и Fedora

Стоит отметить, что в конфигурационном файле (/etc/logrotate.conf) может быть указано, что другие, более специфические настройки могут быть размещены в отдельных .conf файлах внутри /etc/logrotate.d.

Это произойдет тогда и только тогда, когда следующая строка существует и не закомментирована:

Настройка Logrotate в Linux

Будучи очень универсальным инструментом, logrotate предоставляет множество директив, которые помогают нам настроить, когда и как будут вращаться журналы, и что должно произойти сразу после этого.

Давайте вставим следующее содержимое в файл /etc/logrotate.d/apache2.conf (обратите внимание, что, скорее всего, вам придется создать этот файл) и рассмотрим каждую строку, чтобы определить ее назначение:

Первая строка указывает, что директивы внутри блока применяются ко всем журналам внутри /var/log/httpd:

  • weekly означает, что инструмент будет пытаться вращать журналы на еженедельной основе. Другие возможные значения: ежедневно и ежемесячно.
  • rotate 3 означает, что следует сохранять только 3 ротированных журнала. Таким образом, самый старый файл будет удален при четвертом последующем запуске.
  • size=10M устанавливает минимальный размер для ротации в 10М. Другими словами, каждый журнал не будет ротироваться, пока его размер не достигнет 10 МБ.
  • compress и delaycompress используются для указания, что все ротируемые журналы, за исключением самого последнего, должны быть сжаты.

Вместо сжатия журналов мы можем переименовать их по дате, когда они были ротированы. Для этого мы воспользуемся директивой dateext. Если наш формат даты отличается от стандартного yyyymmdd, мы можем указать его с помощью dateformat.

Обратите внимание, что мы можем даже предотвратить ротацию, если журнал пуст, с помощью notifempty. Кроме того, давайте скажем logrotate отправить ротированный журнал системному администратору ([email protected] в данном случае) для ознакомления (для этого потребуется настройка почтового сервера, что выходит за рамки данной статьи).

В этот раз мы будем использовать /etc/logrotate.d/squid.conf для ротации только /var/log/squid/access.log:

Теперь предположим, что вы хотите выполнить пользовательскую команду, когда происходит ротация. Для этого поместите строку с такой командой между директивами postrotate и endscript.

Например, предположим, что мы хотим отправить письмо root'у, когда любой из журналов внутри /var/log/myservice будет ротирован. Добавим в /etc/logrotate.d/squid.conf строки:

И последнее, но не менее важное, важно отметить, что опции, присутствующие в /etc/logrotate.d/*.conf, перекрывают опции в основном конфигурационном файле в случае конфликтов.

Logrotate и Cron

По умолчанию при установке logrotate создается crontab-файл внутри /etc/cron.daily с именем logrotate. Как и в случае с другими crontab-файлами в этом каталоге, он будет выполняться ежедневно, начиная с 6:25 утра, если не установлен anacron.

В противном случае выполнение начнется примерно в 7:35 утра. Чтобы проверить, посмотрите на строку cron.daily в /etc/crontab или /etc/anacrontab.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий