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

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

Мануал

Один из самых интересных (и, возможно, один из самых важных) каталогов в системе Linux – это /var/log.

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

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

Логи, они же журналы также являются первым источником информации, куда администраторы и инженеры обращаются при устранении неполадок.

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

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

На RHEL / CentOS и Fedora

# ls /var/log

На Debian и Ubuntu, Kali Linux и т.д

# ls /var/log

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

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

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

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

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

Кроме того, он удалит «старые» файлы журналов и сохранит самые свежие.

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

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

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

---------- На Debian и Ubuntu ---------- 
# aptitude update && aptitude install logrotate 

---------- На CentOS, RHEL и 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:
  • weekly означает, что инструмент будет пытаться обновлять логи еженедельно. Другие возможные значения – daily и monthly.
  • rotate 3 указывает, что нужно оставить только 3 ротаций. Таким образом, самый старый файл будет удален при четвертом последующем запуске.
  • size = 10M устанавливает минимальный размер для ротации 10M. Другими словами, каждый журнал не будет ротироваться, пока не достигнет 10 МБ.
  • compress и delaycompress используются для того, чтобы указать, что все ратируемые журналы, за исключением самого последнего, должны быть сжаты.
Давайте выполним пробный прогон, чтобы увидеть, что будет делать logrotate, если бы он действительно был выполнен сейчас.

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

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

Вместо сжатия журналов мы могли бы переименовать их по дате, когда они были ратированы.

Для этого воспользуемся директивой dateext.

Если наш формат даты отличается от формата по умолчанию yyyymmdd, мы можем указать его с помощью dateformat.

Обратите внимание, что мы можем даже предотвратить ротацию, если журнал пуст с помощью notifempty.

Кроме того, давайте укажем logrotate отправлять обновленный лог системному администратору (в данном случае admin@mydomain.com) для его справки (для этого потребуется настроить почтовый сервер, что выходит за рамки этого статья).

На этот раз мы будем использовать /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 admin@mydomain.com
}

Заключение

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

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

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий