journalctl для чайников: работаем с логами systemd
Systemd — это система инициализации, которая используется в большинстве современных дистрибутивов Linux. Одной из её важных функций является ведение системных журналов через специальный компонент под названием journald. Команда journalctl позволяет работать с этими журналами. В этой статье мы рассмотрим, как использовать journalctl для диагностики и анализа системных логов.
Что такое journald и journalctl?
Journald — это компонент systemd, который собирает и хранит логи в бинарном формате. В отличие от традиционных текстовых логов в /var/log, journald хранит дополнительную структурированную информацию о каждом сообщении, включая:
- Время с точностью до микросекунд
- PID процесса
- UID и GID пользователя
- Код возврата
- Дополнительные поля данных
Команда journalctl — это инструмент командной строки для просмотра и фильтрации этих журналов.
Основные команды journalctl
Просмотр всех логов
bash
journalctl
Показывает все доступные логи, начиная с самых старых. Используйте клавиши со стрелками для навигации или q для выхода.
Просмотр последних логов
bash
journalctl -n 20
Показывает последние 20 записей. По умолчанию показываются последние 10.
Просмотр логов с "живым" обновлением
bash
journalctl -f
Аналогично tail -f для традиционных логов. Показывает последние записи и продолжает отображать новые по мере их появления.
Фильтрация по времени
Просмотр логов за сегодня
bash
journalctl --today
Просмотр логов за конкретную дату
bash
journalctl --since "2026-03-03"
journalctl --until "2026-03-03"
Просмотр логов за определенный период
bash
journalctl --since "2026-03-01" --until "2026-03-03"
Просмотр логов за последние N минут/часов
bash
journalctl --since "2 hours ago"
journalctl --since "30 minutes ago"
Фильтрация по сервису
Просмотр логов конкретного сервиса
bash
journalctl -u nginx.service
journalctl -u ssh.service
Просмотр логов сервиса за определенный период
bash
journalctl -u nginx.service --since "2026-03-03 10:00:00"
Фильтрация по уровню важности
Journalctl позволяет фильтровать сообщения по уровню важности (priority):
```bash
Показать только ошибки
journalctl -p err
Показать ошибки и критические сообщения
journalctl -p crit
Показать все сообщения с уровнем ниже указанного
journalctl -p info ```
Доступные уровни: - 0/emerg: Чрезвычайная ситуация - 1/alert: Тревога - 2/crit: Критическая ошибка - 3/err: Ошибка - 4/warning: Предупреждение - 5/notice: Заметка - 6/info: Информация - 7/debug: Отладка
Фильтрация по процессу и пользователю
Просмотр логов по PID процесса
bash
journalctl _PID=1234
Просмотр логов по пользователю
bash
journalctl _UID=1000
Просмотр логов по команде
bash
journalctl _COMM=systemd
Практические примеры использования
Поиск ошибок в системе
```bash
Показать все ошибки за последние 24 часа
journalctl --since "24 hours ago" -p err..alert
Показать все сообщения об ошибках ядра
journalctl -k ```
Анализ проблем с загрузкой
```bash
Просмотр логов текущей загрузки
journalctl -b
Просмотр логов предыдущей загрузки
journalctl -b -1
Просмотр логов конкретной загрузки по UUID
journalctl -b 12345678-1234-1234-1234-123456789abc ```
Поиск по ключевым словам
```bash
Поиск по ключевому слову
journalctl | grep "error"
Поиск в логах конкретного сервиса
journalctl -u nginx.service | grep "404" ```
Форматы вывода
Journalctl поддерживает различные форматы вывода:
```bash
JSON формат
journalctl -o json
Краткий формат
journalctl -o short
Полный формат
journalctl -o verbose
Кастомный формат
journalctl -o export ```
Управление размером журнала
Проверка размера журнала
bash
journalctl --disk-usage
Очистка старых журналов
```bash
Удалить журналы старше 7 дней
journalctl --vacuum-time=7d
Ограничить размер журнала 100MB
journalctl --vacuum-size=100M
Оставить только N архивов
journalctl --vacuum-files=3 ```
Настройка постоянного хранения журналов
По умолчанию journald хранит логи только в /run/log/journal, что означает, что они будут потеряны при перезагрузке. Чтобы сохранить логи постоянно:
-
Создайте директорию:
bash sudo mkdir -p /var/log/journal -
Добавьте в
/etc/systemd/journald.conf:[Journal] Storage=persistent -
Перезапустите journald:
bash sudo systemctl restart systemd-journald
Практические советы
Сохранение результатов в файл
```bash
Сохранить результаты в файл
journalctl -u nginx.service --since "2026-03-03" > nginx_logs.txt
Сохранить в JSON формате
journalctl -u nginx.service --since "2026-03-03" -o json > nginx_logs.json ```
Мониторинг в реальном времени с фильтрацией
```bash
Мониторинг логов SSH в реальном времени
journalctl -u ssh.service -f
Мониторинг ошибок ядра в реальном времени
journalctl -k -f ```
Сравнение логов до и после изменений
```bash
Отметить время перед изменением
MARK_START=$(date +"%Y-%m-%d %H:%M:%S")
Выполнить изменения
systemctl restart nginx
Просмотреть логи после изменений
journalctl --since "$MARK_START" -u nginx.service ```
Заключение
Команда journalctl — мощный инструмент для диагностики и анализа системных логов в современных Linux-системах. Благодаря своей гибкости и богатым возможностям фильтрации, она позволяет быстро находить проблемы и анализировать поведение системы. Освоение journalctl — важный навык для любого системного администратора, работающего с современными дистрибутивами Linux.
Помните, что journald дополняет, а не заменяет традиционные логи в /var/log. Многие приложения продолжают записывать логи в традиционные файлы, поэтому знание обоих подходов необходимо для эффективной диагностики систем.