- Ротация логов в Linux и FreeBSD с помощью logrotate
- Установка
- Настройка
- Запуск вручную
- Автоматический запуск
- Установка и настройка Logrotate в Linux
- Зачем нужна ротация логов
- Установка logrotate
- Примеры настроек Logrotate
- Logrotate и Cron
- Заключение
- linux-notes.org
- Установка Logrotate для управления логами в Unix/Linux
- Установка Logrotate для управления логами в Unix/Linux
- Установка Logrotate для управления логами в Debian/Ubuntu
- Установка Logrotate для управления логами в CentOS/Fedora/RedHat
- Установка Logrotate для управления логами в Mac OS X
- Настройка Logrotate для управления логами в Unix/Linux
- One thought on “ Установка Logrotate для управления логами в Unix/Linux ”
- Добавить комментарий Отменить ответ
Ротация логов в 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.
Источник
Установка и настройка 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.
Источник
linux-notes.org
Установка Logrotate для управления логами в Unix/Linux
Logrotate – это программа которая дает возможность управлять логами в системы Unix/Linux. Утилита выполняет автоматическую ротацию, удаление или сжатие логов. Logrotate помогает сохранять место на диске. Утилиту довольно просто настроить и сейчас, вы убедитесь в этом.
Установка Logrotate для управления логами в Unix/Linux
Я приведу наглядные примеры использования на различных Unix/Linux ОС.
Установка Logrotate для управления логами в Debian/Ubuntu
Обновим пакеты в ОС:
Для установки используем:
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в CentOS/Fedora/RedHat
Обновим пакеты в ОС:
Для установки используем:
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в Mac OS X
Выполняем установку HomeBrew — Установка Homebrew на Mac OS X и, выполним поиск пакета:
Для установки, служит команда:
После чего, переходим к настройке и запуску logrotate.
Настройка Logrotate для управления логами в Unix/Linux
Конфигурационный файл можно найти в :
Мой конфиг выглядит следующим образом:
Логи уровня приложения (заменяющие настройки по умолчанию в случае необходимости) хранятся в:
Я не буду заморачиваться и пропишу один конфиг для всей ротации ( можно настраивать для каждого отдельно):
Я беру все логи которые имеют любое название и заканчиваются на .log и отслеживаю их в интервале — месяц ( служит директива monthly). Если превышает размер лога (size 100M), то выполнить ротацию Ротация происходит после 7 дней ( файлы сохраняются 7 дней). Лог-файлы я сжимаю ( директива compress). Опция delaycompress задерживает выполнение сжатия до следующей ротации логов, но она работает только с параметром — compress. Параметр missingok дает возможность обрабатывать следующий лог если какой-то отсутствует и не выдавая об ошибке. С опций notifempty можно запретить ротацию пустых файлов. После ротации логов, все будет удалено и чтобы выполнялось сохранение логов, нужно создать файлы снова. Так вот, create позволяет это делать.
Если в конфиге используется опция size и интервал ротации (например, monthly), то именно опция size превзойдет опцию интервала ротации, — это означает что что логи будут ротироваться, как только размер файла превысит указанное значение, не дожидаясь истечения срока.
После чего, можно выполнить проверку того, что создали ( без его выполнения, только тест):
Если отладка не показала ничего плохого, можно запустить ротацию:
Вместо того, чтобы сжимать логи, можно переименовать их. Для этого есть директива dateext. Если наш формат даты отличается от yyyymmdd по умолчанию, мы можем указать его с помощью dateformat:
Так же, можно по окончанию, отправить письмо на указанный емейл:
Если не хотите чтобы создавались пустые файлы после ротации, используйте:
Не откладывать сжатие файла на следующий цикл
Если не хотите отправлять старые логи на почту, то юзайте:
Сохранять все логи в одной и той же папке:
Интервалы для ротации:
Размеры для ротации (после превышения указанного размера, будет выполнятся ротация):
Можно посылать произвольные команды после выполнения ротации, например:
Данную утилиту, нужно запускать:
Можно автоматизировать и закинуть «logrotate» команду в crontab.
PS: По умолчанию, это возможно уже сделано:
Например, файл конфигурации для apache2 выглядит следующим образом:
Ротация производится раз в неделю. При отсутствии лога — не выводить ошибку. Сохранять 2 последних ротированных фалов и конечно же, сжимать их, но для пустых файлов никаких действий не выполнять. После того, как ротация прошла, создавать пустой файл с указанными правами.
Опции Logrotate
Наиболее часто использующиеся опции:
-d — Данная опция, дает возможность включить отладочный режим, который использует «-v» параметр. В этом режиме, ничего не будет выполнятся и применятся.
-f, —force — Данная опция, дает возможность принудительно запустить logrotate и запустить ротацию логов. Иногда бывает полезным, например — когда добавили новый функционал в конфиг или старые логи удалены вручную и чтобы не создавать новые файлы вручную, можно запустить логротейт с данной опцией.
-m, —mail command — Позволяет указывать команду для отправки лог-файлов по почте и она должна содержать входные параметры:
- заголовок письма
- получателя письма
После выполнения, логи будут отправлены на указанное мыло ( команда читает данные со стандартного входа STDIN), а командой по умолчанию — /usr/bin/mail -s.
-s, —state statefile — Данная опция позволяет задавать произвольный файл с состоянием. Это хорошо использовать тогда, когда в системе имеется несколько пользователей, которые работают ( запускают) с logrotate. По умолчанию, данный фал сохраняется в /var/lib/logrotate/status.
—usage — Показать мануал по использованию данной утилиты.
-v, —verbose — Данная опция, позволяет выводит все происходящее на экран ( весь вывод).
Вот и все, статья «Установка Logrotate для управления логами в Unix/Linux» завершена!
One thought on “ Установка Logrotate для управления логами в Unix/Linux ”
После ротации лога, демон продолжает писать в этот же файл, т.е. был logfile.log, сейчас logfile.log.1 и сам лог по прежнему пишется в него. При это создан logfile.log который остаётся пустым.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Источник