journalctl — утилита для просмотра логов, которые собирает systemd-journald. Сам systemd-journald принимает сообщения от ядра, systemd-сервисов, приложений, stdout/stderr, syslog и команды logger, сохраняет их в journal, а journalctl используется для поиска и фильтрации.
Основные команды #
| Команда | Назначение |
|---|---|
journalctl |
Показать все доступные логи |
journalctl -n 50 |
Последние 50 записей |
journalctl -e |
Перейти в конец журнала |
journalctl -f |
Смотреть новые сообщения в реальном времени |
journalctl --since "1 hour ago" |
Логи за последний час |
journalctl --since today |
Логи за сегодня |
journalctl --no-pager |
Вывести лог без less |
Логи systemd-сервиса #
Для конкретного сервиса используется параметр -u.
| Команда | Назначение |
|---|---|
journalctl -u nginx |
Все логи nginx |
journalctl -u nginx -n 100 |
Последние 100 записей |
journalctl -u nginx -f |
Логи в реальном времени |
journalctl -u nginx -p err |
Только ошибки |
journalctl -u nginx --since "1 hour ago" |
Логи за последний час |
journalctl -u nginx -b |
Логи nginx с текущей загрузки |
Уровни сообщений #
journalctl позволяет фильтровать записи по уровню важности через параметр -p.
| Уровень | Значение | Описание |
|---|---|---|
0 |
emerg |
Система неработоспособна |
1 |
alert |
Требуется немедленное вмешательство |
2 |
crit |
Критическая ошибка |
3 |
err |
Ошибка |
4 |
warning |
Предупреждение |
5 |
notice |
Важное уведомление |
6 |
info |
Информационное сообщение |
7 |
debug |
Отладочное сообщение |
Например, показать ошибки уровня err и выше:
journalctl -p err
Ошибки только с текущей загрузки:
journalctl -b -p err
Загрузки системы #
Journal умеет разделять записи по загрузкам системы, что особенно полезно после неожиданного reboot или сбоя.
| Команда | Назначение |
|---|---|
journalctl -b |
Текущая загрузка |
journalctl -b -1 |
Предыдущая загрузка |
journalctl -b -2 |
Загрузка перед предыдущей |
journalctl --list-boots |
Список доступных загрузок |
journalctl -b -1 -p err |
Ошибки предыдущей загрузки |
Логи ядра #
Сообщения ядра Linux:
journalctl -k
Ошибки ядра:
journalctl -k -p err
Поиск OOM Killer:
journalctl -k | grep -i oom
Фильтрация #
Journal хранит не только текст сообщения, но и метаданные: PID, UID, имя процесса, systemd unit, priority, hostname и другие поля.
| Команда | Фильтр |
|---|---|
journalctl _PID=1234 |
По PID процесса |
journalctl _COMM=sshd |
По имени процесса |
journalctl _UID=1000 |
По UID пользователя |
journalctl -t backup-script |
По SYSLOG_IDENTIFIER |
journalctl -g "error" |
По тексту сообщения |
journalctl -o verbose |
Показать все метаданные записи |
logger #
Команда logger позволяет отправлять собственные сообщения в journal. Это удобно для cron-задач и административных скриптов.
logger -t backup-script "Backup started"
Посмотреть записи:
journalctl -t backup-script
Например, в скрипте:
#!/bin/bash
TAG="backup-script"
logger -t "$TAG" "Backup started"
# команды backup
logger -t "$TAG" "Backup completed"
Где хранятся логи #
| Путь | Назначение |
|---|---|
/run/log/journal/ |
Временный journal, обычно очищается после reboot |
/var/log/journal/ |
Постоянное хранение логов |
/etc/systemd/journald.conf |
Конфигурация systemd-journald |
Для постоянного хранения можно использовать:
Storage=persistent
Основные варианты Storage:
| Значение | Режим |
|---|---|
auto |
Persistent, если доступен /var/log/journal |
persistent |
Постоянное хранение |
volatile |
Только временное хранение в /run |
none |
Не хранить journal |
Размер и очистка journal #
| Команда | Назначение |
|---|---|
journalctl --disk-usage |
Показать размер journal |
journalctl --vacuum-time=7d |
Удалить записи старше 7 дней |
journalctl --vacuum-size=500M |
Сократить journal примерно до 500 МБ |
journalctl --rotate |
Принудительно выполнить ротацию |
Например:
journalctl --rotate
journalctl --vacuum-time=7d
Быстрая диагностика сервиса #
Для большинства проблем с systemd-сервисом достаточно нескольких команд:
| Команда | Что проверяем |
|---|---|
systemctl status nginx |
Текущее состояние сервиса |
journalctl -u nginx -n 100 |
Последние события |
journalctl -u nginx -p err |
Ошибки |
journalctl -u nginx -f |
Логи в реальном времени |
journalctl -u nginx -b -1 |
Что происходило до последнего reboot |
Главное различие: systemd-journald собирает и хранит логи, а journalctl показывает, ищет и фильтрует их.