Руководство по управлению файлами журнала с помощью Logrotate на Ubuntu 20.04/22.04

В любой производственной серверной среде управление файлами журналов является одним из важнейших аспектов системного администрирования. Файлы журналов содержат ценную информацию о системных событиях, поведении приложений и потенциальных проблемах, что делает их незаменимыми для устранения неполадок и мониторинга. Однако, если не принимать меры, файлы журналов могут быстро расти, занимая значительное дисковое пространство и потенциально приводя к снижению производительности или даже сбоям системы.

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

В этом подробном руководстве мы рассмотрим функциональность Logrotate, его стандартную конфигурацию на Ubuntu 20.04 и 22.04, а также пройдемся по процессу настройки пользовательских правил ротации журналов для вымышленного приложения.

Предварительные условия

Прежде чем приступить к работе, убедитесь, что у вас есть следующее:

  • Сервер Ubuntu 20.04 или 22.04 с учетной записью пользователя, не являющегося пользователем root, с привилегиями sudo.
  • Знакомство с основными операциями командной строки и редактированием текста.

Logrotate предустановлен на Ubuntu, но если вам нужно установить его вручную, вы можете сделать это, выполнив следующие команды:

$ sudo apt update
$ sudo apt install logrotate

Шаг 1: Проверка версии Logrotate

Несмотря на то, что Logrotate поставляется предустановленным на Ubuntu, нелишним будет проверить установленную версию и ее настройки по умолчанию. Это можно сделать, выполнив следующую команду:

$ logrotate --version

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

logrotate 3.19.0
    Default mail command:       /usr/bin/mail
    Default compress command:   /bin/gzip
    Default uncompress command: /bin/gunzip
    Default compress extension: .gz
    Default state file path:    /var/lib/logrotate/status
    ACL support:                yes
    SELinux support:            yes

Если вы используете дистрибутив, отличный от Ubuntu, или у вас существенно другая версия Logrotate, некоторые параметры конфигурации, описанные в этом руководстве, могут быть неприменимы. В таких случаях обратитесь к man-страницам (man logrotate) или онлайн-документацию по вашей конкретной версии Logrotate.

Шаг 2: Изучение конфигурации по умолчанию

В системах Ubuntu конфигурация Logrotate управляется в основном через два места:

  1. /etc/logrotate.conf: Этот файл содержит настройки по умолчанию и устанавливает ротацию журналов для нескольких системных журналов, которые не принадлежат ни одному из установленных пакетов. Он также включает в себя файлы конфигурации из /etc/logrotate.d каталога с помощью include заявление.
  2. /etc/logrotate.d/: Этот каталог содержит файлы конфигурации для различных установленных пакетов, требующих вращения журнала. Например, вы найдете файлы конфигурации для основных системных инструментов, таких как apt, dpkg, rsyslog, и другие.

Давайте рассмотрим конфигурацию по умолчанию в /etc/logrotate.conf файле:

$ sudo cat /etc/logrotate.conf

Этот файл устанавливает еженедельную ротацию журналов для файлов журналов, принадлежащих пользователю root и группе syslog. Он сохраняет четыре ротируемых файла журналов (rotate 4) и создает новые пустые файлы журналов после ротации (create). Кроме того, он включает в себя конфигурационные файлы из /etc/logrotate.d каталога.

Далее рассмотрим пример файла конфигурации из каталога /etc/logrotate.d каталога для apt пакета:

$ sudo cat /etc/logrotate.d/apt
/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}
/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

Этот файл содержит блоки конфигурации для двух файлов журнала: term.log и history.log, расположенные в /var/log/apt/ каталоге. Здесь используются следующие параметры конфигурации:

  • rotate 12: Хранить 12 старых ротируемых файлов журналов (вместо 4 по умолчанию).
  • monthly: Переворачивать журналы раз в месяц (вместо установленного по умолчанию еженедельного).
  • compress: Сжимать ротированные файлы журналов с помощью gzip.
  • missingok: Не генерировать ошибку, если файл журнала отсутствует.
  • notifempty: Не разворачивать файл журнала, если он пуст.

Любые опции, не указанные в этих конфигурационных блоках, наследуют значения по умолчанию из /etc/logrotate.conf.

Шаг 3: Настройка пользовательской конфигурации

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

  1. Добавление конфигурации в /etc/logrotate.d/
  2. Создание независимой конфигурации

Добавление конфигурации в /etc/logrotate.d/

Этот подход предполагает создание нового файла конфигурации в папке /etc/logrotate.d/ каталоге. Конфигурация, определенная в этом файле, будет запускаться ежедневно от имени пользователя root, наряду со всеми другими заданиями Logrotate по умолчанию.

