Logrotate это системная утилита, которая управляет автоматическим делением и сжатием файлов журналов. Если c файлами журналов не сделать ротацию, сжать, и периодически не обрезать, то они могли бы в конечном счете, занять все свободное дисковое пространство системы.
Logrotate устанавливается по умолчанию на Ubuntu 16.04, и настроен для обработки потребности ротации логов всех установленных пакетов, в том числе rsyslog, процессора системного журнала по умолчанию.
В этой статье мы рассмотрим конфигурацию LogRotate по умолчанию, а затем настроим ротацию логов для вымышленных пользовательских приложений.
Это руководство предполагает, что у вас есть сервер Ubuntu 16.04, с SUDO пользователем с включенной поддержкой некорневого пользователя, как описано в начальной настройке сервера с Ubuntu 16.04.
Logrotate доступен на многих других дистрибутивах Linux, но настройки по умолчанию могут быть совершенно разными. Другие разделы этого руководства будут по-прежнему применяться до тех пор, пока ваша версия LogRotate похожа на Ubuntu 16,04. Выполните шаг 1, чтобы определить версию LogRotate.
Войдите на свой сервер, как SUDO пользователь.
Если вы используете не-Ubuntu сервер, сначала убедитесь, что Logrotate установлен, попросив его информацию о версии:
logrotate --version
logrotate 3.8.7
Если Logrotate не установлен, вы получите сообщение об ошибке. Пожалуйста, установите программное обеспечение с помощью менеджера пакетов вашего дистрибутива Linux.
Если установлен Logrotate, но номер версии существенно отличается, то может возникнуть проблемы с конфигурацией, описанной в этом руководстве. Обратитесь к документации по вашей конкретной версии LogRotate, прочитав страницу man:
man logrotate
Далее мы рассмотрим структуру конфигурации LogRotate по умолчанию на Ubuntu.
Информация о конфигурации LogRotate в целом можно найти в двух местах на Ubuntu:
По умолчанию файл logrotate.conf настроен на еженедельную ротацию журналов (weekly), с лог-файлами, находящихся в собственности пользователя root и группа системный журнал (su root syslog), с сохраненными четырьмя файлами журналов (rotate 4), и новые файлы пустого журнала создаются после того, как только один производит ротацию (create),
Давайте посмотрим на файл конфигурации пакета LogRotate, в файле /etc/logrotate.d. cat для утилиты пакета 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 в командной строке, чтобы вызвать страницу руководства LogRotate.
Далее, мы создадим конфигурационный файл для обработки журналов для вымышленной службы.
Для управления файлами журналов для приложений сторонних услуг расфасованных и предварительно сконфигурированных систем, у нас есть два варианта:
Давайте пройдем через эти два варианта с некоторыми примерами установок.
Мы хотим настроить ротацию логов для вымышленного веб-сервера, который ставит access.log и error.log в каталог /var/log/example-app/. Он работает как www-data в качестве пользователя и группы.
Чтобы добавить конфигурацию каталог /etc/logrotate.d/, сначала откройте новый файл:
sudo nano /etc/logrotate.d/example-app
Вот пример конфигурационного файла, который может обрабатывать эти журналы:
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Некоторые из новых директив конфигурации в этом файле:
После настройки конфигурации в соответствии с вашими потребностями, сохраните его в файле /etc/logrotate.d, вы можете проверить это, выполнив следущее:
sudo logrotate /etc/logrotate.conf --debug
При этом вызывается logrotate, указывается на стандартный файл конфигурации и включается режим отладки.
Информация будет распечатана о том, какие файлы журнала Logrotate обрабатывается и что бы он сделал с ними. Если все выглядит хорошо, все завершиться удачно. Стандартное задание Logrotate будет выполняться один раз в день и включать новую конфигурацию.
Далее мы попробуем установить программу установки, которая вообще не использует конфигурацию Ubuntu по умолчанию.
В этом примере мы имеем приложение, которое работает под пользователем Andreyex, генерация журналов, которые хранятся в каталоге /home/andreyex/logs/. Мы хотим сделать ротацию этих журналы ежечасно, поэтому мы должны установить его за пределами структуры /etc/logrotate.d, представленной в Ubuntu.
Во-первых, мы создадим конфигурационный файл в нашем каталоге. Откройте его в текстовом редакторе:
nano /home/andreyex/logrotate.conf
Затем вставьте следующую конфигурацию:
/home/andreyex/logs/*.log { hourly missingok rotate 24 compress create }
Сохраните и закройте файл. Все эти параметры мы видели на предыдущих шагах, но давайте подведем итог: такая конфигурация будет вращать файлы ежечасно, сжимая и сохраняя двадцать четыре старых журнала и создавая новый файл журнала для замены повернутого.
Необходимо настроить конфигурацию в соответствии с вашим приложением, но это хорошее начало.
Чтобы проверить, что он работает, давайте сделаем файл журнала:
cd ~ mkdir logs touch logs/access.log
Теперь у нас есть пустой файл журнала в нужном месте, давайте запустим команду logrotate.
Поскольку журналы принадлежат AndreyEx нам не нужно использовать sudo. Однако нам нужно указать файл состояния. Этот файл записывает, что logrotate видел и сделал в прошлый раз, так что он знает, что делать при следующем запуске. Это обрабатывается для нас при использовании установки Ubuntu Logrotate (ее можно найти в /var/lib/logrotate/status), но нам нужно сделать это вручную.
Мы попросим Logrotate поместить файл состояния прямо в наш домашний каталог для этого примера. Мы можем указать где угодно, что доступно и удобно:
logrotate /home/andreyex/logrotate.conf --state /home/andreyex/logrotate-state --verbose
reading config file /home/andreyex/logrotate.conf Handling 1 logs rotating pattern: /home/andreyex/logs/*.log hourly (24 rotations) empty log files are rotated, old logs are removed considering log /home/andreyex/logs/access.log log does not need rotating
—verbose распечатает подробную информацию о том, что делает Logrotate. В этом случае, похоже, он ничего не делал. Это первый раз, когда LogRotate видит этот файл журнала, так, насколько это известно, файлу ноль часов, и к нему не должно быть применена ротация.
Если мы посмотрим на файл состояния, мы увидим, что Logrotate записал информацию о запуске:
cat /home/andreyex/logrotate-state
logrotate state -- version 2 "/home/andreyex/logs/access.log" 2017-11-7-19:0:0
Logrotate отметил, что он видел журналы, и когда он последний раз рассматривал их вращение. Если запустить эту же команду, один час спустя, журнал будет повернут, как ожидалось.
Если вы хотите заставить LogRotate производить ротацию файла журнала, тогда надо использовать флаг —force:
logrotate /home/andreyex/logrotate.conf --state /home/andreyex/logrotate-state --verbose --force
Это полезно при тестировании postrotate и других сценариев.
Наконец, нам нужно настроить задание cron для запуска Logrotate каждый час. Откройте crontab пользователя:
crontab -e
Откроется текстовый файл. Возможно, в файле уже есть некоторые комментарии, объясняющие ожидаемый основной синтаксис. Переместите курсор на новую пустую строку в конец файла и добавьте следующее:
14 * * * * /usr/sbin/logrotate /home/andreyex/logrotate.conf --state /home/andreyex/logrotate-state
Эта задача будет выполняться на 14 — й минуте каждого часа, каждый день. Работают в основном те же команды logrotate, с которыми мы столкнулись ранее, хотя мы расширили logrotate, его полный путь /usr/sbin/logrotate, просто, для безопасности. Это хорошая практика, быть столь же явным, как это возможно при написании задания cron.
Сохраните файл и выйдите. Это позволит установить cron и наша задача будет выполняться по заданному расписанию.
Если мы вновь войдем в наш каталог примерно через час, мы должны найти сжатый файл журнала access.log.1.gz (или, .2.gz если вы запускали LogRotate с флагом —force).
В этой статье мы проверили нашу версию LogRotate, изучили конфигурацию Ubuntu LogRotate по умолчанию и настроили два разных типа пользовательских конфигураций. Чтобы узнать больше о командной строке и параметрах конфигурации, доступных для LogRotate, вы можете прочитать страницу руководства, выполнив man logrotate в терминале.