sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как смотреть логи сервисов через journalctl: пошаговое руководство

Освойте journalctl для эффективной диагностики служб Linux

07 704 просмотров4 мин
0
Поделиться:TelegramVK

Введение

Современные Linux-дистрибутивы используют systemd для управления службами, а journalctl — это утилита для работы с журналом systemd. Она позволяет просматривать логи всех сервисов, фильтровать их по времени, приоритету, unit'ам и другим параметрам. В этом руководстве мы разберём, как смотреть логи сервисов через journalctl, начиная с основ и заканчивая продвинутыми приёмами.

Требования

  • Linux-система с systemd (большинство современных дистрибутивов: Ubuntu, Debian, CentOS, Fedora, Arch и др.).

  • Права пользователя с доступом к журналу (обычно root или член группы systemd-journal).

  • Базовые навыки работы в терминале.

Шаг 1: Проверка наличия systemd и journalctl

Убедитесь, что в вашей системе используется systemd и доступен journalctl:

systemctl --version
journalctl --version

Если команды не найдены, вероятно, ваша система использует другую систему инициализации (например, SysVinit), и journalctl недоступен.

Шаг 2: Базовый просмотр логов

Запустите journalctl без аргументов, чтобы увидеть все записи журнала (от старых к новым):

journalctl

Вывод будет открыт в пейджере (обычно less). Используйте стрелки для прокрутки, / для поиска, q для выхода.

Шаг 3: Просмотр логов конкретного сервиса

Чтобы посмотреть логи только определённой службы, используйте опцию -u (или --unit):

journalctl -u nginx.service

Можно указать несколько сервисов через запятую или несколько флагов -u:

journalctl -u nginx.service -u php-fpm.service

Шаг 4: Фильтрация по времени

journalctl позволяет выбирать записи за определённый период. Используйте --since и --until:

journalctl --since "2025-03-01 10:00:00" --until "2025-03-01 12:00:00"

Можно использовать относительные выражения:

journalctl --since "1 hour ago"
journalctl --since yesterday --until now

Шаг 5: Отображение последних записей

Чтобы увидеть последние N строк, используйте -n:

journalctl -n 50

Для непрерывного отслеживания новых записей в реальном времени применяйте -f (аналог tail -f):

journalctl -f -u nginx.service

Шаг 6: Фильтрация по приоритету (уровню важности)

Сообщения в журнале имеют приоритеты от 0 (emerg) до 7 (debug). Опция -p позволяет выбрать записи с указанным приоритетом и выше:

journalctl -p err -u nginx.service

Это покажет все сообщения с уровнем error и более критичные.

Шаг 7: Поиск по тексту сообщения

Для поиска по содержимому используйте grep в связке с journalctl или встроенную опцию --grep (доступна в systemd 237+):

journalctl -u nginx.service --grep "error"

Либо классический вариант:

journalctl -u nginx.service | grep -i "error"

Шаг 8: Просмотр логов загрузки системы

Чтобы увидеть сообщения, относящиеся к текущей загрузке, используйте -b:

journalctl -b

Для предыдущей загрузки: journalctl -b -1. Список загрузок: journalctl --list-boots.

Шаг 9: Фильтрация по исполняемому файлу или PID

Можно отфильтровать записи по пути к исполняемому файлу (_EXE) или по идентификатору процесса (_PID):

journalctl /usr/sbin/nginx
journalctl _PID=1234

Шаг 10: Форматирование вывода

По умолчанию journalctl выводит записи в коротком формате. Для более детального просмотра используйте -o verbose, для JSON — -o json или -o json-pretty. Например:

journalctl -u nginx.service -o json-pretty

Также можно выводить только сообщения без метаданных: -o cat.

Шаг 11: Ограничение размера журнала

Журнал может занимать много места. Проверить текущий размер: journalctl --disk-usage. Очистить старые записи: journalctl --vacuum-size=100M или journalctl --vacuum-time=2weeks. Настройки хранения задаются в /etc/systemd/journald.conf.

Шаг 12: Экспорт логов в файл

Для сохранения логов в файл используйте перенаправление вывода:

journalctl -u nginx.service --since today > nginx.log

Или с форматом JSON:

journalctl -u nginx.service -o json > nginx.json

Типичные ошибки

1. Недостаточно прав: обычный пользователь может не иметь доступа к журналу. Запускайте с sudo или добавьте пользователя в группу systemd-journal. 2. Неверное имя сервиса: убедитесь, что unit называется точно так, как в systemd (например, nginx.service, а не nginx). Проверьте список: systemctl list-units --type=service. 3. Игнорирование временных зон: journalctl использует локальное время. При указании времени учитывайте часовой пояс. 4. Слишком широкий фильтр: без ограничения по времени или сервису вывод может быть огромным. Всегда старайтесь сужать диапазон. 5. Отсутствие ротации: если не настроить ограничение размера, журнал может занять всё дисковое пространство.

FAQ

В: Чем journalctl отличается от просмотра /var/log/syslog? О: journalctl работает с бинарным журналом systemd, который содержит структурированные метаданные. /var/log/syslog — традиционный текстовый лог, который может не содержать всех записей, особенно если rsyslog не настроен.

В: Как посмотреть логи сервиса, который не запущен? О: journalctl хранит записи и для остановленных сервисов. Просто укажите -u имя.service.

В: Можно ли использовать journalctl без systemd? О: Нет, journalctl является частью systemd и требует работающего journald.

В: Как очистить журнал полностью? О: Используйте journalctl --rotate, затем journalctl --vacuum-time=1s (или удалите файлы в /var/log/journal вручную, но это не рекомендуется).

В: Почему journalctl не показывает старые логи? О: Возможно, включена энергонезависимая запись в /etc/systemd/journald.conf (параметр Storage=persistent), но журнал мог быть очищен или ограничен по размеру.

Итог

journalctl — мощный инструмент для просмотра и анализа логов сервисов в Linux. Освоив фильтрацию по unit'ам, времени, приоритету и другим параметрам, вы сможете быстро диагностировать проблемы. Не забывайте про ограничение размера журнала и права доступа. Практикуйтесь, и journalctl станет вашим надёжным помощником в администрировании.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.