Главная >> Сервер >> Настройка Logrotate

Настройка Logrotate

В Linux, большинство сервисов и программ, которые работают в фоне, таких как Apache, Nginx, Postfix и других записывают информацию о своем состоянии, результатах работы и ошибках в лог файлы. Стандартное расположение логов или как их еще называют - журналов - в папке /var/log.

С помощью анализа логов вы можете понять что работает не так, почему произошла ошибка и как решить возникшую проблему. Но тут кроется одна проблема. Размер логов постоянно растет и они занимают все больше и больше места на диске, поэтому необходимо вовремя чистить логи и удалять устаревшие записи, чтобы они не мешали нормально работать. Это можно делать вручную время от времени или настроить скрипты Cron, но есть еще более простой вариант - утилита logrotate. В этой статье будет рассмотрена настройка logrotate и ее использование.


Содержание статьи

Как работает Logrotate?

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

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

Настройка Logrotate

Logrotate - это популярная утилита, поэтому в большинстве дистрибутивов она поставляется по умолчанию. Вы можете убедиться, что программа установлена в вашем дистрибутиве, попытавшись ее установить. Например, в CentOS:

sudo yum install logrotate

Или в Ubuntu и основанных на ней дистрибутивах:

sudo apt install logrotate

Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/. Вы можете размещать все настройки logrotate прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /etc/logrotate.d/.

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

vi /etc/logrotate.conf

include /etc/logrotate.d

Просто убедитесь что она там уже есть. Сначала давайте рассмотрим основные директивы, которые мы будем применять во время настройки. Здесь директивы выглядят не совсем обычно, сама директива и определяет что и когда нужно делать, а уже если нужно, ей передаются дополнительные параметры. Чтобы указать как часто нужно выполнять проверку совпадению условий используются такие директивы:

  • hourly - каждый час;
  • daily - каждый день;
  • weekly - каждую неделю;
  • monthly - каждый месяц;
  • yearly - каждый год.

Основные директивы управления и обработки логов:

  • rotate - указывает сколько старых логов нужно хранить, в параметрах передается количество;
  • create - указывает, что необходимо создать пустой лог файл после перемещения старого;
  • dateext - добавляет дату ротации перед заголовком старого лога;
  • compress - указывает, что лог необходимо сжимать;
  • delaycompress - не сжимать последний и предпоследний журнал;
  • extension - сохранять оригинальный лог файл после ротации, если у него указанное расширение;
  • mail - отправлять Email после завершения ротации;
  • maxage - выполнять ротацию журналов, если они старше, чем указано;
  • missingok - не выдавать ошибки, если лог файла не существует;
  • olddir - перемещать старые логи в отдельную папку;
  • postrotate/endscript - выполнить произвольные команды после ротации;
  • start - номер, с которого будет начата нумерация старых логов;
  • size - размер лога, когда он будет перемещен;

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

адрес_файла_лога {
директивы
}

Теперь давайте создадим файл rsyslog.conf в папке /etc/logrotate.d/ и поместим в него настройки для ротации этого лога:

/var/log/messages {
daily
rotate 3
size 10M
compress
delaycompress
}

Эти настройки означают, что ротация журналов будет выполняться ежедневно, и мы будем хранить три последних журнала, более старые копии будут автоматически удаляться. Минимальный размер для ротации - 10 мегабайт, ротация не будет выполнена, если лог не занимает более 10 мегабайт. Будет использоваться сжатие, для всех журналов кроме последнего и предпоследнего. Точно по такому же принципу вы можете настроить ротацию логов для любого из журналов. Нужно создать такую секцию для каждого из логов, которыми вы хотите управлять.

Теперь осталось протестировать как работает наша конфигурация. Для этого запустим утилиту logrotate с опцией -d. Она выведет все, что планируется сделать, но не будет изменять файлы на диске. У нас есть файл /var/log/messages, размером 40 Мегабайт, посмотрим что будет делать утилита:

logrotate -d /etc/logrotate.d/rsyslog.conf

Как видите, программа обнаруживает файл лога и разделяет его на несколько частей. Вы можете убедиться, что logrotate будет запускаться как положено проверив расписание cron:

ls /etc/cron.daily/

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

Выводы

