Пример разделения файлов на группы
Смоделируем ситуацию, когда у Вас в папке «Мои документы» есть папка с фотографиями, есть документы которые часто меняются и есть пару документов которые меняются редко, но есть вероятность того что старые версии могут когда-нибудь пригодится. Для редко изменяемых документов можно конечно сразу делать новые версии прямо в рабочей папке, но надеяться на свою внимательность в этом вопросе опасно, и, кроме того, если речь идет о компьютере например членов Вашей семьи, то проконтролировать этот процесс будет сложно вдвойне.
Самым простым решением здесь было бы разбить все эти файлы на три условные группы (фотографии, простые документы, редко изменяемые важные документы), разложить их по разным папкам и создавать цепочку версий в бэкапах для каждой группы файлов индивидуально.
В этом случае, для фотографий может быть определена отдельная папка бэкапа, в которой достаточно хранить копию последней версии фото и «уходящие в прошлое» папки только с фотографиями которые например были удалены (т.е. не дублировать всю папку, а оставлять копии только тех файлов которые были удалены или изменены). См. здесь описание системы, которая позволяет делать избирательный отбор, сохраняя только удаленные и изменяемые файлы.
Для непредсказуемо изменяющихся файлов документов видимо имеет смысл сохранять их все без анализа, сделав цепочку папок с полным архивом длиннее (т.е. сохранять большее количество прошлых версий всей папки).
Для файлов, которых немного, и имена их точно известны (и точно известно, что они не будут меняться), можно настроить бэкап так, чтобы эти файлы выбирались и анализировались скриптом по именам — так же в отдельную папку с отдельной цепочкой версий и индивидуальной ротацией.
Т.е. в этом примере мы получаем не один общий бекап, в котором ротация старых версий всей папки бэкапа происходит для всех одинаково, а три разных цепочки бекапов, для каждой из которых ротация будет происходить индивидуально.
Итак:
- В бэкап-папках со старыми версиями фотографий (файлов большого размера) будут сохраняться только отдельные файлы, копируемые туда только после анализа изменений.
- Папки с бэкапами «непрогнозируемой кучи» будут скорее всего хранить общую копию для всех файлов сразу, и скорее всего цепочка бэкапов будет создаваться каждый день на заданный период в прошлое.
- Для редко изменяемых файлов у которых известны заранее имена, папки с их старыми версиями могут иметь большие промежутки времени между собой.
Таким образом не будет бессмысленного дублирования больших файлов (например фото), версии редко изменяемых файлов будут сохраняться дольше, а ротация бэкапов для каждой группы будет настроена индивидуально.
КСТАТИ! Про избирательный бэкап с дополнительным резервированием только измененных и удаленных от предыдущей версии бэкапа, см. отдельную заметку: Бэкап с сохранением старых версий файлов и папок
Настройка
Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD — /usr/local/etc/logrotate.d/).
К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:
vi /etc/logrotate.d/logstash
/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). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.
Ротация логов Apache
Ротация логов – это процесс, подразумевающий отключение устаревших или слишком объёмных лог-файлов и их архивирование (на установленный период времени). Apache может вносит в лог довольно большие объёмы данных, следовательно, во избежание заполнения дискового пространства необходимо настроить ротацию логов.
Ротация логов может быть очень простой (как, например, отключение слишком больших логов), а может иметь и более сложную конфигурацию (то есть, функционировать как система архивирования и хранения старых логов).
Рассмотрим методы настройки ротации логов Apache.
Ротация логов вручную
Перемещать логи во время работы Apache нельзя. То есть, чтобы переместить в архив устаревшие или заполненные логи и заменить их новыми, нужно перезапустить сервер.
Это можно сделать вручную. Для этого нужно переместить устаревшие файлы, а затем, перезапустив Apache, обновить настройки веб-сервера и заставить его использовать новые логи.
Ниже приведён пример из документации Apache. Возможно, понадобится добавить в начало этих команд sudo.
Эти команды переместят файлы, перезапустят сервер и скажут ему подождать 600 секунд. Таким образом Apache сможет использовать старые лог-файлы, чтобы завершить регистрацию старых запросов. В течение этого времени новые запросы будут записаны в новые лог-файлы.
Имейте в виду: ротация логов вручную очень ненадёжна в больших серверных средах.
Утилита logrotate
По умолчанию система Ubuntu настраивает ротацию логов при помощи утилиты logrotate.
Данная программа может выполнять ротацию логов при соблюдении определенных критериев. Просмотреть события, включающие Logrotate для ротации логов, можно в файле /etc/logrotate.d/apache2:
В нём находится несколько параметров logrotate
Обратите внимание на первую строку:. Это значит, что logrotate будет выполнять ротацию только тех логов, которые находятся в /var/log/apache2. Имейте это в виду, если вы выбрали другой каталог для хранения в конфигурации Apache
Имейте это в виду, если вы выбрали другой каталог для хранения в конфигурации Apache
Это значит, что logrotate будет выполнять ротацию только тех логов, которые находятся в /var/log/apache2. Имейте это в виду, если вы выбрали другой каталог для хранения в конфигурации Apache.
Как видите, логи ротируются еженедельно. Также тут есть раздел кода, перезапускающий Apache после ротации:
Эти строки автоматически перезапускают веб-сервер Apache после завершения ротации.
Примечание: К сожалению, настройки данного файла не охвачены в данном руководстве.
Ротация логов по каналам
Использование каналов вместо файлов – простой способ передать обработку вывода программе логирования. Это также решает проблему ротации логов, поскольку ротация может выполняться с помощью программы на серверной стороне (а не самим сервером Apache).
Чтобы логи обрабатывались программой логирования, принимающей стандартный вывод, замените следующую строку следующим образом:
Apache запустит программу логирования во время загрузки и перезапустит её в случае ошибки или сбоя.
Для ротации логов можно использовать разные программы, но по умолчанию Apache поставляется с rotatelogs. Чтобы настроить эту программу, используйте:
Аналогичную конфигурацию можно создать и для других программ.
ОПИСАНИЕ
logrotate разработан для облегчения администрирования систем, которые порождают большое количество файлов журналов происходящих в системе событий. Утилита предоставляет автоматическое обращение, сжатие, удаление и отправление по электронной почте журналов системы. Каждый файл журнала сообщений может обрабатываться ежедневно, еженедельно, ежемесячно, либо когда увеличится в размерах выше указанного предела. Обычно logrotate выполняется в порядке ежедневного задания службы cron. В течении одного дня он не будет несколько раз изменять файл журнала сообщений, если критерий обработки для этого журнала не основан на размере файла и logrotate не запускается каждый день многократно; если не применяется опция -f или -force. В командной строке может быть задано любое количество конфигурационных файлов. Каждый последующий конфигурационный файл может переназначить настройки заданные в предыдущих файлах; таким образом, для logrotateважен порядок следования файлов конфигурации. Широко распространено применение единственного конфигурационного файла, включающего в себя другие используемые файлы настроек. О том, как это осуществить с помощью директивы include, смотрите ниже. Если в командной строке задан каталог, то все файлы, находящиеся в этом каталоге, используются в качестве конфигурационных. Если аргументы командной строки не заданы, то logrotate выведет информацию о версии программы, авторских правах и краткую справку об использовании. В случае возникновения любых ошибок при обработке журналов logrotate закончит работу с ненулевым значением кода возврата.
Установка Logrotate для управления логами в Unix/Linux
Я приведу наглядные примеры использования на различных Unix/Linux ОС.
Установка Logrotate для управления логами в Debian/Ubuntu
Обновим пакеты в ОС:
# apt-get update -y
Для установки используем:
# apt-get install logrotate -y
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в CentOS/Fedora/RedHat
Обновим пакеты в ОС:
# yum update -y
Для установки используем:
# yum install logrotate -y
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в Mac OS X
Выполняем установку HomeBrew — Установка Homebrew на Mac OS X и, выполним поиск пакета:
$ brew search logrotate
Для установки, служит команда:
$ brew install logrotate
После чего, переходим к настройке и запуску logrotate.
Конфигурация logrotate
Конфигурация logrotate разделена на части. Основная часть обычно хранится в файле /etc/logrotate.conf. В этом файле могут присутствовать секции для ротации логов, а также директива «include /etc/logrotate.d», подключающая конфигурационные файлы из директории /etc/logrotate.d. Таким образом, для создания нового задания ротации вам достаточно создать конфигурационный файл и поместить его в эту директорию. Название файла желательно задавать такое же, как и название сервиса, логи которого будут ротироваться.
Вот пример конфигурационного файла /etc/logrotate.conf:
# rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }
Как вы понимаете, ротироваться могут не только файлы логов, но и любые другие файлы. К примеру, можно таким образом делать ежедневные резервные копии какого-то определенного файла. Но ротация логов — это именно та основная задача, которую изначально решает программа, и решает хорошо.
Каждый файл в директории /etc/logrotate.d может включать одну или несколько секций. Каждая секция выглядит в общем виде так:
название-файла-лога { параметры ротации }
Параметры ротации — это именно то, что обеспечивает гибкость ротации. У logrotate достаточно много опций, но их можно разбить на несколько групп. Вот опции, которые могут быть использованы в конфигурационных файлах:
Настройка Logrotate
Logrotate — это популярная утилита, поэтому в большинстве дистрибутивов она поставляется по умолчанию. Вы можете убедиться, что программа установлена в вашем дистрибутиве, попытавшись ее установить. Например, в CentOS:
sudo yum install logrotate
Или в Ubuntu и основанных на ней дистрибутивах:
sudo apt install logrotate
Теперь, даже если утилита не была установлена, вы ее установите. Все основные настройки программы находятся в файле /etc/logrotate.conf, дополнительные настройки, касаемо правил и других возможностей могут быть размещены в папке /etc/logroate.d/. Вы можете размещать все настройки logroatae прямо в основном конфигурационном файле, будет более правильно, если настройки для каждого отдельного сервиса будут находиться в отдельном файле, в папке /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 /var/cron.daily/
Настройка Logrotate завершена, а вам осталось всего лишь расписать как будет выполняться ротация логов для каждого из журналов, которые занимают много места.
Настройка
Описание секции начинается с указания файлов над которыми будет производится ротация, а параметры указываются в фигурных скобах.
Можно указывать по маске:
/var/log/apache2/*.log { ... }
или конкретные файлы
/var/log/apache2/access.log /var/log/apache2/error.log { ... }
Ротацию можно производить по расписанию (ежедневно, еженедельно …) или по достижению определенного размера log-файлом — это взаимоисключающие параметры.
Параметр | Описание |
---|---|
rotate <число> | Количество хранимых файлов |
daily weekly monthly | Производить ротацию раз в день, неделю, месяц. Несовместимость: size |
size <байт> size 1000 size 100k size 1M |
Производить ротацию если log-файл превысил указанный размер. Несовместимость: daily, weekly, monthly |
start <число> | число с которого начнётся нумерация файлов |
compress | Архивировать файлы (по умолчанию gzip) |
nocompress | Отключает: compress |
delaycompress | Не сжимать ‘свеже’ созданный архив. Например access.log.1 не будет зжат. Зависимость: compress Несовместимость: nocompress |
create <права><владелец><группа> create 640 root root | После ротации создать пустой log-файл. Любые из этих атрибутов могут быть опущены, в этом случае вместо них для нового файла будут использованы атрибуты, имеющие те же значения, что и первоначальный log-файл |
nocreate | Не создавать пустой файл после ротации. Отключает: create |
copy | Создать копию оригинального log-файла, не изменяя его. Несовместимость: create |
nocopy | Отключает: copy |
copytruncate | Создать копию оригинального log-файла, а потом его ‘обнулить’. Таким образом сам файл не удаляется и не меняется его дескриптор. Несовместимость: create |
ifempty | Архивирует даже пустой файл (используется по умолчанию) |
notifempty | Не архивировать пустые файлы. Отключает: ifempty Несовместимость: size |
missingok | В случае отсутствия оригинального log-файла не вызовет ошибку |
nomissingok | В случае отсутствия оригинального log-файла вызовет ошибку. Отключает: missingok |
postrotate <команды> endscript | Строки, находящиеся между postrotate и endscript будут выполнены как sh скрипт после архивирования log-файла |
prerotate <команды> endscript | Аналогично postrotate, только действия будут выполнены до начала архивирования |
sharedscripts | Скрипты postrotate и prerotate будут выполнены только один раз в рамках своей секции. |
nosharedscripts | Отключает sharedscripts. Скрипты будут выполняются при ротации каждого log-файла, при определение /var/log/apache2/*.log скрипт будет выполнен столько раз сколько уникальных log-файлов будет находится в данной директории |
olddir <путь> | Перемещать архивные файлы в указанную директорию |
noolddir | Отключает olddir |
dateext | К имени файлов журналов добавляется дата (%Y%m%d), вместо номера |
su <user> <group> | Выполняется с правами указанного пользователя. Необходимо если ошибка: «because parent directory has insecure permissions», т.е. на директорию с логами, есть право на запись кроме root’a |
mail <[email protected]> | Отправляет ротированные логи на почту. Локально должна быть настроена MTA sendmail или т.п. |
nomail | Отключает mail |
Зачем нужна ротация логов
Если посмотреть содержимое /var/log в различных дистрибутивах Linux, мы увидим следующие файлы и поддиректории. У вас они могут отличаться в зависимости от запущенных в вашей системе служб и времени их работы.
# ls /var/log
Здесь мы видим, что некоторые имена логов заканчиваются на «log», как и можно предположить, а некоторые переименовываются в соответствии с датой (например, maillog-20190203) .
Если бы логи хранились вечно, в какой-то момент они бы заполнили всю файловую систему, где находится /var/log. Чтобы этого не произошло, можно воспользоваться полезной утилитой под названием logrotate для периодической очистки (ротации) логов.
Другими словами, logrotate переименовывает или сжимает файл лога при выполнении определенных условий (мы рассмотрим их чуть ниже), а следующее событие записывается в пустой файл. Кроме того, она удаляет «старые» файлы логов и сохраняет только более новые. Естественно, мы сами определяем критерии «старости» и периодичность очистки.
Опции, связанные с датами:
| | |
|-|-|
|dateext|Использовать в названии старых лог-файлов дату вместо номера. При использовании номера названия выглядят так: logfile.1.gz, logfile.2.gz и так далее|
|nodateext|Не использовать дату в названиях старых лог-файлов. Эта опция перегружает опцию dateext|
|dateformat форматная-строка|Указать форматную строку для даты, которая будет добавляться к названию лога. Форматная строка похожа на используемую в команде date, но допустимы только шаблоны %Y(четырехзначный номер года), %m(двузначный номер месяца), %d(двузначный номер дня месяца) и %s(unix time, количество секунд с 00:00 01.01.1970). Значение по умолчанию “-%Y%m%d”, минус также включен в шаблон, при задании шаблона его можно упустить. Нужно отметить, что logrotate использует сортировку для определения более старых файлов, которые необходимо удалить, поэтому строка даты должна учитывать корректную сортировку. Именно поэтому вначале пишется обычно год, затем месяц и только затем день.|
|dateyesterday|Использовать вчерашнюю дату при ротации. Таким образом, дата в названии файла будет соответствовать дате файла, который находится внутри архива|
Настройка автоматической архивации лог файлов с помощью logrotate
Логирование очень важный аспект системного администрирования. Но и не менее важным является и своевременное архивирование и удаление старых лог файлов. Для некоторых сервисов, таких как например веб-сервера, рост лог файлов происходит очень с большой скоростью и если не следить за изменением их размеров, то можно получить в итоге неработоспособную систему в которой все дисковое пространство будет забито лог файлами и сервер просто перестанет выполнять свои функции. Что бы избежать таких проблем необходимо использовать архивирование лог файлов и желательно автоматическое. Одной из самых популярных и простых утилит для выполнения таких задач является — logrotate. Она предназначена для автоматизации обработки журналов логов. Она может выполнять с ними различные действия в зависимости от условий и правил заданных в конфигурации. Можно сжимать лог файлы в архив, отправлять их в определенные директории или даже на другие сервера, когда эти файлы достугаю определенного размера или по прошествии заданного промежутка времени.
Так как logrotate очень популярна во множестве дистрибутивов она уже установлена.
Перейдем к ее настройке.
Logrotate запускается с помощью системного планировщика с указанием конфигурационного файла, обычно с интервалом — ежедневно
На примере дистрибутива Debian 9, запуск logrotate указан в файле /etc/cron.daily/logrotate
cat etc/cron.daily/logrotate
#!/bin/sh test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf
Конфигурационный файл /etc/logrotate содержит общие настройки для архивирования и содержит директиву «include» для включения других конфигурационных файлов по сервисам, это сделанно для удобства настройки и администрирования.
cat /etc/logrotate.conf
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we"ll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }
Настройка архивации для журналов описаны в секциях.
Описание секции начинается с указания файлов над которыми будет производится ротация, после в фигурных скобках указываютс параметры ротации. Можно указывать как несколько конкретных файлов, так и использовать маски.
/var/log/web/error.log /var/log/web/access.log { ............ }
/var/log/web/*.log { ........... }
Перейдем к параметрам ротации:
- rotate «число» — Количество хранимых архивированных файлов;
- daily, weekly, monthly — Интервал проведеня ротации (ежедневно,еженедельно, ежемесячно);
- size «числов (k,M)» — Производить ротацию файла если его размер превысит указанного (по-умолчанию размер указывается в байтах, возможно применять спец символы для обозначения килобайт и мегабайт);
- start «число» — Число с которого начнется нумерация архивных файлов;
- compress — Сжимить архивные файлы;
- nocompress — Отключает compress
- delaycompress — Не сжимать последний архивный файл;
- create «права» «владелец» «группа» — После ротации создать пустой лог файл с указанными правами, владельцем и группой, если параметры опущены то новый файл будет иметь такие же значения прав как и старый;
- ifempty — Архивировать даже пустой файл (используется по-умолчанию);
- noifempty — Не архивировать пустые файлы;
- postrotate «команда» endscript — После проведения ротации, выполнить команду указанную между ключевыми словами postrotate и endscript;
- prerotate «команда» endscript — Аналогично postrotate,только команда выполняется перед ротацией;
- missingok — Не вызывать ошибку в случае отсутствия оригинального файла;
- nomissingok — Вызывать ошибку при отсутствии оригинального файла;
- sharedscript — Если в одной секции указано несколько файлов, то postrotate и prerotate будут выполнены только один раз.
- olddir «путь» — Перемещать архивные файлы по указанному пути;
- dateext — К имени архивного файлв добавляется дата ротации в формате (%Y%m%d) вместо номера
Ротация лог файла на примере fail2ban
/var/log/fail2ban.log { weekly # еженедельно rotate 4 # хранить 4 архивных файла compress # выполнфть сжатие delaycompress # не сжимать последний архивный файл missingok # отсутствие оригинального файла не вызывает ошибку # Выполнение команды после ротации postrotate fail2ban-client flushlogs 1>/dev/null endscript # создание файла с правами 640 владельцем root и группой adm create 640 root adm }
ОПЦИИ
−?, −−help
Вывести справку по использованию.
−d, −−debug
Включить отладочный режим, так же это подразумевает опцию −v. В режиме отладки не будут производиться изменения в журналах и
файле состояния logrotate.
−f, −−force
Сообщает logrotate принудительно выполнить ротацию, даже если он не считает это необходимым. Иногда это полезно после
добавления новых записей в конфигурационный файл logrotate, или если старые файлы журналов были удалены вручную, так что будут созданы новые файлы и
журналирование продолжится корректно.
−m, −−mail <команда>
Сообщает logrotate какую команду использовать для отправки журналов. Эта команда должна принимать два аргумента: 1) тема
сообщения, и 2) получатель. Затем команда должна прочитать сообщение со стандартного ввода и отправить его получателю. По умолчанию в качестве команды отправки
используется /usr/bin/mail −s.
−s, −−state <файл_состояния>
Сообщает logrotate использовать другой файл состояния. Это полезно если logrotate запускается разными пользователями
для разных наборов журнальных файлов. По умолчанию файлом состояния является /var/lib/logrotate/status.
−−usage
Вывести короткую справку по использованию.
−v, −−verbose
Выводить сообщения во время ротации.
Options
Tag | Description |
---|---|
-v | Turn on verbose mode. |
-d | Turns on debug mode and implies -v. In debug mode, no changes will be made to the logs or to the logrotate state file. |
-f, —force | Tells logrotate to force the rotation, even if it doesn’t think this is necessary. Sometimes this is useful after adding new entries to logrotate, or if old log files have been removed by hand, as the new files will be created, and logging will continue correctly. |
-m, —mail | Tells logrotate which command to use when mailing logs. This command should accept two arguments: 1) the subject of the message, and 2) the recipient. The command must then read a message on standard input and mail it to the recipient. The default mail command is /bin/mail -s. |
-s, —state | Tells logrotate to use an alternate state file. This is useful if logrotate is being run as a different user for various sets of log files. The default state file is /var/lib/logrotate/sta- tus. |
-usage | Prints a short usage message. |
Опции, связанные с размером и существованием файла лога:
maxsize размер | Лог ротируется, когда его размер превысит указанный, еще до наступления следующего интервала ротации (daily, weekly, monthly, yearly). Поскольку такая ротация не зависит от времени, поэтому использовать в названии файла дату не имеет смысла. |
minsize размер | Лог ротируется, когда его размер больше указанного, но не ранее, чем наступает соответствующий временной интервал ротации (daily, weekly, monthly, yearly) |
size размер | Лог ротируется, когда его размер больше указанного количества байт. Если после размера указана буква k, размер считается в килобайтах, если M — в мегабайтах, если G — в гигабайтах. Например, 1G или 10M. |
ifempty | Ротировать файл лога, даже если он пуст. Используется по умолчанию. |
notifempty | Не ротировать файл лога, если он пуст. Перегружает опцию ifempty. |
missingok | Если файл лога отсутствует, перейти к следующему без сообщения об ошибке |
nomissingok | Если файл лога отсутствует, возникнет ошибка. Этот параметр установлен по умолчанию. |
Управление логированием[править]
Со временем объём логов растёт, и они занимают всё больше места на жёстком диске. Узнать объём имеющихся на текущий момент логов можно с помощью команды:
journalctl --disk-usage
Ротация логов
Настройка ротации логов осуществляется с помощью опций −−vacuum-size и −−vacuum-time.
Первая из них устанавливает предельно допустимый размер для хранимых на диске логов (в нашем примере — 1 ГБ):
journalctl --vacuum-size=1G
Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены.
Аналогичным образом работает опция −−vacuum-time. Она устанавливает для логов срок хранения, по истечении которого они будут автоматически удалены:
journalctl --vacuum-time=1years
-
Настройка ротации в конфигурационном файле. Настройки ротации логов можно также прописать в конфигурационном файле /еtc/systemd/journald.conf, который включает в числе прочих следующие параметры:
- SystemMaxUse= — максимальный объём, который логи могут занимать на диске;
- SystemKeepFree= — объём свободного места, которое должно оставаться на диске после сохранения логов;
- SystemMaxFileSize= — объём файла лога, по достижении которого он должен быть удален с диска;
- RuntimeMaxUse= — максимальный объём, который логи могут занимать в файловой системе /run;
- RuntimeKeepFree= — объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;
- RuntimeMaxFileSize= — объём файла лога, по достижении которого он должен быть удален из файловой системы /run.
Единицы измерения: K, M, G, T, P, E.
Что такое ротация журналов?
Ротация журналов — это процесс, который создает новые файлы журналов и архивирует и удаляет старые для экономии места на диске. Процесс переименовывает текущий файл журнала. Например, apport.log становится apport.log.1, и создается новый файл журнала apport.log для регистрации новых записей журнала. Старые файлы журналов обычно сжимаются и отображаются как apport.log.2.gz , apport.log.3.gz , apport.log.4.gz и т. Д.
Процесс ротации журналов упрощается с помощью утилиты logrotate . Это инструмент, который упрощает ротацию файлов журналов, а также архивирование и удаление старых, чтобы освободить место на диске. Таким образом, logrotate выполняет следующее:
- Создание новых файлов журналов после ротации старых.
- Архивирование старых файлов журналов.
- Удаление старых файлов журналов, которые были повернуты для экономии места.
Ротация журналов обычно активируется, когда размер файлов журнала увеличивается и превышает определенный предел.
Файлы конфигурации Logrotate
Logrotate запускается ежедневно как задание cron, просматривая различные файлы журналов, меняя их и очищая старые файлы журналов, как определено в файле конфигурации. Есть два основных источника конфигурации, на которые нужно обратить пристальное внимание:
/etc/logrotate.conf — это основной файл конфигурации для инструмента logrotate. Он содержит настройки по умолчанию и облегчает ротацию журналов для журналов несистемных пакетов. В частности, он используетдирективу include для извлечения конфигураций, расположенных в каталоге /etc/logrotate.d . Посмотрим на файл конфигурации.
$ cat /etc/logrotate.conf
Из показанной конфигурации файл /etc/logrotate.conf еженедельно меняет файлы журнала, как указано в строке 3 .
- Ст. 7 указывает, что файлы журнала принадлежат пользователю root и группе adm.
- 10 указывает, что выполняется резервное копирование файлов журнала всего за 4 недели, после чего более старые будут очищены или удалены, чтобы освободить место на диске.
- 13 инструктирует о создании нового файла журнала после ротации текущего файла журнала.
- Оператор include в строке 22 извлекает конфигурации файлов приложения, которые перечислены в каталоге /etc/logrotate.d.
/etc/logrotate.d — это каталог, содержащий конфигурацию logrotate установленных пакетов, файлы журналов которых требуют ротации журналов. Как правило, вы также можете найти файлы конфигурации системных инструментов, таких как apt & dpkg (для систем Debian), rsyslog, ufw и cups-daemon. Вот что вы найдете:
:~$ ls -l /etc/logrotate.d/ total 60 -rw-r--r-- 1 root root 120 Sep 5 2019 alternatives -rw-r--r-- 1 root root 126 Dec 4 20:25 apport -rw-r--r-- 1 root root 173 Apr 9 11:21 apt -rw-r--r-- 1 root root 91 Apr 1 10:49 bootlog -rw-r--r-- 1 root root 130 Jan 21 2019 btmp -rw-r--r-- 1 root root 181 Feb 17 08:19 cups-daemon -rw-r--r-- 1 root root 112 Sep 5 2019 dpkg -rw-r--r-- 1 root root 329 Feb 4 2019 nginx -rw-r--r-- 1 root root 94 Feb 8 2019 ppp -rw-r--r-- 1 root root 501 Mar 7 2019 rsyslog -rw-r--r-- 1 root root 677 Nov 29 02:08 speech-dispatcher -rw-r--r-- 1 root root 119 Mar 30 21:49 ubuntu-advantage-tools -rw-r--r-- 1 root root 178 Jan 21 22:16 ufw -rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades -rw-r--r-- 1 root root 145 Feb 19 2018 wtmp :~$
Давайте посмотрим на файл конфигурации инструмента диспетчера пакетов dpkg..
$ cat -n /etc/logrotate.d/dpkg
- monthly: указывает ротацию файлов журнала один раз в месяц.
- rotate 12: резервное копирование 12 старых файлов журнала
- compress: это означает, что повернутые файлы должны быть сжаты с использованием сжатия gzip по умолчанию с файлами журнала с расширением .gz.
- Create 644 root root: Создает новый файл журнала.
- missingok: Директива подавляет сообщения об ошибках в случае отсутствия файла журнала..
- notifempty: Bгнорирует ротацию файлов, если файл журнала пуст.