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