Введение / Зачем это нужно
Systemd ведёт централизованный журнал всех событий в системе — от сообщений ядра до вывода ваших служб. Journalctl — это основной инструмент для работы с этим журналом. Понимание, как эффективно проверять и фильтровать эти логи, критически важно для диагностики падений сервисов, анализа производительности и расследования инцидентов. После выполнения этого гайда вы сможете быстро находить нужную информацию даже в огромных массивах логов.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux с установленным
systemd(актуально для большинства современных дистрибутивов: Ubuntu, Debian, CentOS, Fedora). - Для чтения всех логов, особенно системных, часто требуются права sudo. Некоторые команды будут работать без sudo, но для полного доступа используйте
sudo. - У вас есть базовые навыки работы с командной строкой (навигация, использование
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 может автоматически прекратить запись).