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.