JavaRush /Курси /Docker SELF /Логування та перегляд системних журналів: команди `journa...

Логування та перегляд системних журналів: команди `journalctl`

Docker SELF
Рівень 3 , Лекція 1
Відкрита

1. Навіщо працювати з логами?

Журнали (або логи) — це ваш особистий "детектив", який записує кожну важливу операцію в системі. Вони фіксують дії ядра, додатків, сервісів і інших компонентів системи. Логи слугують найважливішим інструментом у діагностиці проблем і моніторингу роботи системи.

Уявіть, що ваш сервер раптово перестав відповідати. Замість того, щоб гадати, як Шерлок Холмс, що ж пішло не так, ви можете просто зазирнути в журнали — там все як на долоні. Наприклад: "Служба ssh впала", "Диск переповнений", "Кіт пробігся по клавіатурі і зупинив важливий сервіс". Логи розкажуть про все.

Робота з системними журналами допомагає:

  1. Діагностувати проблеми. Якщо щось йде не так, в логах можна знайти помилку або попередження.
  2. Відстежувати роботу сервісів. Наприклад, дізнатися, чому база даних PostgreSQL зупинилася або коли останній раз оновлювався веб-сервер.
  3. Збирати аналітику. Моніторинг продуктивності і метрик сервісів.
  4. Підвищувати безпеку. Логи можуть показати спроби злому через SSH або несанкціонований доступ.

2. Вступ до journalctl

journalctl — це потужна команда для перегляду та фільтрації системних журналів у Linux. Вона працює з systemd-journald — системою збору та зберігання логів, яка керується systemd.

Базові дії з journalctl

Спершу, давайте подивимося, як використовувати цю утиліту. Відкрийте термінал і введіть:

journalctl

Ця команда покаже вам усі системні журнали, які відсортовані у хронологічному порядку. Якщо ви очікуєте щось стримане, то приготуйтеся: зазвичай логи займають кілька екранів. Не лякайтеся, ми навчимося їх фільтрувати трохи пізніше.

Тепер, щоб вийти з перегляду логів, натисніть q (ви ж вже встигли оцінити схожість less і journalctl?).


Фільтрація логів за часом

Зараз будемо магічно звужувати логи до більш зручного діапазону.

Перегляд логів за останню годину

journalctl --since "1 hour ago"

Перегляд логів за конкретний день

journalctl --since "2023-10-31"

Зазначення часових рамок

Хочете переглянути події з 8 ранку до 9 ранку? Без проблем:

journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"

Фільтрація за часом корисна, наприклад, якщо ви знаєте, що проблема почалася в певний момент. Аналогія: ви не читаєте всю книгу, щоб дізнатися, хто вбивця — ви просто дивитесь останні сторінки.


Робота з логами конкретного сервісу

Замість того щоб розбиратися у всій системі, ви можете сфокусуватися на одній службі. Наприклад, хочете побачити, як працює веб-сервер nginx:

journalctl -u nginx

Якщо хочете бачити записи лише за останню годину (а всі ми любимо свіжу інформацію):

journalctl -u nginx --since "1 hour ago"

Короткий список прикладів:

  • -u ssh: Логи для служби SSH.
  • -u cron: Логи задач CRON.
  • -u mysql: Логи бази даних MySQL.

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

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

journalctl -f

Опція -f працює аналогічно tail -f, показуючи нові записи логів у міру їх появи.

Наприклад, спробуйте запустити команду і паралельно перезапустити якусь службу:

sudo systemctl restart ssh

Ви побачите зміни — запис про перезапуск з’явиться у логах.


Пошук помилок у логах

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

Просте використання:

journalctl | grep "ERROR"

Цей приклад покаже лише ті рядки, які містять слово ERROR. Ви можете замінити ERROR на що-завгодно, наприклад WARNING, failed або panic.


3. Особливі опції для journalctl

Перегляд записів тільки після перезавантаження

Хочеш дізнатися, що відбувалося після останнього запуску системи? Загадково? Просто зроби так:

journalctl -b

Кожне перезавантаження системи фіксується як окремий "блок". Якщо ти хочеш подивитися записи після передостаннього завантаження (так-так, це буває корисно):

journalctl -b -1

Фільтрація за користувачем або PID

Іноді потрібно відстежити дії конкретного користувача або процесу. Наприклад:

journalctl _UID=1000

Замінь 1000 на ID користувача (дізнатися ID можна за допомогою команди id).

Для фільтрації за PID (ідентифікатором процесу):

journalctl _PID=1234

4. Практичні приклади

  1. Пошук помилок SSH-сервісу.

    Хочете дізнатися, чому SSH відмовляється підключатися? Використовуйте:

    journalctl -u ssh | grep "ERROR"
    
  2. Аналіз логів за останні 24 години для CRON.

    Припустимо, ви перевіряєте, чому не виконався ваш щоденний скрипт:

    journalctl -u cron --since "yesterday"
    
  3. Моніторинг веб-сервера в режимі реального часу.

    Веб-сервер під навантаженням? Перевірте логи на помилки:

    journalctl -u nginx -f
    

Вправа для самостійної практики

  1. Знайдіть логи помилок для служби SSH за останні 24 години.
  2. Використовуючи journalctl, виведіть логи для CRON лише за ранок. Переконайтеся, що команда працює з правильним часовим діапазоном.
  3. Організуйте моніторинг логів systemd у режимі реального часу та запустіть кілька системних сервісів, щоб побачити їх статус у логах.

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

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