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-системы в любых условиях.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