Управление логами с помощью logrotate на Debian 9

Настройка logrotate для управления системными и прикладными журналами.

Logrotate — один из базовых инструментов администрирования. Он помогает поддерживать порядок в системе и предотвращает переполнение диска. При работе с виртуальными серверами или выделенными серверами корректная настройка ротации журналов обеспечивает стабильность и предсказуемость работы сервисов.

На Debian 9 logrotate установлен по умолчанию и настроен для обработки журналов всех системных пакетов и приложений.

Проверка установки

logrotate --version

Вывод команды:

logrotate 3.11.0

Структура конфигурации

Конфигурация logrotate хранится в двух местах:

  • /etc/logrotate.conf — основной файл с глобальными параметрами по умолчанию и шаблонами для несистемных файлов
  • /etc/logrotate.d/ — каталог с отдельными конфигурациями для конкретных сервисов и приложений

Пример конфигурации для пакетного менеджера apt:

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. Любые параметры, не указанные в блоке, наследуются из /etc/logrotate.conf.

Описание директив:

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

Способ 1. Конфигурация в /etc/logrotate.d/

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

В качестве примера настроим ротацию для приложения, которое пишет access.log и error.log в каталог /var/log/app/:

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

Описание директив:

  • create 0640 www-data www-data — создавать новый пустой файл журнала после ротации с правами 0640, владельцем и группой www-data
  • sharedscripts — скрипты из блока postrotate выполняются один раз после обработки всех файлов, а не для каждого файла отдельно
  • postrotate ... endscript — блок команд, выполняемых после ротации; в примере перезагружается приложение

После настройки проверьте конфигурацию в режиме отладки:

sudo logrotate /etc/logrotate.conf --debug

Команда выведет подробную информацию о том, какие файлы обрабатывает logrotate, без реального применения изменений.

Способ 2. Пользовательская конфигурация с запуском через cron

Этот вариант подходит, если нужна нестандартная периодичность ротации — например, каждый час. В таком случае конфигурацию размещают за пределами /etc/logrotate.d/ и запускают вручную через cron.

Допустим, приложение работает под пользователем testing и пишет логи в /home/testing/logs/. Создайте конфигурационный файл:

nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

Конфигурационный файл logrotate Конфигурационный файл logrotate

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

Создайте тестовый файл журнала:

cd ~
mkdir logs
touch logs/access.log

Запустите logrotate вручную с указанием файла состояния:

logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force

Вывод:

reading config file /home/testing/logrotate.conf

Handling 1 logs

rotating pattern: /home/testing/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
  log does not need rotating

--state — указывает, где хранить информацию о последней ротации. --verbose — выводит подробный лог выполнения. --force — принудительно выполняет ротацию, даже если она ещё не нужна по расписанию.

Проверьте содержимое файла состояния:

cat /home/testing/logrotate-state

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

Автоматизация через cron

Чтобы ротация выполнялась автоматически каждый час, добавьте задание в cron:

crontab -e

Добавьте в конец файла:

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

Задание cron для logrotate Задание cron для logrotate

Задача будет запускаться на 14-й минуте каждого часа ежедневно.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Обновлено:
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам