Поиск по сайту:

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


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

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

Если мы посмотрим на содержимое /var/log в CentOS/RHEL/Fedora и Debian/Ubuntu (для разнообразия), мы увидим следующие файлы журналов и подкаталоги.

Обратите внимание, что в вашем случае результат может несколько отличаться в зависимости от служб, запущенных в вашей системе (системах), и времени их работы.

В RHEL/CentOS и Fedora

ls /var/log

В Дебиане и Убунту

ls /var/log

В обоих случаях мы можем наблюдать, что некоторые имена журналов заканчиваются, как и ожидалось, на «log », а другие либо переименовываются с использованием даты (например, maillog-20160822). в CentOS) или сжатом (рассмотрим auth.log.2.gz и mysql.log.1.gz в Debian).

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

Если бы журналы хранились вечно, они в конечном итоге заполнили бы файловую систему, в которой находится /var/log. Чтобы предотвратить это, системный администратор может использовать удобную утилиту под названием logrotate для периодической очистки журналов.

В двух словах, logrotate переименовывает или сжимает основной журнал при выполнении условия (подробнее об этом через минуту), так что следующее событие записывается в пустой файл.

Кроме того, будут удалены «старые» файлы журналов и останутся самые последние. Конечно, мы сами решаем, что означает «старый» и как часто мы хотим, чтобы logrotate очищал логи за нас.

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

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

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

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

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

include /etc/logrotate.d

Мы будем придерживаться этого подхода, поскольку он поможет нам поддерживать порядок, и будем использовать поле Debian для следующих примеров.

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

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

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

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

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

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

Давайте выполним пробный прогон, чтобы посмотреть, что бы сделал logrotate, если бы он действительно был выполнен сейчас. Используйте параметр -d, за которым следует файл конфигурации (фактически вы можете запустить logrotate, опустив этот параметр):

logrotate -d /etc/logrotate.d/apache2.conf

Результаты показаны ниже:

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

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

Если вы хотите получать электронные письма о logrotate, вы можете настроить почтовый сервер Postfix, как показано здесь: Установить почтовый сервер Postfix.

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

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Как мы видим на изображении ниже, это бревно не нужно было поворачивать. Однако если условие размера соблюдено (size=1M), повернутый журнал будет переименован в access.log-25082020 (если журнал был повернут августа). 25, 2020), а основной журнал (access.log) будет создан заново с правами доступа, установленными на 0644 и с root. Strong> как владелец и владелец группы.

Наконец, когда количество журналов наконец достигнет 6, самый старый журнал будет отправлен по адресу [email .

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

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

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

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

Логротате и Cron

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

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

Краткое содержание

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

Просто убедитесь, что он настроен на запуск как задание cron, и logrotate значительно облегчит вам задачу. Более подробную информацию можно найти на странице руководства.

Есть ли у вас какие-либо вопросы или предложения по поводу этой статьи? Не стесняйтесь, дайте нам знать, используя форму комментариев ниже.