- Установка и настройка Logrotate в Linux
- Зачем нужна ротация логов
- Установка logrotate
- Примеры настроек Logrotate
- Logrotate и Cron
- Заключение
- 📑 Ротация логов — logrotate
- POPSuL:
- Для самых маленьких: ротация логов и с чем ее едят
- Ротация логов в Linux и FreeBSD с помощью logrotate
- Установка
- Настройка
- Запуск вручную
- Автоматический запуск
Установка и настройка 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.
Теперь допустим, что при выполнении ротации вам требуется запуск собственной команды. Для этого пропишите строку с этой командой между директивами 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.
Источник
📑 Ротация логов — logrotate
Ротация логов — logrotate. В Ubuntu, да и во всех Linux, сама система, сервисы и программы все значимые события записывают в файлы журналов или лог-файлы, которые используются для диагностики ошибок, определения причины сбоев, получения статистики, а иногда и для работы других программ или сервисов. Обычно файлы логов хранятся в директории /var/log.
Включение или отключение функции ведения логов, перечень событий, которые должны записываться в логи, названия лог-файлов и другая информация обычно задается в конфигурационных файлах сервиса или программы.
Некоторые сервисы и программы записывают в лог-файлы достаточно много информации и они распухают на глазах. Для ограничения бесконтрольного роста лог-файлов существует специальный сервис — logrotate, который осуществляет ротацию логов через заданный отрезок времени и удаляет ставшие ненужными старые файлы.
Основная функция logrotate заключается в периодической замене старых логов новыми. Logrotate может быть настроен на ежедневную, еженедельную или ежемесячную ротацию. Кроме того, можно задать размер файла, по достижении которого файл будет ротирован. В зависимости от настроек архив логов может храниться как в сжатом, так и в несжатом виде. Обычно logrotate выполняется в качестве каждодневного задания (cron).
Базовые настройки logrotate хранятся в конфигурационном файле /etc/logrotate.conf. По умолчанию, в Ubuntu 14.04 он выглядит так:
Обычно устанавливаемые пакеты записывают информацию о ротации своих логов (каким образом Logrotate будет работать с тем или иным лог файлом) в директорию /etc/logrotate.d, но далеко не все и не всегда оптимальную. Иногда получается бесконтрольный рост лог-файлов, который приводит к неприятным последствиям. Особенно это важно при работе с vds/vps с небольшим объемом дисковой памяти.
Например утилита fail2ban при установке формирует конфигурационный файл /etc/logrotate.d/fail2ban с содержимым:
Русскими комментариями раскрыты все основные директивы. Всего допустимых директив в конфигурационном файле очень много (более 40). Подробнее о них можно узнать из man logrotate.
Для немедленного применения изменений можно выполнить:
Для проверки внесенный изменений можно запустить команду (никаких действий с логами не будет выполнено):
Источник
POPSuL:
Для самых маленьких: ротация логов и с чем ее едят
Опять одиноко, хоть и хорошо провел вторую половину дня…
Сегодня мы поговорим о том что такое ротация логов, с чем ее едят и насколько она вкусна. Ротация — процесс обновления чего‐то , круговорот чего‐то . Но что такое ротация логов?
Ротация логов — это процесс архивирования логов, удаление старых логов и все из этого вытекающее. Оно нужно для того, чтобы внезапно у вас не забилось все место на HDD/SSD различными логами, ну, а так же для того, чтобы не было слишком много одинаковых и очень больших лог‐файлов . При ротации логов происходит несколько вещей:
- Файл журнала архивируется и сохраняется под именем log.log.0
- Более старые логи переименовываются (log, log,0 в log.log.1 и т.д.)
- Самые старые логи удаляются
- Очищается «главный» файл лога
- Перезапускается демон пишуший логи если это необходимо
Порядок всех этих действий может быть произвольным, и зависит от напрямую от реализации утилиты для ротации логов. В linux‐based системах зачастую используется утилита logrotate которая запускается по умолчанию (покрайней мере в ubuntu) кроном раз в день и делает свою грязную работу. В bsd системах, насколько мне известно, используется newsyslog для той же самой работы, но т.к. freebsd я видел всего несколько раз в жизни — ничего полезного я сказать о ней не могу :).
Logrotate имеет свой конфигурационный файл /etc/logrotate.conf в котором описаны глобальные параметры, а так же, подключаются различные дополнительные конфиги из /etc/logrotate.d в которых описаны действия для различных демонов. Например, конфиг nginx выглядит примерно так:
Конфигурационные файлы logrotate человекопонятные. В частности, в этом конфигурационном файле описываются правила для файлов попадающийх под glob‐шаблон /var/log/nginx/*.log:
- missingok — говорит о том, что если файла нету то все ок
- daily — проводить ротацию ежедневно
- rotate X — хранить X файлов
- compress — сжимать старые файлы
- delaycompress — не сжимать последний лог
- notifempty — не архивировать пустые файлы
- create ACCESS_MODE USER GROUP — с какими правами создавать архивы
- sharedscripts — какая то фишка для prerotate и postrotate:)
- prerotate, postrotate — что сделать перед ротацией и после нее.
Что меня побудило написать эту статью? Написать эту статью я решил потому что обнаружил то, что на моих серверах которые я админю логи apache и nginx внезапно стали помещаться в домашнюю директорию пользователя, и имели различные размеры (от пары мегабайт до нескольких гигов), и конечно же ротация логов не была перенастроена, и так вот логами было съедено приличный объем дискового пространства.
Мораль сей басни такова: работает — не трогай, блядь, и все будет работать отлично! А если хочется потрогать — ССЗБ 🙂
Источник
Ротация логов в 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:
* в моем случае, это было /usr/sbin/logrotate.
Получив путь, создаем правило в cron:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/logstash
* в данном примере в 00:00 будет запускаться logrotate и чистить логи с нашей настройкой для logstash-forwarder.
Источник