Перейти до вмісту
Блог › Налаштування ПЗ › Можливості LogRotate для керування логами в Linux-системах

Можливості LogRotate для керування логами в Linux-системах

Запуск будь-якої програми чи процесу в середовищі Linux супроводжується створенням журналу для фіксації всіх змін, пов’язаних із їхньою роботою. Логами називають записи, що вносяться до цих журналів. Ця інформація використовується сервером для організації своєї роботи й служить відправною точкою для пошуку можливих збоїв у системі.

Однак із часом журнали логів збільшуються в обсязі, тому виникає потреба в їх обслуговуванні. LogRotate входить до складу базового програмного забезпечення (ПЗ) Linux-систем і призначена для виконання цих функцій. Розглянемо її роботу більш детально.

Механізм керування логами в Linux-подібних системах

Програма LogRotate працює в автоматичному режимі й, по суті, не потребує налаштування. Проте для забезпечення більшої гнучкості у керуванні логами та зручності для адміністратора системи її все ж доводиться конфігурувати під свої потреби.

Для цього розробниками передбачено кілька рівнів керування, які розглянемо нижче. Але спочатку вкажемо сам алгоритм операцій, що забезпечують підтримку системи фіксації змін і її обслуговування.

Обслуговування системи логів зводиться до додавання до журналів нових записів, а також забезпечення їхньої автоматичної ротації. Послідовність дій при цьому приблизно така:

  • створення порожнього журналу одразу після ініціалізації нового процесу;
  • внесення до журналу записів під час виникнення будь-якої події, пов’язаної із запущеним процесом;
  • архівування файлу журналу у разі його заповнення;
  • розміщення створеного архіву у заздалегідь визначеному місці.

Як уже зазначалося, керувати налаштуваннями програми можна на кількох рівнях. Їхня пріоритетність відповідає зворотному порядку у списку. Перелічимо їх:

  • системний рівень;
  • рівень окремого процесу;
  • рівень користувача системи.

Системний рівень.
Базовий рівень, на якому визначаються типи основних операцій, що виконуються програмою для будь-якого процесу — створення журналів, їхнє архівування, переміщення тощо. Налаштування встановлюються у файлі конфігурації програми logrotate.conf.

Рівень окремого процесу.
Дає змогу керувати поведінкою програми стосовно будь-якого запущеного процесу — як системного, так і користувацького. Це забезпечується шляхом внесення змін до конфігураційних файлів, що зберігаються для кожного запущеного процесу в системному каталозі logrotate.d.

Рівень користувача системи.
Дозволяє виконувати налаштування для кожного користувача окремо. У цьому випадку файл конфігурації програми LogRotate і журнали з логами розташовуються у домашньому каталозі користувача. Такі налаштування мають найвищий пріоритет і перекривають будь-які значення, встановлені за замовчуванням у системному файлі конфігурації.

Нижче будуть наведені приклади внесення змін на кожному з перелічених рівнів.

Системний рівень конфігурування LogRotate

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

$ logrotate --version

Як бачимо, встановлена версія 3.19.0.

Переглянемо вміст головного файлу конфігурації за допомогою команди:

$ nano /etc/logrotate.conf

Загальні операції й налаштування для керування логами всіх запущених у системі процесів виглядають так:

weekly
su root adm
rotate 4
create
include /etc/logrotate.d

Тут:

  • weekly — запуск програми раз на тиждень;
  • su root adm — встановлення адміністративної групи за замовчуванням;
  • rotate 4 — максимальна кількість старих журналів, що зберігаються;
  • create — створення нових файлів журналів;
  • include /etc/logrotate.d — шлях до каталогу з конфігураційними файлами для окремих процесів.

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

Керування логами на рівні процесів

Цей рівень дозволяє виконувати більш гнучкі налаштування програми для кожного процесу окремо.

Переглянемо вміст системного каталогу logrotate.d, де зберігаються конфігураційні файли (їхні назви збігаються з назвами процесів):

$ ls -l /etc/logrotate.d

Наприклад, для служби звітів про помилки apport файл конфігурації має однойменну назву.

Переглянемо його вміст:

$ cat /etc/logrotate.d/apport

Отримуємо:

daily
rotate 7
delaycompress
compress
notifempty
missingok

Пояснення параметрів:

  • daily — щоденний запуск;
  • compress — архівування журналу;
  • delaycompress — відкладене стиснення журналу;
  • notifempty — заборона ротації, якщо файл порожній;
  • missingok — не показувати помилку, якщо журнал відсутній.

Місце зберігання журналів для apport:
/var/log/apport.log.

Створимо власний файл конфігурації для користувацького процесу user-proc:

$ nano /etc/logrotate.d/user-proc

Внесемо такий код:

/var/log/user-proc/*.log {

weekly
rotate 5
compress
create
missingok
notifempty
sharedscripts

postrotate
systemctl reload user-proc
endscript

}

Пояснення нових параметрів:

  • sharedscripts — дозволяє виконання спільних скриптів один раз;
  • postrotate — визначає скрипт, який виконується після ротації;
    у цьому випадку — перезавантаження процесу user-proc.

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

$ mkdir /var/log/user-proc

Перевіримо конфігурацію в режимі відладки:

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

Серед результатів побачимо рядки:

rotating pattern: /var/log/user-proc/*.log  weekly (5 rotations)
empty log files are not rotated, old logs are removed

Це означає, що конфігурація user-proc створена успішно.

Керування логами на рівні користувача системи

Спочатку створимо користувача, для якого будемо налаштовувати логування:

$ sudo useradd -m -s /bin/bash -c "Admin User Ubuntu" userubuntu

Тут:

  • userubuntu — ім’я нового користувача;
  • -m — створює домашній каталог;
  • -s — вказує оболонку;
  • -c — додає коментар.

Створимо файл конфігурації:

$ nano /home/userubuntu/logrotate.conf

Введемо в нього:

/home/userubuntu/logs/*.log {

daily
rotate 12
missingok
create
compress
}

Тепер створимо каталог для логів і файл журналу:

$ mkdir /home/userubuntu/logs
$ echo > /home/userubuntu/logs/access.log

Перевіримо працездатність конфігурації:

$ logrotate /home/userubuntu/logrotate.conf --state /home/userubuntu/logrotate-state --verbose

У виведеній інформації буде:

rotating pattern: /home/userubuntu/logs/*.log  after 1 days (12 rotations)
empty log files are rotated, old logs are removed
considering log /home/userubuntu/logs/access.log
Now: 2023-09-21 09:59
Last rotated at 2023-09-21 09:00
log does not need rotating (log has already been rotated)

Переглянемо файл станів:

$ nano /home/userubuntu/logrotate-state

У ньому зафіксовано дату й час запуску процесу:
2023-9-21-9:0:0.

Налаштуємо автоматичний запуск програми щогодини через планувальник cron:

$ crontab -e

Додамо рядок:

30 * * * * /usr/sbin/logrotate /home/userubuntu/logrotate.conf --state /home/userubuntu/logrotate-state

Після збереження змін LogRotate запускатиметься на 30-й хвилині кожної години, цілодобово.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *