Linux

journalctl: полное руководство по чтению логов Linux

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

Обновлено 15 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Linux с systemd (Ubuntu 16.04+, CentOS 7+, Debian 8+, Fedora)

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

journalctl — это мощная утилита для просмотра и анализа журналов, собираемых systemd-journald. В современных дистрибутивах Linux она часто заменяет традиционные текстовые логи в /var/log/. С её помощью вы можете быстро найти причину сбоя службы, отследить события безопасности или просто понять, что происходит в системе. Этот гайд превратит вас из новичка в уверенного пользователя journalctl.

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

  1. Операционная система: Любой современный Linux-дистрибутив с systemd (проверьте командой systemctl --version).
  2. Права доступа: Для просмотра всех логов, включая сообщения от ядра и системных служб, обычно требуются права root. Используйте sudo или войдите под суперпользователем.
  3. Журнал должен быть активен: Убедитесь, что служба systemd-journald работает: systemctl status systemd-journald.
  4. Понимание структуры логов: Журналы systemd хранятся в бинарном формате (обычно в /var/log/journal/ или /run/log/journal/). Это позволяет эффективно индексировать и фильтровать записи по метаданным.

Пошаговая инструкция

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

Просто введите команду journalctl. Вы увидите полный лог системы, начиная с самого раннего доступного записи, в хронологическом порядке (от старых к новым).

sudo journalctl
  • Навигация: Используйте PgUp/PgDown или стрелки. Для поиска по тексту внутри less-просмотрщика нажмите /, введите запрос и Enter.
  • Выход: Клавиша q.
  • По умолчанию: Вывод ограничен последними записями (зависит от конфигурации). Чтобы видеть всё, используйте --no-pager для вывода в терминал без паузы.

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

Это один из самых частых сценариев. Journalctl понимает гибкие временные форматы.

# Логи за сегодня
sudo journalctl --since today

# Логи за последние 2 часа
sudo journalctl --since "2 hours ago"

# Логи за конкретный день
sudo journalctl --since "2026-02-14" --until "2026-02-15"

# Логи с 9:00 до 18:00 сегодня
sudo journalctl --since "09:00" --until "18:00"

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

Чтобы увидеть логи только определённой службы (например, nginx или docker), используйте флаг -u.

# Логи службы SSH
sudo journalctl -u ssh.service

# Логи службы Docker за последние 30 минут
sudo journalctl -u docker.service --since "30 minutes ago"

Это исключает весь "шум" от других процессов и сразу фокусирует вас на проблеме.

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

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

# Только ошибки (err) и критические (crit, alert, emerg)
sudo journalctl -p err

# Все, кроме отладочных (debug) и информационных (info)
sudo journalctl -p warning..crit

# Уровни (от самого высокого к низкому):
# emerg, alert, crit, err, warning, notice, info, debug

Можно комбинировать с другими фильтрами: sudo journalctl -u nginx -p err.

Шаг 5: Поиск по ключевым словам и полям

Используйте grep-подобный синтаксис для поиска в тексте сообщений или фильтрацию по структурированным полям (например, _PID, _COMM, SYSLOG_IDENTIFIER).

# Простой текстовый поиск (игнорирует регистр)
sudo journalctl | grep -i "failed"

# Поиск по имени исполняемого файла (например, все вызовы apt)
sudo journalctl _COMM=apt

# Поиск по ID процесса (PID)
sudo journalctl _PID=1234

# Комбинация: найти ошибки в службе cron
sudo journalctl -u cron -p err

💡 Совет: Для поиска по полям используйте синтаксис ПОЛЕ=значение. Список всех полей записи можно увидеть в выводе journalctl -o verbose или в документации.

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

Добавьте флаг -f (follow) к любой команде, чтобы видеть новые записи по мере их появления.

# Отслеживать все новые логи
sudo journalctl -f

# Отслеживать логи только службы NetworkManager
sudo journalctl -u NetworkManager -f

# Отслеживать ошибки в реальном времени
sudo journalctl -p err -f

Используйте Ctrl+C для остановки.

Шаг 7: Управление выводом (форматирование и ограничение)

Узнайте, как сделать вывод более читаемым или ограничить его объём.

# Показать только последние 50 записей (аналог tail)
sudo journalctl -n 50

# Показать записи с определённого времени вперёд (прямой хронологический порядок)
sudo journalctl --reverse

# Вывод в формате "кратко" (одна строка на запись)
sudo journalctl -o short

# Вывод в формате "JSON" для парсинга скриптами
sudo journalctl -o json --no-pager

# Очистить журнал (требует root, будьте осторожны!)
sudo journalctl --rotate
sudo journalctl --vacuum-time=3d  # Удалить записи старше 3 дней

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

Вы успешно освоили journalctl, если можете:

  1. Найти логи ошибки для конкретной службы за последний час.
  2. Отфильтровать записи только критического уровня.
  3. Запустить мониторинг логов нового процесса в реальном времени.
  4. Поискать все вызовы определённой команды (например, sudo) по полю _COMM.

Проверочный тест: Выполните команду sudo journalctl -u systemd-journald -p err --since today. Если вывод не пуст и показывает записи — фильтрация работает.

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

Проблема: "No journal files were found"

Причина: Служба systemd-journald не запущена, журнал отключён или хранится только в памяти (/run/log/journal/, который очищается при перезагрузке). Решение:

  1. Проверьте статус: sudo systemctl status systemd-journald.
  2. Если служба неактивна, запустите: sudo systemctl start systemd-journald.
  3. Проверьте конфигурацию в /etc/systemd/journald.conf. Убедитесь, что Storage= не установлен в none или volatile. Для постоянного хранения на диске должно быть Storage=auto или Storage=persistent.

Проблема: Недостаточно прав для просмотра логов

Причина: Некоторые записи (например, от ядра или некоторых служб) доступны только root. Решение: Всегда используйте sudo перед journalctl, если вам нужен полный доступ. Для просмотра только пользовательских логов (своих процессов) sudo может не понадобиться.

Проблема: Журнал слишком большой, команды работают медленно

Причина: Накоплено много исторических данных. Решение: Регулярно выполняйте "вакуумацию" (очистку) старых записей. Например, чтобы оставить логи только за последние 7 дней:

sudo journalctl --vacuum-time=7d

Или ограничьте общий размер журнала (например, 500МБ):

sudo journalctl --vacuum-size=500M

Настройка автоматической очистки: Отредактируйте /etc/systemd/journald.conf и установите параметры SystemMaxUse=, SystemKeepFree= или MaxRetentionSec=. После изменений перезапустите службу: sudo systemctl restart systemd-journald.

Проблема: Не могу найти логи по старому имени файла (например, /var/log/syslog)

Причина: В systemd-системах традиционные логи могут быть перенаправлены в journald или отключены. Файлы в /var/log/ могут быть символическими ссылками или не обновляться. Решение: Используйте journalctl как основной инструмент. Если нужно сохранить логи в классическом виде для внешних систем, настройте systemd-journald на转发 (forwarding) в /var/log/ через параметр ForwardToSyslog=yes в конфиге и запустите rsyslog или syslog-ng.

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

Как показать логи за последний час?
Как мониторить логи в реальном времени, как tail -f?
Как найти логи по конкретному PID?
Почему journalctl показывает меньше записей, чем старые файлы в /var/log?

Полезное

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