Linux

Проверка логов systemd: полное руководство по journalctl

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

Обновлено 15 февраля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+CentOS 7+Debian 10+systemd 237+

Введение / Зачем это нужно

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

Требования / Подготовка

Перед началом убедитесь, что:

  1. У вас есть доступ к терминалу Linux с установленным systemd (актуально для большинства современных дистрибутивов: Ubuntu, Debian, CentOS, Fedora).
  2. Для чтения всех логов, особенно системных, часто требуются права sudo. Некоторые команды будут работать без sudo, но для полного доступа используйте sudo.
  3. У вас есть базовые навыки работы с командной строкой (навигация, использование grep).

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

Шаг 1: Базовый просмотр всего журнала

Просто выполните:

journalctl

По умолчанию вы увидите все записи с начала ведения журнала (что может быть очень много). Навигация:

  • PgUp / PgDn — прокрутка.
  • Space — следующая страница.
  • q — выход.

💡 Совет: Для быстрого просмотра последних записей сразу добавляйте флаг -n (количество строк): journalctl -n 100.

Шаг 2: Просмотр в обратном хронологическом порядке

Чаще всего вас интересуют последние события. Используйте:

journalctl -r

Это покажет записи от новых к старым. Комбинируйте с -n: journalctl -r -n 50.

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

Если проблема с определённой службой (например, nginx, docker, postgresql), фильтруйте по её имени:

journalctl -u nginx.service

Важно: Указывайте полное имя юнита (с .service). Для других типов юнитов: .socket, .mount и т.д.

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

Это самый мощный фильтр. Форматы:

  • Относительное время: --since "10 minutes ago", --since "today", --since "yesterday".
  • Абсолютное время: --since "2026-02-15 09:00:00" --until "2026-02-15 10:00:00". Пример: показать логи за последние 2 часа:
journalctl --since "2 hours ago"

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

Systemd классифицирует сообщения по приоритетам. Чтобы увидеть только ошибки и выше:

journalctl -p err.. emerg

Или просто предупреждения и ошибки:

journalctl -p warning

Уровни (от самого критичного): emerg > alert > crit > err > warning > notice > info > debug.

Шаг 6: Поиск по тексту внутри логов

Journalctl не имеет встроенного grep, но вы можете передать вывод в grep:

journalctl | grep "permission denied"

Для case-insensitive поиска: grep -i. Чтобы видеть и контекст (2 строки до/после): grep -C 2.

⚠️ Важно: grep работает на уже отформатированном выводе. Если вы фильтровали по юниту или времени, grep ищет только в отфильтрованных данных.

Шаг 7: Мониторинг в реальном времени (аналог tail -f)

Чтобы следить за новыми записями по мере их появления:

journalctl -f

Это особенно полезно при перезапуске службы или выполнении действия, которое должно что-то залогировать. Для выхода — Ctrl+C.

Шаг 8: Комбинирование фильтров

Можно объединять фильтры для точного запроса. Пример: ошибки службы sshd за последние 30 минут:

journalctl -u sshd.service -p err --since "30 minutes ago"

Или логи ядра (-k) за последний час:

journalctl -k --since "1 hour ago"

Шаг 9: Просмотр логов с указанием полного пути к исполняемому файлу

По умолчанию journalctl показывает только имя процесса. Чтобы видеть полный путь:

journalctl -o verbose

Это удобно, когда несколько бинарных файлов имеют похожие имена.

Шаг 10: Очистка журнала (если занимает много места)

Journal хранит данные в /var/log/journal/. Если диск заполнен, можно:

  • Удалить старые записи (например, старше 3 дней):
    sudo journalctl --vacuum-time=3d
    
  • Ограничить общий размер (например, 200 МБ):
    sudo journalctl --vacuum-size=200M
    
  • Полностью очистить (осторожно!):
    sudo journalctl --rotate && sudo journalctl --vacuum-time=1s
    

⚠️ Важно: Очистка безвозвратно удаляет данные. Убедитесь, что они не нужны для расследования.

Шаг 11: Просмотр логов с помощью less для удобной навигации

По умолчанию journalctl использует less для отображения. Вы можете использовать все возможности less:

  • Поиск вперёд: /текст
  • Поиск назад: ?текст
  • Переход к началу/концу: g / G
  • Выход: q

Проверка результата

После выполнения команд вы должны увидеть читаемый список записей лога. Пример успешного вывода для фильтра по сервису:

-- Logs begin at Fri 2026-02-14 10:00:00 MSK, end at Sat 2026-02-15 09:30:00 MSK. --
Feb 15 09:25:01 myhost systemd[1]: Starting Nginx - high performance web server...
Feb 15 09:25:01 myhost nginx[1234]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 15 09:25:01 myhost systemd[1]: Started Nginx - high performance web server.

Если вывод пуст — проверьте, что фильтры не исключают все записи (например, слишком жёсткое время), и что у вас есть права на чтение.

Возможные проблемы

Проблема: journalctl возвращает "Failed to open file /var/log/journal/...: Permission denied". Решение: Добавьте sudo в начало команды. Чтение системных журналов требует прав администратора.

Проблема: Нет записей для конкретного сервиса, хотя он работает. Решение: Убедитесь, что служба действительно пишет в journal (проверьте её конфигурацию, например, StandardOutput=journal). Также проверьте, не настроена ли для неё отдельная ротация логов в файл.

Проблем: Journal занимает весь диск, но команды очистки не работают. Решение: Возможно, сам journal смонтирован отдельно или есть проблемы с правами. Проверьте использование диска: df -h. Принудительно можно удалить файлы в /var/log/journal/ вручную (только если journal неактивен), но лучше использовать --vacuum.

Проблема: journalctl -f не показывает новые записи. Решение: Убедитесь, что вы запустили команду с sudo, если новые записи требуют повышенных прав. Также проверьте, не переполнен ли диск (journal может автоматически прекратить запись).

Часто задаваемые вопросы

Как посмотреть логи конкретного systemd-сервиса?
Как очистить журнал systemd, если он занял много места?
Почему при выполнении journalctl нет вывода?
Как в реальном времени следить за новыми записями в журнале?

Полезное

Базовый просмотр всего журнала
Просмотр с обратным порядком (новые сначала)
Фильтрация по конкретной службе (юниту)
Фильтрация по времени
Фильтрация по уровню важности (приоритету)
Поиск по тексту в логах
Мониторинг в реальном времени
Очистка старых записей журнала

Эта статья помогла вам решить проблему?