opened image

Как ограничить размер папки /var/log (logrotate)

В ОС Linux, почти все программы и сервисы, которые работают в фоне, Apache, Nginx, MySQL и т.д., пишут свое состояние, результат работы и ошибки в лог файлы. Расположение логов размещено в стандартной папке /var/log.  Если на сервере очень много сайтов, или же не верно настроены сервисы, сайты имеют множество ошибок, данная папка будет быстро наполняться и может "забить" все свободное место на сервере. 

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

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

В большинстве дистрибутивов данная утилита установлена по умолчанию. Версию можно проверить коммандой:
 

logrotate --version



Если у вас не установлен logrotate, то его можно установить следующими коммандами:

На Ubuntu:

 

 

 

apt install logrotate

 


На Centos:

 

 

 

 

yum install logrotate

 



Конфигурационные файлы logrotate размещены:

 

 

 

 

/etc/logrotate.conf и каталоге /etc/logrotate.d

 


В файле /etc/logrotate.conf размещены общие настройки, по умолчанию. 


В папке /etc/logrotate.d/ - размещены конфигурационные файлы, программ, сервисов, ротацию логов которых мы будем осуществлять. 


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



И так, допустим нам необходимо сделать ротацю логов для vestacp. Как видим для нее уже автоматически создан файл конфигурации со стандартными настройками. 


Разберем директивы:

/usr/local/vesta/log/*.log - это путь к файлам которые необходимо ротировать. * - указывает на то что будут зачищены все файлы в данной папке /usr/local/vesta/log с расширением .log 

missingok - не писать сообщение об ошибке, если файл журнала отсутствует.
notifempty - не менять файл журнала, если он пуст.
size 30k - гворить о том что, пока размер лога не превысит 30k он не будет ротироваться. (Можно выставить свое значение)
yearly - ротация раз в год. Это отменяет значение по weekly по молчанию. (Посмотрим еще раз)



create 0600 root root - создает файл после ротирования с правами 0600 владельцем и групой root.

Ниже приведены остальные директивы, которые можно использоваться для настройки ротации. Множество других директив можно посмотреть по коммнанде: 

 

 

 

 

man logrotate

 


Добавим в стандартный файл:

rotate 2 - таким образом будут сохраняться 2 старых журнала. Что отменяет значение по умолчанию rotate 4
daily -  ротация раз в день. Это отменяет значение по умолчанию, один раз в неделю weekly.
Добавим compress - что бы сжимать ротированные файлы. (В данном случае будет использоваться gzip, это будет добавлять к файлам .gz)

Теперь нужный нам конфиг выглядит так:


Эти и другие значения, которые описаны в man logrotate,  вы можете добавить в другой нужный вам файл в папке /etc/logrotate.d/ или же подправить те которые уже есть.

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

После создания/изменения можем его запустить коммандой:

 

 

 

 

logrotate -f  [путь к файлу конфигурации]

 


Теперь вы можете добавить/изменить нужные конфиги, что бы не забивалось свободное место на сервере.

Безперебойной вам работы.