Как настроить ротацию логов с помощью logrotate в Linux.

Когда приложения в операционной системе 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/old
reading config file sample-app
reading 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

Добавить комментарий 0