В этой статье мы рассмотрели как выполняется настройка logrotate centos или в любом другом дистрибутиве Linux. Работа утилиты не сильно отличается в зависимости от дистрибутивов. Если у вас есть сервер с большой нагрузкой, вам обязательно необходимо настроить ротацию логов. Надеюсь, эта информация была полезной для вас. На завершение видео, о том как выполняется ротация логов в Ubuntu от LPIC:

И еще одно на английском:

20 комментариев к “Настройка Logrotate”

  1. "Вы можете убедиться, что logrotate будет запускаться как положено проверив расписание cron:
    $ ls /var/cron.daily/ "
    Поправьте, пожалуйста, всё же наверное /etc/cron.daily/ 🙂

    Ответить
  2. По-моему, при использовании временных параметров (daily, monthly) лучше использовать директиву minsize, а не size. Ошибаюсь? За статью спасибо!

    Ответить
  3. Разве Size не противоречит Daily? Работать будет только одна из этих директив (не уверен в приоритете, впрочем)

    Ответить
    • size будет отменять дневную ротацию.
      maxsize определяет максимальный размер лога, но лог будет ротирован, если указаны daily/weecly etc..

      Ответить
      • size не создаёт новый файл, потому что в /etc/logrotate.conf параметр dateext задаёт имя файла Год-месяц-день. С таким именем может быть только один файл, второй создать не даст.

        Нужно закомментировать этот параметр (получим логи 1, 2, 3...) или прописать маску файлов dateformat -%Y-%m-%d_%H-%s

        Плюс logrotate запускается по умолчанию раз в сутки. Если нужна частая проверка - добавляйте в cron
        */15 * * * * /etc/cron.daily/logrotate

        Ответить
  4. Всем доброго времени суток!
    Есть почти 😉 настроенные сервер на Ubuntu 16.04. На данном сервере крутится куча демонов которые свои логи скидывают в скрытые директории (профильные).
    /home/users/.aaa
    /home/users/.bbb
    /home/users/.ccc
    Как объяснить logrotate чтобы он нашел в этих директориях файлы debug.log. Если можно на примерах. Заранее СПАСИБО!

    Ответить
  5. Просто хочу сказать
    Сайт классный, часто использую как справочную. В большинстве случаев написано доходчиво и понятно.
    Просто спасибо!

    Ответить
  6. не все так просто с опцией hourly,
    Log files are rotated every hour. Note that usually logrotate is configured to be run by cron daily. You have to change this configuration and run logrotate hourly to be able to really rotate logs hourly.

    Надо еще добавлять в конфиги крона команды запуска ежечасно.

    Ответить
  7. В ubuntu 20.04 управление идёт через systemd поэтому ковырять настройки cron без толку, настраивать поведение logrotate надо через logrotate.service и logrotate.timer
    Оба лежат в каталоге /usr/lib/systemd/system/

    Возможно так не только в Убунте 20.04 но и в других дистрах с systemd

    Ответить
  8. Упущены важные нюансы, а также часть написана ошибочно.

    Как сказали в комментариях (Булат), все временные рамки, указанные в настройке влияют лишь на то, будет ли лог сканироваться при следующем запуске logrotate! Но частоту запуска logrotate надо устанавливать самому или через cron или через systemd, в зависимости от того, как он установлен (чаще это будет systemd). То есть это не демон, который висит постоянно и в режиме реального времени следит за логами. Это всего лишь утилита, которая запускается по таймеру.

    Также параметр size вовсе не означает минимальный размер. Для этого есть minsize. Size означает, что вне зависимости от времени проверки ротации (hourly, weekly и т. п.) лог будет ротирован, если размер превысит значение. А minsize — это как раз минимальный размер, при котором будет проведена ротация с учётом уже времени. То есть size время не учитывает, а minsize учитывает.

    Ответить
  9. Народ, а вот такой вопрос - если стоит hourly почему-то с наступлением новых суток логи за предыдущие очищаются, курил man но ничего про это не нашел. Никто не сталкиваля? rotate ставил 72 чтобы хранилось за 3е суток, - но не помогает

    Ответить
  10. Что делать если получаю ошибку
    error: /root/my-log-file.log:1 lines must begin with a keyword or a filename (possibly in double quotes)?
    Погуглил, типа неправильное окончание строки в /etc/logrotate.d/mylogs.conf. Проверял и в Notepad++ и конвертировал на всякий случай - всё равно эта ошибка не уходит. Может это проблема файла с логами, а не конфига? Но я повлиять на логи не могу, их пишет сторонняя программа.

    Ответить

Оставьте комментарий