Поиск по сайту:

Как настроить Logrotate в Linux (чтобы на вашем сервере не было места)


Большинство служб в Linux создают файлы журналов, обычно хранящиеся в /var/log/. Это всего лишь простые текстовые файлы, но они могут стать очень, очень большими — до такой степени, что вам может не хватить места на вашем сервере.

Что делает Logrotate?

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

Размер ваших файлов будет зависеть от службы, и вы захотите соответствующим образом настроить logrotate. Если вы хотите узнать, сколько места каждый сервис занимает в журналах, вы можете использовать команду du :

du -h /var/log/ | sort -hr

Почти все файлы журналов будут находиться в /var/log/, поэтому du суммирует все файлы журналов и отображает их в удобном списке (любезно предоставлено sort -hr для человекочитаемого):

Это показывает только каталоги, поэтому вам нужно будет использовать ls -sh , чтобы найти размеры отдельных файлов.

Обычно такие вещи, как веб-серверы (apache2, nginx и т. д.) и другие приложения, с которыми активно взаимодействуют, создают множество файлов журналов, хотя точный размер будет зависеть от того, сколько данных они на самом деле записывают на диск.

Установка Logrotate (если у вас его еще нет)

По умолчанию вам, вероятно, не нужно ничего делать для настройки logrotate, так как он установлен по умолчанию во многих дистрибутивах, а сервисы, которые генерируют много файлов журналов (nginx, apache и т. д.), обычно имеют предварительно настроенную конфигурацию logrotate.

Вы можете проверить, установлен ли logrotate с помощью:

which logrotate

Или установите его из менеджера пакетов вашего дистрибутива, если это не так. Для систем на основе Debian, таких как Ubuntu, это будет:

sudo apt-get install logrotate

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

Как работает логротейт

Хотя logrotate будет предварительно настроен для популярных сервисов, таких как nginx и apache2, вы можете настроить конфигурацию вручную или отредактировать конфигурацию по умолчанию.

Глобальная конфигурация для logrotate хранится в /etc/logrotate.conf, но вы переопределите большую ее часть с помощью файлов конфигурации для каждого приложения, хранящихся в /etc/logrotate.d/  каталог. Давайте взглянем на конфигурацию nginx по умолчанию в /etc/logrotate.d/nginx, которую вы можете использовать в качестве шаблона для добавления новых приложений в logrotate:

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then 
                        run-parts /etc/logrotate.d/httpd-prerotate; 
                fi 
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}

Первая строка запускает блок и сообщает logrotate, какие файлы искать. Подстановочный знак *.log соответствует любым файлам, оканчивающимся на расширение .log , в папке журнала nginx. Вы также можете указать здесь несколько каталогов, чтобы включить их в одинаковую конфигурацию.

еженедельно журналы будут чередоваться раз в неделю. Если вы хотите чередовать их в зависимости от размера, вы можете вместо этого использовать size 25M , чтобы чередовать их, как только они достигнут определенного предела, 25 мегабайт в этом примере.

missingok  предотвратит выдачу logrotate ошибок, если файл журнала будет удален чем-либо, кроме logrotate.

rotate 52  сохранит 52 различных файла журнала. В этом случае, поскольку он будет меняться раз в неделю, logrotate будет хранить файлы журналов за целый год, прежде чем удалять старые. Вы можете изменить это значение на rotate 4, чтобы хранить файлы журналов только за месяц.

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

notifempty  – это еще один флаг проверки, гарантирующий, что logrotate запускается только в том случае, если в него записываются новые файлы журналов. Флаг создать создает эти новые файлы журналов с определенными разрешениями. Синтаксис: создать [режим] [владелец] [группа].

Вы должны убедиться, что они соответствуют любым настройкам ваших текущих файлов журнала, что вы можете сделать с помощью ls -la:

Обратите внимание, что вам потребуется преобразовать режим в восьмеричный, поэтому -rw-r----- преобразуется в 0640. Здесь владельцем nginx является www-data, а группой — adm.

sharedscripts указывает, что хуки prerotate и postrotate будут запускаться только один раз за ротацию, а не один раз для каждого ротируемого файла журнала. Эти крючки представляют собой сценарии, которые вы можете вызывать до и после вращения. По умолчанию они запускают несколько сценариев для настройки nginx для переключения файлов журнала. Если служба, которую вы настраиваете, не может загружать новые файлы журналов в горячем режиме, вам нужно остановить и перезапустить ее в этих перехватчиках. Однако хук не должен взаимодействовать с сервисом; например, вы можете использовать хук prerotate для резервного копирования файлов журналов на AWS S3 с помощью s3cmd, прежде чем они будут удалены.

Logrotate сам управляет запуском, поэтому вам не нужно беспокоиться о запуске службы при загрузке или настройке задания cron. Просто поместите файлы конфигурации для каждого приложения в /etc/logrotate.d/ и больше никогда не беспокойтесь о журналах.