Давайте настроим конфигурацию для вымышленного веб-приложения под названием «Your-app», которое генерирует access.log и error.log файлы в /var/log/your-app/ каталоге. Приложение запускается как www-data пользователя и группы.

Сначала создайте новый файл конфигурации:

$ sudo nano /etc/logrotate.d/your-app

Добавьте в файл следующую конфигурацию:

/var/log/your-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload your-app
    endscript
}

Вот что делает каждая опция:

  • daily: Ежедневная ротация журналов (отменяет стандартную еженедельную ротацию).
  • missingok: Не генерировать ошибку, если файл журнала отсутствует.
  • rotate 14: Сохранять 14 старых ротированных файлов журнала.
  • compress: Сжать ротированные файлы журналов с помощью gzip.
  • notifempty: Не поворачивайте файл журнала, если он пуст.
  • create 0640 www-data www-data: Создайте новый пустой файл журнала с правами доступа 0640, принадлежащий www-data пользователю и группе.
  • sharedscripts: Запуск любых скриптов, определенных в конфигурации (например, postrotate) только один раз за прогон, а не для каждого файла журнала.
  • postrotate на endscript: Этот блок содержит скрипт, который будет выполняться после ротации журнала. В этом случае он перезагружает your-app службу, чтобы она начала писать в новый файл журнала.

Сохраните и закройте файл. Вы можете проверить конфигурацию, выполнив пробный запуск:

$ sudo logrotate /etc/logrotate.conf --debug

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

Создание независимой конфигурации

В некоторых случаях вам может потребоваться запустить Logrotate от имени пользователя, не являющегося root, или ротировать журналы чаще, чем ежедневное расписание по умолчанию. В таких ситуациях можно создать независимую конфигурацию Logrotate и настроить задание cron для ее запуска с нужным интервалом.

Предположим, у вас есть приложение, запущенное под именем bob пользователя, генерирующее журналы в /home/bob/logs/ каталоге. Вы хотите вращать эти журналы ежечасно.

Сначала создайте файл конфигурации в своем домашнем каталоге:

$ nano /home/bob/logrotate.conf

Добавьте следующую конфигурацию:

/home/bob/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

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

Сохраните и закройте файл.

Далее создайте файл журнала для тестирования:

$ cd ~
$ mkdir logs
$ touch logs/access.log

Теперь запустите Logrotate с новой конфигурацией и укажите местоположение файла состояния:

$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose

[--state задает местоположение файла состояния, в котором хранится информация о журналах, обрабатываемых во время каждого запуска. Опция --verbose выводит подробную информацию о действиях Logrotate.

Вы должны увидеть вывод, похожий на следующий:

reading config file /home/bob/logrotate.conf
Handling 1 logs
rotating pattern: /home/bob/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/bob/logs/access.log
  log does not need rotating

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

$ cat /home/bob/logrotate-state

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

Чтобы заставить Logrotate вращать файл журнала немедленно (в целях тестирования), используйте команду --force флаг:

$ logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state --verbose --force

Наконец, настройте задание cron для ежечасного запуска Logrotate. Откройте кронтаб вашего пользователя с помощью:

$ crontab -e

Добавьте следующую строку в файл crontab:

14 * * * * /usr/sbin/logrotate /home/bob/logrotate.conf --state /home/bob/logrotate-state

Это запустит программу logrotate на 14-й минуте каждого часа, используя полный путь к файлу logrotate двоичному файлу и указывая местоположение файла конфигурации и файла состояния.

Сохраните и выйдите из файла crontab. Теперь задание cron будет выполняться по указанному расписанию.

Дополнительные параметры конфигурации

Хотя примеры, рассмотренные в этом руководстве, демонстрируют некоторые общие параметры Logrotate, существует множество дополнительных опций для тонкой настройки поведения ротации журнала. Вот несколько наиболее важных опций:

  • dateext: Эта опция добавляет расширение даты к именам ротируемых файлов журнала, что облегчает определение периода времени, охватываемого каждым файлом журнала.
  • dateformat: Указывает формат даты, который будет использоваться с dateext.
  • mail: Отправляет отчет о повороте файла журнала на указанный адрес электронной почты.
  • olddir: Перемещает ротированные файлы журнала в другой каталог, а не сохраняет их в том же каталоге, что и текущий файл журнала.
  • prerotate и postrotate: Эти опции позволяют запускать сценарии до и после ротации журнала соответственно.
  • size: Ротация файлов журнала в зависимости от их размера, а не по фиксированному расписанию.

Вы можете изучить эти и другие варианты, обратившись к странице руководства Logrotate (man logrotate) или онлайн-документацию.

Заключение

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

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *