Centos / Linux настройка logrotate на максимальный размер файла для всех журналов
мы используем logrotate, и он работает ежедневно ... теперь у нас были некоторые ситуации, когда журналы значительно выросли (читай: gigbaytes) и убили наш сервер. Поэтому сейчас мы хотели бы установить максимальный размер журналов ....
могу ли я просто добавить это в logrotate.конф?
размер 50M
и будет ли он применяться ко всем файлам журнала? Или мне нужно установить это на основе журнала?
или любой другой совет?
(ps. Я поймите, что если вы хотите получать уведомления, журнал растет, как описано, и то, что мы хотим сделать, не идеально - но это лучше, чем не иметь возможности войти в систему больше, потому что нет свободного места)
спасибо, Шон
2 ответов
он определяет размер лог-файл для запуска вращения. Например size 50M
вызовет вращение журнала, как только размер файла будет 50 Мб или больше. Можно использовать суффикс M
за мегабайт k
в килобайтах и G
для гигабайт. Если суффикс не используется, он будет означать байты. Вы можете проверить пример в конце. Существует три директивы size
, maxsize
и minsize
. В соответствии с manpage:
minsize size
Log files are rotated when they grow bigger than size bytes,
but not before the additionally specified time interval (daily,
weekly, monthly, or yearly). The related size option is simi-
lar except that it is mutually exclusive with the time interval
options, and it causes log files to be rotated without regard
for the last rotation time. When minsize is used, both the
size and timestamp of a log file are considered.
size size
Log files are rotated only if they grow bigger then size bytes.
If size is followed by k, the size is assumed to be in kilo-
bytes. If the M is used, the size is in megabytes, and if G is
used, the size is in gigabytes. So size 100, size 100k, size
100M and size 100G are all valid.
maxsize size
Log files are rotated when they grow bigger than size bytes even before
the additionally specified time interval (daily, weekly, monthly,
or yearly). The related size option is similar except that it
is mutually exclusive with the time interval options, and it causes
log files to be rotated without regard for the last rotation time.
When maxsize is used, both the size and timestamp of a log file are
considered.
вот пример:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
вот объяснение для обоих файлов /var/log/httpd/access.log
и /var/log/httpd/error.log
. Они поворачиваются всякий раз, когда он растет более 100k в размере, и старые файлы журналов отправляются по почте (несжатые) в www@my.org
после прохождения 5 оборотов, а не удаляются. The sharedscripts
означает, что postrotate
скрипт будет выполняться только один раз (после сжатия старых журналов), а не один раз для каждого журнала, который вращается. Обратите внимание, что двойные кавычки вокруг первого имени файла в начале этого раздела позволяют logrotate вращать журналы с пробелами в имени. Нормальные правила цитирования оболочки применяются, с ,
и \
символы поддерживаются.
как упоминалось Zeeshan, параметры logrotate size
, minsize
, maxsize
триггеры для вращения.
чтобы лучше объяснить это. Вы можете запускать logrotate так часто, как вам нравится, но если не достигнуто пороговое значение, такое как размер файла или соответствующее время, журналы не будут повернуты.
параметры размера не гарантируют, что ваши повернутые журналы также имеют указанный размер. Чтобы они были близки к заданному размеру, необходимо достаточно часто вызывайте программу logrotate. Это очень важно.
для файлов журналов, которые создаются очень быстро (например, в сотнях МБ в день), если вы не хотите, чтобы они были очень большими, вам нужно будет часто вызывать logrotate! это очень важно.
поэтому, чтобы остановить заполнение диска файлами журналов с несколькими гигабайтами, вам нужно убедиться, что logrotate вызывается достаточно часто, иначе вращение журнала не будет работать так же хорошо, как вы хотеть.
на Ubuntu вы можете легко переключиться на почасовое вращение, переместив скрипт / etc / cron.ежедневно / logrotate к / etc / cron.почасовой/у logrotate
или добавить
*/5 * * * * /etc/cron.daily/logrotate
в файл/etc / crontab. Запускать каждые 5 минут.
на size
опция игнорирует ежедневные, еженедельные, ежемесячные параметры времени. Но minsize & maxsize учитывают это.
man-страница немного сбивает с толку. Вот мой объяснение.
minsize
вращается только тогда, когда файл достиг соответствующего размера и установленный период времени прошел. например minsize 50MB + ежедневно
Если файл достигает 50 МБ до ежедневного времени, он будет продолжать расти до следующего дня.
maxsize
будет вращаться, когда журнал достигнет установленного размера или прошло соответствующее время.
например, maxsize 50MB + ежедневно.
Если файл 50MB, и мы не на на следующий день журнал будет повернут. Если файл составляет всего 20 МБ, и мы переходим на следующий день, то файл будет повернут.
size
будет вращаться, когда размер журнала>. Независимо от того, указан ли почасовой / ежедневный / еженедельный / ежемесячный. Итак, если у вас есть размер 100M - это означает, что когда ваш файл журнала > 100M, журнал будет повернут, если logrotate запущен, когда это условие истинно. После его поворота основной журнал будет равен 0, а последующий запуск будет ничего не делать.
так в случае op. Specficially 50MB max я бы использовал что-то вроде следующего:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
что означает, что он создаст 8hrs журналов max. И было бы 8 из них не более 50 МБ каждый. Поскольку он говорит, что он получает несколько гигабайт каждый день и предполагает, что они накапливаются с довольно постоянной скоростью, и используется maxsize, он в конечном итоге будет близок к максимуму, достигнутому для каждого файла. Таким образом, они, вероятно, будут близки к 50MB каждый. Учитывая том, который они строят, ему нужно будет убедиться, что logrotate запускается достаточно часто, чтобы соответствовать целевому размеру.
так как я поставил там ежечасно, нам понадобится logrotate, чтобы работать как минимум каждый час. Но так как они накапливаются, чтобы сказать 2 гигабайта в день, и мы хотим 50MB... предполагая постоянную скорость, которая составляет 83MB в час. Таким образом, вы можете себе представить, что если мы будем запускать logrotate каждый час, несмотря на установку maxsize в 50, в этом случае мы получим журнал 83MB. Поэтому в этом случае установите запуск на каждые 30 минут или меньше должно хватить.
убедитесь, что logrotate запускается каждые 30 минут.
*/30 * * * * /etc/cron.daily/logrotate