Настроить ротацию логов linux

Установка и настройка Logrotate в Linux

Директория /var/log – одна из наиболее интересных (и, возможно, наиболее важных) директорий в Linux. В соответствии со стандартом иерархии файловых систем, данные о работе большинства запущенных в системе служб сохраняются в файлы в этой директории или одной из ее поддиректорий.

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

Зачем нужна ротация логов

Если посмотреть содержимое /var/log в различных дистрибутивах Linux, мы увидим следующие файлы и поддиректории. У вас они могут отличаться в зависимости от запущенных в вашей системе служб и времени их работы.

Здесь мы видим, что некоторые имена логов заканчиваются на «log», как и можно предположить, а некоторые переименовываются в соответствии с датой (например, maillog-20190203) .

Если бы логи хранились вечно, в какой-то момент они бы заполнили всю файловую систему, где находится /var/log. Чтобы этого не произошло, можно воспользоваться полезной утилитой под названием logrotate для периодической очистки (ротации) логов.

Другими словами, logrotate переименовывает или сжимает файл лога при выполнении определенных условий (мы рассмотрим их чуть ниже), а следующее событие записывается в пустой файл. Кроме того, она удаляет «старые» файлы логов и сохраняет только более новые. Естественно, мы сами определяем критерии «старости» и периодичность очистки.

Установка logrotate

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

В Debian и Ubuntu

В CentOS, RHEL и Fedora

Сразу стоит отметить, что конфигурация хранится как в основном файле (/etc/logrotate.conf), а также в отдельных файлах .conf в директории /etc/logrotate.d. Необходимо только включить эту опцию в основном файле параметром

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

Примеры настроек Logrotate

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

Вставьте в файл /etc/logrotate.d/httpd следующие строки (скорее всего, этот файл будет создан при установки):

Рассмотрим назначение каждой из них.

Первая строка показывает, что директивы в данном блоке применяются ко всем логам в директории /var/log/apache2.
weekly — означает еженедельную ротацию логов. Другие возможные значения – daily (ежедневно) и monthly (ежемесячно).
rotate 3 — задает сохранение только 3 прошедших ротацию логов. Таким образом, при четвертом запуске самый старый файл будет удален.
size=10M — устанавливает минимальный размер файла для ротации равным 10 мегабайт. Другими словами, ротация не будет выполняться, пока лог не достигнет размера в 10 Мб
compress и delaycompress — используются для того, чтобы задать сжатие всех сохраненных логов кроме самого последнего.

Проведем тестовый запуск, чтобы увидеть, что бы сделала logrotate, если бы она действительно была запущена. Воспользуйтесь опцией -d с файлом конфигурации (для реального запуска утилиты не указывайте эту опцию):

Вместо сжатия логов их можно переименовывать в соответствии с датой ротации. Для этого используется директива dateext. Для использования формата даты, отличного от ГГГГММДД можно указать желаемый формат.

Мы также можем исключить ротацию лога, если он пустой, воспользовавшись опцией notifempty. Кроме того, зададим отправку заполненных логов системному администратору по электронной почте (в данном случае admin@mydomain.com), для этого в системе должен быть настроен почтовый сервер.

В следующем примере настроим файл конфигурации /etc/logrotate.d/squid с использованием описанных выше параметров для ротации лога /var/log/squid/access.log:

Как мы видим, ротация этого лога не требуется. Однако, при выполнении условия по размеру (size=1M), лог будет переименован в access.log-25022019 (если ротация была произведена 25 февраля 2019 года), и будет создан новый файл access.log с правами доступа 0644, и владельцем root. Когда наберется 6 логов, самый старый из них будет отправлен на admin@mydomain.com.

Читайте также:  More information on windows 10

Теперь допустим, что при выполнении ротации вам требуется запуск собственной команды. Для этого пропишите строку с этой командой между директивами postrotate и endscript. Например, если требуется уведомлять root-пользователя по электронной почте о каждой ротации логов в директории /var/log/myservicegets, добавьте в блок три последних строки:

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

Logrotate и Cron

По умолчанию после установки logrotate в директории /etc/cron.daily создается файл crontab с именем logrotate. Как и в случае с другими файлами crontab в этой директории, он будет выполняться ежедневно в соответствиями с настройками в /etc/crontab.

Заключение

В системе, где ведется множество логов, их администрирование может быть существенно упрощено при помощи logrotate. Как было рассмотрено в данном руководстве, данная утилита будет автоматически выполнять ротацию, сжимать, удалять логи и отправлять их по электронной почте с заданной периодичностью или при достижении файлом определенного размера. Просто убедитесь, что для запуска logrotate есть соответствующая задача cron, и все станет гораздо проще. Для более подробной информации обратитесь к соответствующей man-странице.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Ротация логов в Linux и FreeBSD с помощью logrotate

