• База знань
  • /
  • Блог
  • /
  • 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. Більш того, можна створити на свій розсуд файл конфігурації для будь-якого процесу та помістити його у вказаний системний каталог. У цьому випадку файли журналів будуть зберігатися у каталозі /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. Для цього нам потрібно буде виконати наступні дії:

  • Створити файл конфігурації для процесу у системному каталозі logrotate.d;
  • Створити каталог для збереження файлів журналів;
  • Протестувати створене середовище та переконатися, що воно працює.

Створення файлу конфігурації для 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

Створення каталогу для логів. Для цього використаємо відповідну команду:

$ 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