Когда приложения в операционной системе Linux работают, инициируются фоновые процессы, связанные с этим приложением. События, связанные с выполнением этих приложений, записываются в файл журнала (генерируемый приложениями и/или фоновыми процессами).
Поскольку лог-файлы генерируются постоянно; особенно в загруженной системе, такой как серверная, необходимо держать их размер под контролем, чтобы они не поглотили все место на жестком диске.
Для системы Linux, в которой запущено не слишком много приложений, файлы журналов можно легко и вручную уменьшать по расписанию. Однако такой подход к управлению файлами журналов неприменим к большим системам Linux.
На помощь приходит Logrotate, который позаботится об автоматической ротации и сжатии растущих файлов журналов, чтобы гарантировать свободу дискового пространства системы.
В этой статье мы рассмотрим установку и базовое использование утилиты Logrotate для управления файлами журналов в системе Linux.
Как установить Logrotate в Linux.
Утилита управления файлами журналов Logrotate предустановлена в основных дистрибутивах Linux. Если он не установлен в вашей системе Linux, исправить это можно, выполнив следующие команды:
$ sudo apt install logrotate [на debian, Ubuntu и Mint] $ sudo yum install logrotate [на RHEL/Centos/Fedora, а также Rocky Linux/AlmaLinux] $ sudo emerge -a app-admin/logrotate [на Gentoo Linux] $ sudo pacman -S logrotate [на Arch Linux] $ sudo zypper install logrotate [на OpenSUSE]
Понимание конфигурации Logrotate.
В основном файле конфигурации Logrotate хранится информация о ротации журналов, установленных по умолчанию и другие настройки. Посмотреть его можно следующей командой:
$ cat /etc/logrotate.conf
Содержимое его, примерно следующее:
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may be also be configured here.
Основной каталог конфигурации Logrotate — это место, где расположены ассоциации файлов журналов к установленным пакетам Linux, которым требуется помощь в ротации, они будут помещать свои конфигурации logrotate в этот каталог. Как показано на приведено ниже, системные инструменты, такие как dnf, syslog и chrony, уже перечислены.
$ ls -l /etc/logrotate.d/ -rw-r--r--. 1 root root 130 Feb 19 2018 btmp -rw-r--r--. 1 root root 160 May 12 2021 chrony -rw-r--r--. 1 root root 88 Apr 12 2021 dnf -rw-r--r--. 1 root root 172 Mar 11 2021 iscsiuiolog -rw-r--r--. 1 root root 162 Jan 10 2022 kvm_stat -rw-r--r--. 1 root root 291 Jan 13 2022 pxp-agent -rw-r--r--. 1 root root 155 Jan 27 2022 samba -rw-r--r--. 1 root root 237 Dec 17 2021 sssd -rw-r--r--. 1 root root 88 Jan 24 2022 subscription-manager -rw-r--r--. 1 root root 226 Jan 20 2022 syslog -rw-r--r--. 1 root root 145 Feb 19 2018 wtmp -rw-r--r-- 1 root root 132 Mar 8 2021 zabbix-agent
Например, на основе приведенного выше снимка экрана мы могли бы просмотреть информацию о файле конфигурации Logrotate диспетчера пакетов dnf следующим образом:
$ cat /etc/logrotate.d/dnf /var/log/hawkey.log { missingok notifempty rotate 4 weekly create }
На основе приведенного выше вывода представлен один файл журнала hawkey.log. В нем имеются следующие параметры:
- missingok не связывать сообщение об ошибке с отсутствующим файлом журнала.
- notifempty гарантирует, что пустые файлы журналов не ротируются.
- rotate 4 обеспечивает сохранение 4 старых файла журнала.
- weekly обеспечивает ротацию журнала один раз в неделю.
- create после ротации создать пустой log-файл.
Пример создания файла конфигурации Logrotate.
Мы рассмотрим два сценария:
1. Добавление файла конфигурации в каталог /etc/logrotate.d/
Предположим, что в нашей системе установлено вымышленное веб-серверное приложение с именем sample-app, и мы хотим настроить ротацию его журналов. Сначала мы создадим новый файл конфигурации журнала в каталоге /etc/logrotate.d. Для этого используем любой удобный текстовый редактор.
$ sudo vi /etc/logrotate.d/sample-app
И внесем в него следующие строки:
/var/log/sample-app/*.log { daily missingok rotate 14 compress notifempty create 0640 www-data www-data sharedscripts postrotate systemctl reload sample-app endscript }
Затем создадим каталог журналов.
$ mkdir /var/log/sample-app
В такой конфигурации, после завершения ротации журнала создается новый файл журнала с разрешением 0640 для владельца www-data и для группы владельцев www-data. Флаг sharedscripts гарантирует, что последующие сценарии будут выполняться один раз за один прогон.
Скрипт внутри блока postrotate to endscript выполняется после успешной ротации журналов и перед сжатием сгенерированных журналов.
Для пробного запуска и тестирования приведенной выше конфигурации Logrotate давайте выполним:
$ sudo logrotate /etc/logrotate.conf --debug
На своей машине я получил следующий вывод
$ sudo logrotate /etc/logrotate.conf --debug WARNING: logrotate in debug mode does nothing except printing debug messages! Consider using verbose mode (-v) instead if this is not what you want. reading config file /etc/logrotate.conf including /etc/logrotate.d reading config file btmp reading config file chrony reading config file dnf reading config file iscsiuiolog reading config file kvm_stat reading config file pxp-agent reading config file samba olddir is now /var/log/samba/oldreading config file sample-appreading config file sssd reading config file subscription-manager reading config file syslog reading config file wtmp reading config file zabbix-agent ...
Несмотря на то, что приложение не существует, Logrotate смог оценить состояние его файла конфигурации. А сгенерированные и сжатые журналы должны храниться в /var/log/sample-app.
2.Создание независимой конфигурации Logrotate.
Приложение может быть запущено от обычного пользователя. Допустив в системе есть пользовательская учетная запись user. Cгенерированные им журналы хранятся в каталоге /home/user/logs/.
В таком случае файл конфигурации Logrotate должен находиться в домашнем каталоге:
$ vi /home/user/logrotate.conf
Создадим такой файл в домашней директории со следующим содержанием:
/home/user/logs/*.log { hourly missingok rotate 24 compress create }
В такой конфигурации файлы журнала будут генерироваться ежечасно.
Теперь необходимо создать каталог журналов
$ cd ~ $ mkdir logs $ touch logs/access.log
Теперь проверим как все это работает.
$ logrotate /home/user/logrotate.conf --state /home/user/logrotate-state --verbose reading config file /home/user/logrotate.conf Reading state from file: /home/user/logrotate-state Allocating hash table for state file, size 64 entries Handling 1 logs rotating pattern: /home/user/logs/*.log hourly (24 rotations) empty log files are rotated, old logs are removed considering log /home/user/logs/access.log Creating new state Now: 2022-08-25 23:22 Last rotated at 2022-08-25 23:00 log does not need rotating (log has been already rotated)
Параметр —verbose, позволяет получить более детальный вывод. В приведенной выше настройке ничего не было ротировано, так как Logrotate видит файл в первый раз. Однако в файле состояния Logrotate будет отображаться записанная информация о запуске.
$ cat /home/user/logrotate-state logrotate state -- version 2 "/home/user/access.log" 2022-8-25-23:0:0
Чтобы настроить автоматический запуск Logrotate для текущего пользователя, необходимо открыть пользовательский crontab:
$ crontab -e
и добавьте следующую в него запись:
14 * * * * /usr/sbin/logrotate /home/user/logrotate.conf --state /home/user/logrotate-state
Примерно через час каталог $HOME/logs должен быть заполнен свернутым и сжатым файлом журнала.
Теперь мы умеем настраивать и ротировать файлы журналов как для всех пользователей в системе, так и для обычных пользователей через Logrotate в Linux.
Заключение.
Вот и добавилось в копилку навыков еще одно умение. Надеюсь кому-то пригодится. А если Вам нравится мой сайт, и то что я делаю, то можете поддержать этот проект, собирающий в себя статьи и руководства по IT технологиям. Это можно сделать нажав, кнопочку ниже.
Was this helpful?
0 / 0