С помощью утилиты logrotate можно настроить автоматическое удаление (чистку) лог-файлов. В противном случае, некоторые логи могут заполнить все дисковое пространство, что приведет к проблемам в работе операционной системы.

Установка

Чаще всего, в Linux данная утилита установлена по умолчанию. Если это не так, установка выполняется следующими командами.

Ubuntu / Debian:

apt-get install logrotate

CentOS / Red Hat:

yum install logrotate

FreeBSD:

pkg install logrotate

Утилита не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке (logrotate start или logrotate restart делать не нужно).

Настройка

Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD — /usr/local/etc/logrotate.d/).

К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:

/var/log/logstash-forwarder/* <
rotate 30
size=10M
missingok
notifempty
daily
compress
delaycompress
maxage 30
create 0644 root root
postrotate
/usr/bin/systemctl restart logstash-forwarder
endscript
>

  • rotate 30 — хранить последние 30 ротированных файлов. Остальные удалять.
  • size=10M — пока размер лог-файла не превысит 10 мегабайт, он не будет ротироваться.
  • missingok — если файла не существует, не выкидывать ошибку.
  • notifempty — если файл пустой, не выполнять никаких действий.
  • daily — делать ротацию каждый день.
  • compress — сжимать ротированные файлы.
  • delaycompress — сжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу.
  • maxage 30 — хранить ротированные файлы за последние 30 дней. Остальные удалять.
  • create 0644 root root — создать новый лог-файл после ротирования.
  • postrotate . endscript — скрипт, который необходимо выполнить после чистки лога.

* /var/log/logstash-forwarder/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/logstash-forwarder.
* напомню, что во FreeBSD, путь будет /usr/local/etc/logrotate.d/logstash.

При настройке необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В данном случае, необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.

Запуск вручную

Запуск выполняется со следующим синтаксисом:

logrotate -f /etc/logrotate.d/logstash

Автоматический запуск

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

Если для какого-то приложения необходимо выполнять ротацию лога по особому расписанию, узнаем полный путь до утилиты logrotate:

Читайте также:  Windows не удалось найти драйвер для сетевого адаптера windows 10 что делать

* в моем случае, это было /usr/sbin/logrotate.

Получив путь, создаем правило в cron:

0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/logstash

* в данном примере в 00:00 будет запускаться logrotate и чистить логи с нашей настройкой для logstash-forwarder.

Источник

Настройка logrotate + доступ для сбора логов по SFTP

У меня стояла задача: настроить сжатие логов DNS сервера Unbound, с возможностью удобного сбора этих бэкапов в коллектор. Также требовалось ограничить права доступа, чтобы с коллектора можно было зайти только в дирректорию, где хранятся бэкапы логов. Указанные действия проводил на CentOS 7 Minimal и CentOS 6.6 Minimal.

1) Сперва создаем группу пользователей, для которой будет ограничен доступ только по SFTP:

2) Далее правим конфигурацию ssh:

Требуется в самом конце закомментировать строку #Subsystem sftp /usr/libexec/openssh/sftp-server и ограничить доступ для группы пользователей sftpd только по SFTP и только в домашнюю директорию. Для этого нужно добавить в конце следующие строки:

3) Создаем пользователя dnslog, назначаем ему домашнюю папку и права на эту папку. Владелец должен быть root, никто другой не должен иметь прав на запись в эту папку, иначе ничего не получится:

4) Создаем папку, внутри домашней директории нашего пользователя, для которой у logrotate будут права на запись.

Доступ для коллектора организован, теперь можно подключиться по SFTP и проверить, что все работает. Далее настроим ротацию логов:

5) Создаем в папке /etc/logrotate.d/ файл, в котором будут прописаны настройки ротации наших логов.

Настройки примерно такие:

Далее я установил время ротации через крон.

6) В файле /etc/crontab добавил следующую строку:

23 * * * * root run-parts /etc/cron.hourly

И перезагружаем крон:

Ротация будет осуществляться каждый час в 23 минуты.

7) В папке /etc/cron.hourly/ создаем файл с любым именем, где пишем скрипт, который будет выполняться при наступлении времени ротации, с таким содержимым:

Вот и все. Логи будут автоматически складываться в папку /home/dnslog/logs/

Проверить настройки ротации можно командой:

Также, стоит отметить, что в Unbound существует два способа ведения логов: средствами Unbound и через syslog. Через syslog — лучший способ, так как не так тормозит работу Unbound. В указанном примере описана ротация логов средствами Unbound. Чтобы настроить логгирование через syslog, в конфигурации Unbound нужно включить параметр:

Источник

Настройка Logrotate

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

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

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

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

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

Настройка Logrotate

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

Читайте также:  Net and windows installer

sudo yum install logrotate

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

sudo apt install logrotate

Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/. Вы можете размещать все настройки logroatae прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /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:

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

Выводы

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

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

Источник

Оцените статью