Разбираемся в journalctl: Ваше руководство по системным журналам Linux

Освойте утилиту `journalctl` из systemd, чтобы эффективно просматривать, фильтровать и анализировать системные журналы Linux. Это руководство охватывает основные команды для мониторинга в реальном времени, запросов по времени, изоляции логов юнитов служб и управления использованием дискового пространства журнала для эффективного устранения неполадок.

27 просмотров

Demystifying journalctl: Ваше руководство по системным журналам Linux

Утилита journalctl — это центральная команда для просмотра и анализа структурированных журналов, управляемых системой журналирования systemd. Поскольку это современный стандарт ведения журналов во многих дистрибутивах Linux, понимание journalctl имеет решающее значение для эффективного системного администрирования, управления службами и, особенно, для устранения неполадок.

В отличие от традиционных текстовых файлов журналов (таких как те, что находятся в /var/log), systemd собирает журналы в двоичном, индексированном формате. Это позволяет выполнять мощный поиск по времени, службе, идентификатору загрузки и другим параметрам. В этом руководстве мы рассмотрим основные команды, необходимые для раскрытия всего потенциала исторических и текущих событий вашей системы.


Понимание журнала Systemd

Прежде чем переходить к командам, полезно знать, чем управляет journalctl. Журнал systemd собирает журналы из ядра, служб (юнитов), приложений и даже процесса загрузки системы. Эти журналы обычно хранятся в структурированных двоичных файлах, что делает поиск и фильтрацию в них намного быстрее, чем в традиционных плоских файлах.

Ключевые понятия:

  • Сохраняемость (Persistence): Журналы могут быть настроены на постоянное хранение после перезагрузок (постоянный режим) или храниться только в памяти (временный режим).
  • Структурированные данные: Журналы содержат метаданные (такие как имя юнита, приоритет, идентификатор загрузки), которые journalctl использует для фильтрации.

Основные команды просмотра

Наиболее частая потребность — просто просмотреть журналы. Вот основные команды для начала изучения истории вашей системы.

1. Просмотр всех журналов

Чтобы увидеть все записи, собранные журналом с момента начала записи, используйте команду без каких-либо аргументов:

journalctl

По умолчанию этот вывод постранично отображается с помощью такого инструмента, как less, что позволяет перемещаться вверх и вниз с помощью клавиш со стрелками или пробела.

2. Просмотр журналов в реальном времени (отслеживание)

Подобно использованию tail -f, вы можете отслеживать журналы по мере их записи в системный журнал. Это бесценно при запуске или отладке определенной службы:

journalctl -f

Чтобы выйти из режима реального времени, нажмите Ctrl+C.

3. Ограничение вывода количеством строк

Если вам нужны только самые последние записи, используйте флаг -n, чтобы указать количество строк:

# Показать последние 20 записей журнала
journalctl -n 20

4. Просмотр журналов с определенного времени

Фильтрация по времени — одна из самых сильных сторон journalctl. Вы можете использовать относительные или абсолютные временные метки.

Примеры относительного времени:

Команда Описание
journalctl --since "1 hour ago" Журналы за последний час.
journalctl --since "yesterday" Журналы с начала предыдущего календарного дня.
journalctl --since "2023-10-26 14:30:00" Журналы после указанной даты и времени.

Совет: Вы можете объединить --since и --until, чтобы указать точный диапазон, например: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".


Фильтрация журналов по юниту, службе или процессу

Одним из наиболее важных применений journalctl является изоляция сообщений, относящихся к конкретному юниту systemd (службе).

Фильтрация по имени службы

Используйте флаг -u (или --unit) с последующим именем службы (например, sshd.service, nginx.service):

# Показать журналы только для службы веб-сервера Apache
journalctl -u apache2.service

# Отслеживать журналы для службы Docker
journalctl -u docker.service -f

Фильтрация по идентификатору загрузки (Boot ID)

Systemd отслеживает журналы во время разных загрузок системы. Чтобы просмотреть журналы предыдущего запуска, сначала перечислите доступные загрузки:

journalctl --list-boots

Это выводит индексированный список (например, -1, -2, 0 для текущей загрузки). Затем вы можете использовать индекс или полный идентификатор загрузки:

# Показать журналы с немедленно предыдущей загрузки
journalctl -b -1

# Показать журналы с определенного идентификатора загрузки (используйте длинный идентификатор, указанный выше)
journalctl -b a1b2c3d4e5f6...

Фильтрация по сообщениям ядра

Чтобы просмотреть только сообщения, исходящие из ядра (аналогично использованию dmesg):

journalctl -k
# Или, эквивалентно:
journalctl -b -k

Расширенная фильтрация и управление выводом

Эффективное устранение неполадок часто требует объединения фильтров и управления форматом вывода.

1. Фильтрация по уровню приоритета

Журналам присваиваются уровни приоритета (0=emerg (авария), 7=debug (отладка)). Вы можете использовать флаг -p (или --priority), чтобы просматривать сообщения на определенном уровне серьезности или выше:

Уровень приоритета Числовое значение
err (Ошибка) 3
warning 4
notice 5
info 6
# Показать все ошибки, критические и аварийные сообщения службы SSH
journalctl -u sshd.service -p err

2. Поиск определенного текста

Когда стандартной фильтрации недостаточно, вы можете передать вывод в grep, хотя journalctl имеет встроенный механизм поиска текста, который часто более эффективен для структурированных данных:

# Поиск слова 'failed' во всех журналах
journalctl | grep failed

# Или используйте опцию --grep для более простой фильтрации (если доступно/предпочтительно)
journalctl --grep=failed

3. Изменение формата вывода

Для написания скриптов или передачи журналов в другие инструменты важно изменить формат вывода. По умолчанию используется pretty (удобный для чтения человеком).

  • --output=json: Выводит записи в виде структурированных объектов JSON.
  • --output=short: Похож на pretty, но менее красочный.
  • --output=export: Выводит необработанные записи журнала для архивирования.
# Вывести последние записи журнала в формате JSON
journalctl -n 5 --output=json

4. Объединение фильтров

Фильтры применяются поочередно. Чтобы увидеть все ошибки Nginx, зарегистрированные за последние 10 минут:

journalctl -u nginx.service --since "10 minutes ago" -p err

Управление размером журнала и его сохранением

С течением времени журнал может занимать значительное место на диске, особенно если настроено постоянное ведение журнала. Системные администраторы должны управлять его размером.

Проверка текущего использования

Чтобы узнать, сколько места на диске занимают текущие файлы журнала:

journalctl --disk-usage

Очистка старых журналов

Вы можете очистить журналы на основе времени или общего размера.

Очистка по времени:

# Сохранять только журналы за последние 7 дней
journalctl --vacuum-time=7d

Очистка по размеру:

# Уменьшить общий размер журнала до максимальных 500 мегабайт
journalctl --vacuum-size=500M

Предупреждение: Будьте осторожны при удалении журналов, особенно тех, что относятся к более старым загрузкам (-b). Убедитесь, что критически важная диагностическая информация не удалена преждевременно.

Заключение

journalctl — это мощный и гибкий инструмент, который выводит ведение журналов за пределы простых текстовых файлов. Освоив фильтрацию по времени (--since, --until), изоляцию юнитов (-u) и мониторинг в реальном времени (-f), вы получите детальный контроль над мониторингом состояния системы. Будь то проверка состояния службы или изучение паники ядра за прошлую неделю, journalctl является вашим основным интерфейсом для работы с современным системным журналом Linux.