Модуль 6.2: Аналіз логів
Вирішення проблем | Складність:
[MEDIUM]| Час: 25–30 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 6.1: Системне вирішення проблем
- Обов’язково: Модуль 1.2: Процеси та systemd
- Бажано: Знання основ регулярних виразів.
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Запитувати логи ефективно за допомогою journalctl, grep, awk та фільтрів за часовими мітками
- Кореляти події з різних джерел логів для побудови хронології інциденту
- Визначити поширені патерни помилок та їхні першопричини із записів логів
- Спроєктувати стратегію агрегації логів для середовища з кількома сервісами
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Логи (журнали) — це головне джерело істини при пошуку багів. Кожен додаток, сервіс та саме ядро системи пишуть логи. Вміння швидко знайти, прочитати та проаналізувати їх — це те, що відрізняє профі від новачка.
Розуміння аналізу логів допоможе вам:
- Знаходити точні повідомлення про помилки — справжню причину збоїв.
- Пов’язувати події — що сталося безпосередньо перед проблемою?
- Відстежувати шлях запиту через декілька сервісів.
- Налаштовувати моніторинг — ви будете знати, на що саме ставити алерт.
Без ефективного читання логів ви займаєтесь не відлагодженням, а гаданням.
Джерела логів у Linux
Розділ «Джерела логів у Linux»┌─────────────────────────────────────────────────────────────┐│ ДЖЕРЕЛА ЛОГІВ │├─────────────────────────────────────────────────────────────┤│ ││ Класичні (syslog) Сучасні (journald) ││ /var/log/syslog (система) journalctl ││ /var/log/auth.log (безпека) journalctl -u service ││ /var/log/kern.log (ядро) journalctl -k ││ ││ Логи додатків Логи контейнерів ││ /var/log/nginx/access.log docker logs <name> ││ /var/log/mysql/error.log kubectl logs <pod> ││ │└─────────────────────────────────────────────────────────────┘Робота з journalctl
Розділ «Робота з journalctl»journalctl — це стандартний інструмент для перегляду логів у системах із systemd.
Основні фільтри
Розділ «Основні фільтри»# Тільки логи конкретного сервісуjournalctl -u nginx
# Логи з моменту останнього завантаження системиjournalctl -b
# Логи за останні 30 хвилинjournalctl --since "30 min ago"
# Тільки помилки та критичні записиjournalctl -p err
# Логи в реальному часі (як tail -f)journalctl -fТекстовий аналіз через термінал
Розділ «Текстовий аналіз через термінал»Коли логи лежать у звичайних файлах, вашими кращими друзями стають grep, awk та tail.
# Знайти слово "error" незалежно від регіструgrep -i "error" /var/log/syslog
# Подивитися 5 рядків ДО і ПІСЛЯ помилки (контекст)grep -C 5 "Failed" /var/log/app.log
# Порахувати кількість унікальних IP-адрес у логах nginxawk '{print $1}' access.log | sort | uniq -c | sort -rn | head -n 10Логи в Kubernetes
Розділ «Логи в Kubernetes»У Kubernetes поди ефемерні. Якщо под видалено, його логи зазвичай зникають разом із ним.
# Логи поточного подаkubectl logs my-pod
# Логи ПОПЕРЕДНЬОГО екземпляра (якщо под перезавантажився)kubectl logs my-pod --previous
# Стежити за логами декількох подів за міткоюkubectl logs -l app=nginx -fТест
Розділ «Тест»-
Як подивитися тільки логи ядра через journalctl?
Відповідь
`journalctl -k` (або `journalctl --dmesg`). -
Яка команда в Linux дозволяє стежити за додаванням нових рядків у текстовий файл логу?
Відповідь
`tail -f <файл>`. -
Навіщо потрібен прапор
-C 5у команді grep?Відповідь
Він показує контекст — по 5 рядків навколо кожного знайденого слова. Це допомагає зрозуміти, що передувало помилці та що сталося після неї. -
Де в Kubernetes шукати логи, якщо под постійно перезавантажується і звичайний
kubectl logsпоказує тільки порожній запуск?Відповідь
Потрібно додати прапор `--previous`: `kubectl logs <назва> --previous`. Це покаже вивід попереднього (того, що впав) контейнера.
Практична вправа
Розділ «Практична вправа»Завдання: Навчитися швидко фільтрувати системні логи.
- Знайдіть у системному журналі всі записи, що стосуються SSH:
Terminal window journalctl -u ssh - Подивіться 20 останніх помилок у всій системі:
Terminal window journalctl -p err -n 20 - Спробуйте знайти спроби невдалого входу у файлі
/var/log/auth.log(якщо він є):Terminal window sudo grep "failed" /var/log/auth.log - Перевірте, скільки місця на диску займають логи journald:
Terminal window journalctl --disk-usage
Критерії успіху: Ви вмієте обмежувати вивід логів за часом, сервісом та пріоритетом.
Підсумок
Розділ «Підсумок»- journalctl — для системних сервісів.
- grep/awk — для текстових файлів.
- —previous — “золоте правило” для дебагу в Kubernetes.
- Контекст (сусідні рядки) важливіший за саме повідомлення про помилку.
Далі: Модуль 6.3: Відлагодження процесів — навчіться бачити, що програма робить насправді за допомогою strace.