1. Навіщо працювати з логами?
Журнали (або логи) — це ваш особистий "детектив", який записує кожну важливу операцію в системі. Вони фіксують дії ядра, додатків, сервісів і інших компонентів системи. Логи слугують найважливішим інструментом у діагностиці проблем і моніторингу роботи системи.
Уявіть, що ваш сервер раптово перестав відповідати. Замість того, щоб гадати, як Шерлок Холмс, що ж пішло не так, ви можете просто зазирнути в журнали — там все як на долоні. Наприклад: "Служба ssh впала", "Диск переповнений", "Кіт пробігся по клавіатурі і зупинив важливий сервіс". Логи розкажуть про все.
Робота з системними журналами допомагає:
- Діагностувати проблеми. Якщо щось йде не так, в логах можна знайти помилку або попередження.
- Відстежувати роботу сервісів. Наприклад, дізнатися, чому база даних PostgreSQL зупинилася або коли останній раз оновлювався веб-сервер.
- Збирати аналітику. Моніторинг продуктивності і метрик сервісів.
- Підвищувати безпеку. Логи можуть показати спроби злому через 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. Практичні приклади
Пошук помилок SSH-сервісу.
Хочете дізнатися, чому SSH відмовляється підключатися? Використовуйте:
journalctl -u ssh | grep "ERROR"Аналіз логів за останні 24 години для CRON.
Припустимо, ви перевіряєте, чому не виконався ваш щоденний скрипт:
journalctl -u cron --since "yesterday"Моніторинг веб-сервера в режимі реального часу.
Веб-сервер під навантаженням? Перевірте логи на помилки:
journalctl -u nginx -f
Вправа для самостійної практики
- Знайдіть логи помилок для служби SSH за останні 24 години.
- Використовуючи
journalctl, виведіть логи для CRON лише за ранок. Переконайтеся, що команда працює з правильним часовим діапазоном. - Організуйте моніторинг логів
systemdу режимі реального часу та запустіть кілька системних сервісів, щоб побачити їх статус у логах.
Логування — це не просто про довідник помилок чи діагностику проблем. Це ваш таємний агент, який допомагає слідкувати за всією операційною системою. Як тільки ви освоїте команду journalctl, у вас буде потужний інструмент для аналізу, оптимізації та забезпечення стабільної роботи Linux-системи в будь-яких умовах.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