Когда приложение в среде операционной системы Linux запущено, инициируются фоновые процессы, связанные с этим приложением. События, связанные с выполнением этих приложений, записываются в файл журнала (создаваемый приложениями и/или фоновыми процессами).
Поскольку файлы журналов генерируются постоянно, особенно в загруженной системе, например, в серверной среде, необходимо следить за ними.
Для системы Linux, в которой не запущено слишком много приложений, файлы журналов можно легко и вручную обрезать по расписанию. Однако такой подход к управлению лог-файлами не применим для корпоративных/производственных Linux-систем. Logrotate позаботится об автоматической ротации и сжатии растущих файлов журналов, чтобы обеспечить экономию доступного дискового пространства системы.
В этой статье мы рассмотрим установку и базовое использование утилиты Logrotate для управления файлами журналов в системе Linux.
Как установить Logrotate в Linux
Утилита управления файлами журналов Logrotate предустановлена в основных дистрибутивах Linux. Если она не установлена в вашей системе Linux, воспользуйтесь следующими инструкциями по установке.
1 | sudo apt install logrotate |
RHEL, CentOS, Fedora и Rocky Linux, AlmaLinux
1 | sudo yum install logrotate |
Gentoo Linux
1 | sudo emerge -a app-admin/logrotate |
Arch Linux
1 | sudo pacman -S logrotate |
OpenSUSE
1 | sudo zypper install logrotate |
Понимание конфигурации Logrotate
Основной конфигурационный файл Logrotate хранит информацию о ротации журналов по умолчанию и другие настройки.
1 | ls -l /etc/logrotate.conf |
1 | cat /etc/logrotate.conf |
Основной каталог конфигурации Logrotate - это каталог, в котором находятся все установленные пакеты Linux, нуждающиеся в помощи при ротации журналов, они будут размещать свои конфигурации logrotate в этом каталоге. Как показано на приведенном выше снимке экрана, системные инструменты, такие как apt, dpkg и ufw, уже перечислены.
1 | ls -l /etc/logrotate.d |
Например, исходя из приведенного выше снимка экрана, мы можем просмотреть информацию о файле конфигурации Logrotate менеджера пакетов dnf следующим образом:
Исходя из вышеприведенного результата, представлены два различных файла журнала (term.log и history.log).
- Опция rotate 4 обеспечивает сохранение 4 старых файлов журнала.
- опция weekly обеспечивает ротацию журналов раз в неделю.
- опция missingok не ассоциирует сообщение об ошибке с отсутствующим файлом журнала.
- параметр notifempty гарантирует, что пустые файлы журналов не будут ротироваться.
Создание конфигурационного файла Logrotate
Здесь мы рассмотрим два сценария:
Добавление файла конфигурации в каталог /etc/logrotate.d/
Предположим, что в нашей системе установлено вымышленное приложение веб-сервера под названием sample-app, и мы хотим настроить его ротацию журналов. Сначала мы создадим новый файл конфигурации журнала в каталоге /etc/logrotate.d.
1 | sudo nano /etc/logrotate.d/sample-app |
Вот пример конфигурационного файла, который может обрабатывать эти журналы:
1 2 3 4 5 6 7 8 9 10 11 12 | /var/log/sample-app/*.log { daily missingok rotate 14 compress notifempty create 0640 www-data www-data sharedscripts postrotate systemctl reload sample-app endscript } |
Затем создайте каталог журнала.
1 | mkdir /var/log/sample-app |
После завершения ротации журнала создается новый файл журнала с разрешением 0640 для владельца www-data и группы www-data. Флаг sharedscripts гарантирует, что последующие скрипты будут выполняться один раз за выполнение.
Сценарий внутри блока postrotate to endscript выполняется после успешного вращения журнала и перед сжатием сгенерированных журналов.
Для пробного запуска и тестирования приведенной выше конфигурации Logrotate выполним следующие действия:
1 | sudo logrotate /etc/logrotate.conf --debug |
Несмотря на то, что приложение не существует, Logrotate смог оценить состояние его конфигурационного файла. В описанном выше случае сгенерированные и сжатые журналы должны храниться в /var/log/sample-app.
Создание независимой конфигурации Logrotate
Приложение может быть запущено от имени нашего системного пользователя, например, user. Можно предположить, что генерируемые им журналы хранятся в каталоге /home/user/logs/.
Конфигурационный файл Logrotate должен находиться в каталоге Home:
1 | nano /home/user/logrotate.conf |
Затем вставьте следующую конфигурацию:
1 2 3 4 5 6 7 | /home/user/logs/*.log { hourly missingok rotate 24 compress create } |
Вышеуказанные журналы будут генерироваться ежечасно.
Давайте создадим соответствующий каталог журналов.
1 2 3 | cd /home/user/ mkdir logs touch logs/access.log |
Пора протестировать:
1 | logrotate /home/user/logrotate.conf --state /home/user/logrotate-state --verbose |
Параметр --verbose подробно описывает действия, связанные с Logrotate. В приведенной выше установке ничего не вращалось, поскольку Logrotate видит файл впервые. Однако в файле состояния Logrotate будет записана информация о запуске.
1 | cat /home/user/logrotate-state |
Чтобы настроить Logrotate на автоматический ежечасный запуск для текущего пользователя системы, откройте crontab пользователя:
1 | crontab -e |
добавьте следующую запись в кронтаб пользователя.
1 | 14 * * * * /usr/sbin/logrotate /home/user/logrotate.conf --state /home/user/logrotate-state |
Примерно через час каталог $HOME/logs должен быть заполнен ротированным и сжатым файлом журнала.
Заключение
Теперь мы должны уметь настраивать и вращать файлы журналов для пользователей с правами root и не root с помощью Logrotate в Linux.