• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Управление логами с помощью LogRotate в Ubuntu 22

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

Оглавление

Организация управления файлами журналов в Ubuntu

При запуске любого из многочисленных процессов операционной системы Ubuntu создается журнал для фиксации всех изменений, происходящих во время работы программы. Эти журналы необходимо периодически изменять на новые, а уже заполненные, архивировать и помещать в соответствующие места на диске. То есть, можно выделить несколько основных операций над указанными данными:

  • Внесение записей в соответствующий журнальчик;
  • Контроль уровня заполняемости;
  • Создание нового журнальчика;
  • Архивирование заполненного;
  • Перемещение архива.

Для выполнения указанных операций предусмотрено использование специального программного обеспечения (ПО), в частности программу LogRotate. Для основных дистрибутивов Linux эта программа устанавливается автоматически и выполняет свои задачи без вмешательства Администратора. Для организации правильной работы программы предусмотрено наличие определенной среды и настроек, которые «указывают» программе, как именно она должна работать. К первому уровню такой среды, в частности, относится главный конфигурационный файл /etc/logrotate.conf, в котором прописаны общие операции, которые программа должна выполнять над данными любого процесса.

Второй уровень среды для работы LogRotate образуют конфигурационные файлы для каждого из основных системных процессов, таких, например, как apt, bootlog, wtmp и других. Эти файлы находятся в специальном системном каталоге /etc/logrotate.d и имеют названия, согласно названиям системных процессов. Таким образом, этот уровень более детализирован, имеет более высокий уровень приоритетности и касается отдельно каждого из процессов.Второй уровень среды для работы LogRotate образуют конфигурационные файлы для каждого из основных системных процессов, таких, например, как apt, bootlog, wtmp и других. Эти файлы находятся в специальном системном каталоге /etc/logrotate.d и имеют названия, согласно названиям системных процессов. Таким образом, этот уровень более детализирован, имеет более высокий уровень приоритетности и касается отдельно каждого из процессов. Конечно, можно внести изменения в любой из конфигурационных файлов любого процесса и скорректировать работу программы LogRotate. Более того, можно создать по своему усмотрению файл конфигурации для любого процесса и поместить его в указанный системный каталог. В этом случае файлы журналов будут храниться в каталоге /var/log/new-app, где new-app – название нового процесса. Конечно, можно внести изменения в любой из конфигурационных файлов любого процесса и скорректировать работу программы LogRotate. Более того, можно создать по своему усмотрению файл конфигурации для любого процесса и поместить его в указанный системный каталог. В этом случае файлы журналов будут храниться в каталоге /var/log/new-app, где new-app – название нового процесса.

Третий уровень работы программы LogRotate обусловлен наличием конфигурационных файлов и настройками для отдельного пользователя системы. В таком случае главный файл среды будет находиться в домашнем каталоге определенного пользователя по адресу /home/user/logrotate.conf, где user – логин пользователя. А файлы журналов будут храниться по адресу /home/user/logs и иметь расширение .log. Но такая среда должна быть подготовлена ??администратором системы, иначе программа LogRotate будет принимать во внимание только первые два уровня программной среды, которые в большинстве своем настраиваются самой ОС Ubuntu.

Настройка автоматической ротации журналов для отдельных процессов

Сначала просмотрим номер версии установленной программы LogRotate и дополнительную информацию о ней. Для этого введем в терминале команду:

$ logrotate --version

Просмотр версии и другой информации о LogRotate

Итак, версия программы – 3.14.0. Теперь посмотрим дату создания главного файла конфигурации и установленные для него права доступа:

$ ls -l /etc/logrotate.conf

Проверка информации о файле конфигурации LogRotate

Файл создан 21 января 2019 года. Просмотрим содержимое файла с помощью соответствующей команды:

$ cat /etc/logrotate.conf

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

просмотр содержимого файла конфигурации

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

$ ls -l /etc/logrotate.d

Просмотр содержимого файла logrotate.d

Здесь также отображена дата их создания и права доступа. Теперь, например, рассмотрим содержимое файла конфигурации для сервиса ufw. Это инструментарий для отладки и управления брандмауэром (Uncomplicated Firewall) в ОС Ubuntu и Debian. Введем в терминале:

$ cat /etc/logrotate.d/ufw

Просмотр содержимого файла ufw

