Ось урок, побудований за вашим майстер-промптом.
🎓 Урок: Логи системи та магія 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... тобто, це був ваш урок про логи! 🖐️