ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как управлять Log-файлами с LogRotate на Ubuntu 16.04

Как управлять Log-файлами с LogRotate на Ubuntu 16.04

Введение

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

Logrotate устанавливается по умолчанию на Ubuntu 16.04, и настроен для обработки потребности ротации логов всех установленных пакетов, в том числе rsyslog, процессора системного журнала по умолчанию.

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

Предпосылки

Это руководство предполагает, что у вас есть сервер Ubuntu 16.04, с SUDO пользователем с включенной поддержкой некорневого пользователя, как описано в начальной настройке сервера с Ubuntu 16.04.

Logrotate доступен на многих других дистрибутивах Linux, но настройки по умолчанию могут быть совершенно разными. Другие разделы этого руководства будут по-прежнему применяться до тех пор, пока ваша версия LogRotate похожа на Ubuntu 16,04. Выполните шаг 1, чтобы определить версию LogRotate.

Войдите на свой сервер, как SUDO пользователь.

Определение версии LogRotate

Если вы используете не-Ubuntu сервер, сначала убедитесь, что Logrotate установлен, попросив его информацию о версии:

logrotate --version

 

Вывод
logrotate 3.8.7

Если Logrotate не установлен, вы получите сообщение об ошибке. Пожалуйста, установите программное обеспечение с помощью менеджера пакетов вашего дистрибутива Linux.

Если установлен Logrotate, но номер версии существенно отличается, то может возникнуть проблемы с конфигурацией, описанной в этом руководстве. Обратитесь к документации по вашей конкретной версии LogRotate, прочитав страницу man:

man logrotate

 

Далее мы рассмотрим структуру конфигурации LogRotate по умолчанию на Ubuntu.

Изучение конфигурации Logrotate

Информация о конфигурации 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.

Далее, мы создадим конфигурационный файл для обработки журналов для вымышленной службы.

Пример настройки конфигурации

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

  1. Создайте новый файл конфигурации Logrotate и поместить его в каталог /etc/logrotate.d/. Он будет работать ежедневно, как пользователь root вместе со всеми другими стандартными заданиями LogRotate.
  2. Создайте новый конфигурационный файл и запустите его с настройками LogRotate по умолчанию в Ubuntu. Это только действительно необходимо, если вам нужно запустить LogRotate как не-root пользователь, или если вы хотите сделать ротацию журналов чаще, чем ежедневно (конфигурация hourly в /etc/logrotate.d/ будет неэффективной, так как установка системы Logrotate работает только один раз в день).

Давайте пройдем через эти два варианта с некоторыми примерами установок.

Добавление конфигурации в каталог /etc/logrotate.d/

Мы хотим настроить ротацию логов для вымышленного веб-сервера, который ставит access.log и error.log в каталог /var/log/example-app/. Он работает как www-data в качестве пользователя и группы.

Чтобы добавить конфигурацию каталог /etc/logrotate.d/, сначала откройте новый файл:

sudo nano /etc/logrotate.d/example-app

 

Вот пример конфигурационного файла, который может обрабатывать эти журналы:

/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 по умолчанию.

Создание конфигурации LogRotate

В этом примере мы имеем приложение, которое работает под пользователем Andreyex, генерация журналов, которые хранятся в каталоге /home/andreyex/logs/. Мы хотим сделать ротацию этих журналы ежечасно, поэтому мы должны установить его за пределами структуры /etc/logrotate.d, представленной в Ubuntu.

Во-первых, мы создадим конфигурационный файл в нашем каталоге. Откройте его в текстовом редакторе:

nano /home/andreyex/logrotate.conf

 

Затем вставьте следующую конфигурацию:

/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

 

Откроется текстовый файл. Возможно, в файле уже есть некоторые комментарии, объясняющие ожидаемый основной синтаксис. Переместите курсор на новую пустую строку в конец файла и добавьте следующее:

crontab
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 в терминале.

 

Exit mobile version