Кроме набора параметров для работы LogRotate, здесь также указан путь к месту сохранения файлов журналов, или логов - /var/log/ufw.log.

Наладим автоматическую ротацию для нашего процесса под названием new-app. Для этого нам нужно будет выполнить следующие действия:

  • Cоздать файл конфигурации для процесса в системном каталоге logrotate.d;
  • Cоздать каталог для сохранения файлов журналов;
  • Протестовать созданную среду и убедиться, что она работает

Создание конфигурационного файла для new-app. Создадим файл конфигурации нового процесса с помощью текстового редактора. Файл содержит требуемый набор параметров, а также путь к хранению файлов журналов. Текст будет выглядеть следующим образом:

/var/log/new-app/*.log {
	daily
	missingok
	rotate 3
	compress
	notifempty
	create 0640 www-data www-data
	sharedscripts
	postrotate
		systemctl reload new-app
	endscript
}

Команда для виклику редактора:

$ sudo nano /etc/logrotate.d/new-app

После внесения изменений сохраним файл с помощью клавиш ctrl+O. Таким образом, в файле конфигурации мы указали, что в каталоге может храниться не более трех старых журналов (параметр rotate); файлы должны архивироваться (параметр compress); новые файлы должны создаваться с правами доступа 0640 (параметр create). Скрипт, ограниченный командами postrotate и endscript, указывает на то, что при обновлении системы процесс new-app будет автоматически перезагружаться.

Редактирование файла  logrotate.d с помощью редактора nano

Тестирование создаваемой среды для процесса new-app. Используем команду

$ mkdir /var/log/new-app

Тест создаваемой серды для new-app

Тестирование создаваемой среды для процесса new-app. Используем команду logrotate з ключем --debug:

$ sudo logrotate /etc/logrotate.conf --debug

Тест создаваемой среды через команду debug

На изображении видно, что в системном каталоге logrotate.d появился новый сервис new-app, который мы создали. Ниже можно посмотреть результат его обработки командой, где, в частности, указано, что пустой файл не спасается.

Проверка файла logrotate.d после создания процесса new-app

Завершающее окно вывода команды выглядит следующим образом:

Завершающее окно вывода результата теста.

Настройка управления логами для отдельного пользователя

Порядок действий будет подобен предыдущему варианту, за исключением того, что здесь необходимо настраивать задачи cron для запуска программы LogRotate.

Создадим файл конфигурации пользовательской системы с именем new_user и введем в него следующий текст:

/home/new_user/logs/*.log {
	hourly
	missingok
	rotate 24
	compress
	create
}

Запустим редактор и внесем изменения, после чего закроем его (ctrl+O):

$ nano /home/new_user/logrotate.conf

Редактироввание файла logrotate.conf

Создадим каталог для хранения журналов, а также файл журнала access.log:

$ mkdir /home/new_user/logs
$ touch /home/new_user/logs/access.log

Создание каталога для хранения логов.

Протестуем созданную среду и убедимся, что все отлажено:

$ logrotate /home/new_user/logrotate.conf --state /home/new_user/logrotate-state –verbose

Параметр --verbose детализирует действия, связанные с программой Logrotate.

Тест созданной серды

Просмотрим содержимое файла состояний logrotate-state:

$ cat /home/new_user/logrotate-state

Проверка фиксации изменений в файле logrotate-state

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

С помощью сервиса cron настроим задачу для автоматического ежедневного запуска программы Logrotate для текущего системного пользователя:

$ crontab –e

Затем откроется окно редактора, установленного по умолчанию, с файлом настроек задач. Добавим к нему строчку:

12 * * * * /usr/sbin/logrotate /home/new_user/logrotate.conf --state /home/new_user/logrotate-state

и сохраним изменения (ctrl+O). Указанная строка настраивает cron на запуск задания на 12 минуте каждого времени суток.

Настройка запуска задания каждые сутки на 12-й минуте

Дата-центр FREEhost.UA предлагает выделенные сервера различных конфигураций по самым выгодным ценам в Украине. Наши услуги включают базовое администрирование 24/7. Все сервера есть в наличие и могут быть поставлены на протяжении нескольких часов. Приглашаем к использованию.

Подписывайтесь на наш телеграмм-канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш канал YouTube на youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

Напишите Об этом в комментариях, мы с удовольствием ответим и обсуждаем Ваши замечания и предложения.

Дата: 11.08.2022
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA