Инструкция по настройке управлением лог-файлами с помощью Logrotate на Ubuntu 16.04.
Что это такое?
Logrotate - это системная утилита, которая управляет автоматической ротацией и сжатием лог-файлов. Если в процессе длительной работы сервера файлы не были ротированы, сжаты и периодически не удалялись, то рано или поздно они могут занять весь доступный объем памяти.
Logrotate устанавливается по умолчанию на Ubuntu 16.04 и настроена для обработки потребности ротации журналов для всех установленных пакетов и приложений, включая .
Примечание: Logrotate доступна и во многих других дистрибутивах Linux, но конфигурация по умолчанию может быть совсем другой.
Первоначальные требования
Действия в инструкции выполняются от имени пользователя root или с правами sudo.
.
Проверка версии Logrotate
Если вы используете сервер, отличный от Ubuntu, убедитесь, что утилита установлена, запросив информацию:
logrotate --version
Ожидаемый результат:
logrotate 3.8.7
Если Logrotate не установлена, вы получите сообщение об ошибке.
Установить программное обеспечение, можно используя диспетчер пакетов:
sudo apt install logrotate
Примечание: если у вас установлена другая версия утилиты, то при настройке могут возникнуть проблемы.
Настройка Logrotate
Информация о конфигурации Logrotate обычно может быть найдена в двух местах на Ubuntu:
По умолчанию logrotate.conf настроит еженедельную (weekly) ротацию
лог-файлов, принадлежащие пользователю root и группе syslog (su root
syslog), с сохранением четырех лог-файлов (rotate 4) и новых пустых
файлов журнала созданный после того, как текущий обновится (create).
Рассмотрим конфигурационный файл Logrotate /etc/logrotate.d для пакетного менеджера apt:
cat /etc/logrotate.d/apt
Содержимое файла:
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Этот файл содержит конфигурационные блоки для двух разных файлов
журнала в каталоге /var/log/apt/: term.log и history.log. Оба блока
имеют одинаковые опции. Любые параметры, не заданные в этих
конфигурационных блоках, наследуют значения по умолчанию или значения,
установленные в файле /etc/logrotate.conf. Параметры, установленные для
журналов apt:
Доступно еще множество опций для конфигурации. Подробнее обо всех опциях можно прочитать в руководстве с помощью команды:
man logrotate
Конфигурация примера
Для управления лог-файлами приложений, не настроенных по умолчанию, существует 2 способа:
Примечание: почасовая настройка в файле
/etc/logrotate.d/ будет игнорироваться, поскольку утилита запускается в
системе только один раз в день.
Создание конфигурации в /etc/logrotate.d/
В качестве примера настроим обновления для вымышленного веб-сервера,
который пишет логи в файлы access.log и error.log,расположенные в
каталоге /var/log/example-app/. Он работает от имени пользователя
www-data и группы www-data.
Для начала создайте новый файл с помощью текстового редактора vi:
sudo vi /etc/logrotate.d/example-app
Ниже приведен пример файла конфигурации Logrotate, который может обрабатывать логи:
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Описание некоторых директив:
После настройки конфигурации в соответствии с требованиями, можно выполнить тестирование с помощью команды:
sudo logrotate /etc/logrotate.conf --debug
В результате будет вызвана утилита logrotate, с указанием на стандартный файл конфигурации в режиме отладки.
В консоль будет выводиться информация, о том какие файлы logrotate
обрабатывает в данный момент. Стандартная настройка Logrotate будет
выполняться один раз в день, включая новую конфигурацию.
Создание независимой конфигурации Logrotate
В этом примере приложение работает от имени пользователя sammy,
генерирующее лог-файлы, которые хранятся в /home/sammy/logs/. Для того
чтобы ротировать эти файлы ежечасно, нужно выполнить настройки в
каталоге отличном от /etc/logrotate.d.
Создадим файл конфигурации в нашем домашнем каталоге. Откройте его с помощью текстового редактора:
vi /home/sammy/logrotate.conf
Вставьте следующее содержимое:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Сохраните внесенные изменения. Данная конфигурация будет обновлять файлы ежечасно.
Чтобы проверить настройки, создадим тестовый файл:
cd ~
mkdir logs
touch logs/access.log
Далее нужно указать файл состояния для утилиты logrotate. Этот файл
записывает, какое действие logrotate выполняла последний раз, когда
запускалась, чтобы корректно выполнить следующее действие. Исполните
команду:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Ожидаемый вывод:
reading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
Из сообщения видно, утилита logrotate видит этот лог впервые. Если
посмотреть содержимое файла состояния, будет видно, что Logrotate
записала некоторую информацию о запуске:
cat /home/sammy/logrotate-state
Ожидаем результат:
logrotate state -- version 2
"/home/sammy/logs/access.log" 2018-1-22-16:0:0
Чтобы Logrotate запускалась каждый час, необходимо настроить планировщик cron. Откройте crontab пользователя:
crontab -e
В конец открывшегося файла добавьте следующую строку:
15 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Созданная запись соответствует задаче, которая будет выполняться на 15-й минуте ежечасно. Сохраните изменения и закройте файл.
Что это такое?
Logrotate - это системная утилита, которая управляет автоматической ротацией и сжатием лог-файлов. Если в процессе длительной работы сервера файлы не были ротированы, сжаты и периодически не удалялись, то рано или поздно они могут занять весь доступный объем памяти.
Logrotate устанавливается по умолчанию на Ubuntu 16.04 и настроена для обработки потребности ротации журналов для всех установленных пакетов и приложений, включая .
Примечание: Logrotate доступна и во многих других дистрибутивах Linux, но конфигурация по умолчанию может быть совсем другой.
Первоначальные требования
Действия в инструкции выполняются от имени пользователя root или с правами sudo.
.
Проверка версии Logrotate
Если вы используете сервер, отличный от Ubuntu, убедитесь, что утилита установлена, запросив информацию:
logrotate --version
Ожидаемый результат:
logrotate 3.8.7
Если Logrotate не установлена, вы получите сообщение об ошибке.
Установить программное обеспечение, можно используя диспетчер пакетов:
sudo apt install logrotate
Примечание: если у вас установлена другая версия утилиты, то при настройке могут возникнуть проблемы.
Настройка Logrotate
Информация о конфигурации Logrotate обычно может быть найдена в двух местах на Ubuntu:
- /etc/logrotate.conf - этот файл содержит некоторые настройки по
умолчанию и устанавливает ротацию для нескольких журналов, которые не
принадлежат никаким системным пакетам. Он также использует оператор
include для настройки конфигурации из любого файла в каталоге
/etc/logrotate.d. - /etc/logrotate.d/ - в этой директории любые пакеты, которые вы
устанавливаете, будут размещать свою конфигурацию Logrotate. При
стандартной установке у вас уже должны быть файлы для базовых системных
инструментов, таких как apt, dpkg, rsyslog и т.д.
По умолчанию logrotate.conf настроит еженедельную (weekly) ротацию
лог-файлов, принадлежащие пользователю root и группе syslog (su root
syslog), с сохранением четырех лог-файлов (rotate 4) и новых пустых
файлов журнала созданный после того, как текущий обновится (create).
Рассмотрим конфигурационный файл Logrotate /etc/logrotate.d для пакетного менеджера apt:
cat /etc/logrotate.d/apt
Содержимое файла:
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Этот файл содержит конфигурационные блоки для двух разных файлов
журнала в каталоге /var/log/apt/: term.log и history.log. Оба блока
имеют одинаковые опции. Любые параметры, не заданные в этих
конфигурационных блоках, наследуют значения по умолчанию или значения,
установленные в файле /etc/logrotate.conf. Параметры, установленные для
журналов apt:
- rotate 12 - сохранить двенадцать последних лог-файлов;
- monthly - обновлять один раз в месяц;
- compress - сжать обновленные файлы. По умолчанию используется gzip и
форматируется в формат .gz. Команда сжатия может быть изменена с
помощью параметра compresscmd; - missingok - не записывать сообщение об ошибке, если лог-файл отсутствует;
- notifempty - не ротировать пустой лог-файл.
Доступно еще множество опций для конфигурации. Подробнее обо всех опциях можно прочитать в руководстве с помощью команды:
man logrotate
Конфигурация примера
Для управления лог-файлами приложений, не настроенных по умолчанию, существует 2 способа:
- Создайте новый файл конфигурации Logrotate и поместите его в
/etc/logrotate.d/. Созданная конфигурация будет выполняться ежедневно от
имени пользователя root вместе со всеми другими стандартными заданиями
Logrotate. - Создайте новый файл конфигурации и запустите его за пределами
директории Logrotate по умолчанию. Это может быть необходимо, если вам
нужно запустить Logrotate в привилегированном режиме, или если вы хотите
обновлять логи чаще, чем раз в день.
Примечание: почасовая настройка в файле
/etc/logrotate.d/ будет игнорироваться, поскольку утилита запускается в
системе только один раз в день.
Создание конфигурации в /etc/logrotate.d/
В качестве примера настроим обновления для вымышленного веб-сервера,
который пишет логи в файлы access.log и error.log,расположенные в
каталоге /var/log/example-app/. Он работает от имени пользователя
www-data и группы www-data.
Для начала создайте новый файл с помощью текстового редактора vi:
sudo vi /etc/logrotate.d/example-app
Ниже приведен пример файла конфигурации Logrotate, который может обрабатывать логи:
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Описание некоторых директив:
- create 0640 www-data www-data - после ротирования создается новый
пустой файл журнала с указанными разрешениями (0640), владельцем
(www-data) и группой (www-data); - sharedscripts - эта опция означает, что любые скрипты, добавленные в
конфигурацию, выполняются только один раз за запуск после сжатия
файлов, а не для каждого отдельного обновленного файла. Поскольку наша
конфигурация будет соответствовать двум лог-файлам (access.log и
error.log), скрипт, указанный в postrotate, будет запускаться только 1
раз; - postrotate to endscript - скрипт в этом блоке будет запущен после
того, как файл журнала обновится. В примере приложение перезагружается.
Обратите внимание, что скрипты в postrotate выполняются до сжатия логов,
т.к. оно может занять много времени, а ваше программное обеспечение
сможет немедленно переключится на новый файл.
После настройки конфигурации в соответствии с требованиями, можно выполнить тестирование с помощью команды:
sudo logrotate /etc/logrotate.conf --debug
В результате будет вызвана утилита logrotate, с указанием на стандартный файл конфигурации в режиме отладки.
В консоль будет выводиться информация, о том какие файлы logrotate
обрабатывает в данный момент. Стандартная настройка Logrotate будет
выполняться один раз в день, включая новую конфигурацию.
Создание независимой конфигурации Logrotate
В этом примере приложение работает от имени пользователя sammy,
генерирующее лог-файлы, которые хранятся в /home/sammy/logs/. Для того
чтобы ротировать эти файлы ежечасно, нужно выполнить настройки в
каталоге отличном от /etc/logrotate.d.
Создадим файл конфигурации в нашем домашнем каталоге. Откройте его с помощью текстового редактора:
vi /home/sammy/logrotate.conf
Вставьте следующее содержимое:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Сохраните внесенные изменения. Данная конфигурация будет обновлять файлы ежечасно.
Чтобы проверить настройки, создадим тестовый файл:
cd ~
mkdir logs
touch logs/access.log
Далее нужно указать файл состояния для утилиты logrotate. Этот файл
записывает, какое действие logrotate выполняла последний раз, когда
запускалась, чтобы корректно выполнить следующее действие. Исполните
команду:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Ожидаемый вывод:
reading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
Из сообщения видно, утилита logrotate видит этот лог впервые. Если
посмотреть содержимое файла состояния, будет видно, что Logrotate
записала некоторую информацию о запуске:
cat /home/sammy/logrotate-state
Ожидаем результат:
logrotate state -- version 2
"/home/sammy/logs/access.log" 2018-1-22-16:0:0
Чтобы Logrotate запускалась каждый час, необходимо настроить планировщик cron. Откройте crontab пользователя:
crontab -e
В конец открывшегося файла добавьте следующую строку:
15 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Созданная запись соответствует задаче, которая будет выполняться на 15-й минуте ежечасно. Сохраните изменения и закройте файл.