Модуль 27

Логи системи та journalctl

Ось урок, побудований за вашим майстер-промптом.


🎓 Урок: Логи системи та магія journalctl

1. 🔥 Вступ: Детектив у темній кімнаті

Уявіть ситуацію. Ви запустили свій веб-сервер, пішли спати щасливі, а зранку прокидаєтеся — сайт лежить. Клієнти дзвонять, менеджер нервує. Ви перезапускаєте сервер — все працює.

Але що сталося о 3-й годині ночі? Хто «вбив» ваш сервіс? Хакер? Помилка в коді? Чи просто закінчилася пам'ять?

Якби це сталося на вашій кухні, ви б побачили розбиту чашку. Але всередині сервера — темно і тихо.

Тут виникає питання: Як дізнатися правду про минуле вашої системи, якщо вас там не було?

Вам потрібен Чорна скринька, як у літаку. Або, якщо хочете, бортовий журнал капітана корабля, куди записується абсолютно кожна подія: "О 12:00 підняли вітрила", "О 14:00 почався шторм".

У світі Linux цей бортовий журнал — це системні логи. А інструмент, який дозволяє їх читати, називається journalctl. Без цього інструменту адмін — як лікар без стетоскопа: можна лише здогадуватися, що болить у пацієнта.


2. 🧠 Теоретична база (Що під капотом?)

Раніше (і в багатьох старих системах досі) логи були просто текстовими файлами. Програми писали текст у файли типу /var/log/syslog. Це як писати нотатки на серветках і кидати їх у коробку. Шукати там щось — пекло.

Сучасні Linux-системи використовують systemd. Це "матір" усіх процесів. У неї є спеціальний компонент — journald.

Ось як це працює (спрощено): 1. Будь-яка програма чи сервіс щось "кричить" у простір (виводить повідомлення). 2. journald перехоплює ці крики. 3. Він додає до них метадані (хто кричав, коли точно, наскільки це важливо). 4. І записує це не просто текстом, а у бінарний формат.

☝️ Що треба запам'ятати залізно: * Логи тепер структуровані (це база даних, а не просто текст). * Команда для доступу до них — journalctl. * Вам не треба знати, де фізично лежить файл логів, вам треба просто "запитати" у системи.

Інтуїтивно: Уявіть, що journalctl — це Google Пошук, але виключно по подіях вашого комп'ютера.


3. 🧪 Приклади (Від хаосу до порядку)

Приклад 1: Потік свідомості

Давайте просто запитаємо систему: "Що відбувається?"

Відкрийте термінал і введіть:

journalctl

🤔 Питання до вас: Що ви очікуєте побачити? Один рядок? Десять?

Реальність: Ви побачите тисячі рядків тексту, починаючи з моменту завантаження системи (або навіть раніше). Це "Сира Матриця". Гортати це стрілками — марна трата часу. Натисніть q, щоб вийти.


Приклад 2: Шукаємо конкретного винуватця

Уявіть, що у нас проблеми з сервісом SSH (це те, через що ми підключаємося до сервера). Нам не цікаво, що там робить принтер чи Wi-Fi. Нам треба тільки SSH.

Ми використовуємо прапорець -u (unit / сервіс).

journalctl -u ssh

(Якщо у вас Ubuntu/Debian, служба може називатися ssh. У RedHat/CentOS — sshd).

Чому це круто: Миттєво відфільтровано все зайве. Ми бачимо тільки історію входів і виходів користувачів.


Приклад 3: "Що сталося щойно?" (Реальний кейс)

Ви тестуєте програму, вона впала секунду тому. Вам не треба логи за минулий рік. Вам треба логи за останні 10 хвилин.

journalctl --since "10 minutes ago"

Або навіть:

journalctl --since "today"

Приклад 4: Режим реального часу (Live)

Це мій улюблений режим. Ви запускаєте команду, і вона не завершується. Вона чекає нових повідомлень і виводить їх на екран, як тільки вони з'являються.

journalctl -f

(від слова follow — слідувати)

Спробуйте відкрити друге вікно терміналу і щось зробити (наприклад, ввести неправильний пароль sudo). Ви побачите, як у першому вікні "прилетить" запис про помилку. Це як дивитися трансляцію футбольного матчу наживо, а не в запису.


4. 🛠 Практична частина

Час забруднити руки. Виконайте ці завдання у своєму терміналі:

Завдання 1: "Археолог" Знайдіть всі логи, які були записані вашою системою за останню годину.

Завдання 2: "Тільки помилки" У логів є рівні важливості (priority). Від простої інформації до критичних помилок. Спробуйте знайти тільки помилки, використовуючи прапорець -p (priority) зі значенням err (error): journalctl -p err Чи багато червоного тексту ви бачите? Сподіваюсь, ні!

Завдання 3: "Слідчий SSH" 1. Запустіть відстеження логів SSH у реальному часі: journalctl -u ssh -f (або sshd). 2. Відкрийте нову вкладку терміналу і спробуйте підключитися до самого себе: ssh localhost. 3. Подивіться, що з'явилося у першій вкладці.

Завдання 4: Міні-кейс "Вага файлів" Логи можуть займати багато місця. Як дізнатися, скільки місця займають ваші логи зараз? Спробуйте команду: journalctl --disk-usage. Якщо там гігабайти — не лякайтеся, система зазвичай сама чистить старе. Але знати це корисно.

Завдання 5: Питання "А що, якщо..." А що, якщо вам треба подивитися логи за конкретний проміжок часу, наприклад, коли ви вчора обідали (з 13:00 до 14:00)? Спробуйте сконструювати команду самостійно, використовуючи --since та --until.


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі, дивлячись на те, як вони читають логи?

❌ Новачок: * Пише просто journalctl і люто скролить колесом мишки 15 хвилин, намагаючись очима знайти слово "error". * Боїться великої кількості тексту і закриває термінал.

✅ Досвідчений інженер: * Фільтрує на вході. Він знає, що шукає. Якщо впав веб-сервер, він одразу пише journalctl -u nginx. * Комбінує прапорці. Йому потрібні помилки веб-сервера за сьогодні? journalctl -u nginx --since today -p err * Читає з кінця. Найактуальніша інформація завжди внизу. Іноді достатньо глянути останні 50 рядків: journalctl -n 50.

Порада з практики: Коли ви пишете власну програму (на Python, JS, C++), ніколи не ігноруйте вивід помилок. Пишіть інформативні повідомлення. journald збереже їх для вас. Якщо ваша програма мовчки падає — journalctl не зможе вам допомогти. Допоможіть йому допомогти вам.


6. 🧩 Підсумок

Ми з вами розібрали, що логи — це не смітник, а чорна скринька вашої системи.

Сьогодні ви навчилися: 1. Викликати "духа системи" командою journalctl. 2. Фільтрувати потік інформації по сервісам (-u). 3. Подорожувати в часі за допомогою --since. 4. Слідкувати за подіями наживо через -f.

Тепер, коли щось зламається (а воно зламається, повірте), ви не будете панікувати. Ви одягнете капелюх детектива, наберете journalctl -p err і знайдете причину.

👉 Наступного разу: Ми знаємо, як знайти помилку. А як зробити так, щоб система сама повідомляла нам про проблеми або робила резервні копії, поки ми спимо? В наступному уроці поговоримо про автоматизацію та Cron.

Це був CS50... тобто, це був ваш урок про логи! 🖐️