Назад | Перейти на главную страницу

Logrotate: ротация всех файлов журналов определенного размера и ежечасная ротация

Мой файл logrotate на ubuntu запускается ежедневно. Я хочу убедиться, что файлы журнала меняются каждый час, чтобы больше не возникало ошибок переполнения диска. Итак, мой файл logrotate находится в папке cron.daily, достаточно ли просто переместить его в cron.hourly?

Я также хочу сохранить максимальный размер файла журнала на 5 МБ, но я не уверен, что изменить в logrotate.cnf.

Содержимое logrotate.cnf (без разрывов строк):

еженедельная ротация 4 создать include /etc/logrotate.d

/ var / log / wtmp {missingok ежемесячно создавать 0664 root utmp rotate 1}

/ var / log / btmp {missingok ежемесячно создавать 0660 root utmp rotate 1}

Я знаю, что должен использовать размер 5M, а где мне это писать? Хорошо ли, что первая строка предназначена для всех файлов журналов, а вторая и третья - только для wtmp и btmp? Итак, если моя логика верна, я должен написать размер 5M по всей линии, я прав?

Чтобы это имело какой-либо эффект, сценарий cron должен запускаться по крайней мере так часто, как вы хотите вращать файлы. Несмотря на то, что в настоящее время вы запускаете сценарий один раз в день (из cron.daily), он будет изменять файлы только один раз в неделю ( weekly ключевое слово в скрипте logrotate устанавливает значение по умолчанию, оно заменяется на ежемесячный в случае wtmp и btmp).

Версия logrotate на моем ближайшем Linux-сервере работает только с ежедневной продолжительностью (хотя установка ограничения размера заставит файлы вращаться чаще). При этом для большинства серверов ротация журналов нарушает работу; если ваша цель - сэкономить место, может быть целесообразнее хранить меньше файлов истории и сжимать их:

daily rotate 2 compress size 5M create include /etc/logrotate.d

/var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 }
/var/log/btmp { missingok monthly create 0660 root utmp rotate 1 }

(Обратите внимание, что изменения в первой строке не будут иметь никакого эффекта, если они будут отменены в другом месте.)

Не элегантный способ, который сработал для меня - ежечасно запускать logrotate в зависимости от размера файла, сделайте следующее

1) Скопируйте скрипт Logrotate из папки cron.daily в папку cron.hourly

cp /etc/cron.daily/logrotate   /etc/cron.hourly/ 

2) Обновите файл /etc/cron.hourly/logrotate; прокомментируйте и замените последнюю строку следующим образом

#/usr/sbin/logrotate /etc/logrotate.conf
/usr/sbin/logrotate  /etc/logrotate.d/logstash 

3) обновите соответствующую запись / etc / crontab следующим образом (при необходимости)

#17 *   * * *   root    cd / && run-parts --report /etc/cron.hourly
59 *    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.hourly )

4) Наконец, напишите следующую логику в вашем файле конфигурации logrotate (обновите пути и размер папок в соответствии с вашими требованиями)

 cat /etc/logrotate.d/logstash
    /var/log/logstash/*.log /var/log/logstash/*.err  {
    hourly
    size 10M
    rotate 4
    copytruncate
    compress
    #delaycompress
    missingok
    notifempty }