Введение / Зачем это нужно
Systemd-journald собирает логи со всех компонентов системы и служб в единое бинарное хранилище. Это избавляет от необходимости разбираться в десятках текстовых файлах в /var/log/. Умение работать с journalctl — ключевой навык для диагностики проблем, аудита безопасности и мониторинга Linux-сервера. После выполнения этого гайда вы сможете быстро находить нужные записи, настраивать ротацию и освобождать место на диске.
Требования / Подготовка
- Доступ к терминалу с правами root или sudo для операций просмотра всех логов и очистки.
- Установленный systemd (стандарт для большинства дистрибутивов с 2015 года).
- Базовое знакомство с командной строкой.
💡 Совет: Если вы работаете на удалённом сервере, убедитесь, что у вас есть стабильное соединение — некоторые команды могут выводить много данных.
Шаг 1: Просмотр всех журналов systemd
Команда journalctl без аргументов выводит весь журнал в хронологическом порядке (от старых к новым). По умолчанию используется less для прокрутки.
journalctl
Ключевые клавиши при просмотре:
Space— следующая страница.b— предыдущая страница./текст— поиск вперёд.?текст— поиск назад.q— выход.
Чтобы сразу увидеть последние записи, добавьте -n (количество строк):
journalctl -n 100 # последние 100 строк
Шаг 2: Фильтрация логов
Сила journalctl — в гибкой фильтрации. Вот основные варианты:
По службе (юниту systemd):
journalctl -u sshd.service # логи демона SSH
journalctl -u nginx.service --since today
По времени:
journalctl --since "2026-04-08 09:00:00" --until "10:30:00"
journalctl --since 2h # за последние 2 часа
journalctl --since yesterday
По уровню важности (приоритету):
journalctl -p err # только ошибки (err, crit, alert, emerg)
journalctl -p warning..info # от warning до info включительно
По ключевому слову или PID:
journalctl -g "connection refused" # поиск по тексту
journalctl _PID=1234 # логи процесса с PID 1234
Шаг 3: Мониторинг в реальном времени
Для отслеживания событий «на лету» используйте опцию -f (follow):
journalctl -f
Чтобы видеть только логи конкретной службы:
journalctl -u docker.service -f
Для вывода новых записей с кратким форматом (без временных меток и т.д.) можно комбинировать с -o:
journalctl -f -o short-monotonic
Шаг 4: Очистка старых записей
Журнал systemd растёт со временем. Для очистки есть три основных метода:
По времени:
sudo journalctl --vacuum-time=7d # удалить всё старше 7 дней
По размеру:
sudo journalctl --vacuum-size=500M # оставить не более 500 МБ
По количеству файлов:
sudo journalctl --vacuum-files=10 # сохранить только 10 самых свежих архивных файлов
⚠️ Важно: Операции вакуума не удаляют записи, которые всё ещё используются активными процессами. Убедитесь, что нет сервисов, пишущих в журнал в данный момент.
Шаг 5: Настройка политики хранения
По умолчанию systemd-journald хранит логи в /run/log/journal (в оперативной памяти) и/или /var/log/journal (на диске). Конфигурация находится в /etc/systemd/journald.conf.
Откройте файл:
sudo nano /etc/systemd/journald.conf
Раскомментируйте и установите параметры:
[Journal]
Storage=persistent # сохранять на диск (по умолчанию auto)
SystemMaxUse=1G # максимальный общий размер журналов на диске
SystemKeepFree=500M # оставлять минимум свободного места на разделе
SystemMaxFileSize=50M # максимальный размер одного файла журнала
MaxRetentionSec=1month # хранить не дольше 1 месяца
💡 Совет: Для серверов с малым диском уменьшите
SystemMaxUse(например, до 200M). Для рабочих станций можно увеличить для более длительного аудита.
После изменений перезапустите демон:
sudo systemctl restart systemd-journald
Проверьте текущую конфигурацию:
journalctl --disk-usage # текущий размер журнала на диске
sudo cat /etc/systemd/journald.conf | grep -E "SystemMaxUse|SystemKeepFree"
Шаг 6: Дополнительные возможности
Просмотр загрузок системы (boots):
journalctl --list-boots # список загрузок с индексами
journalctl -b -1 # логи предыдущей загрузки
journalctl -b -2 -p err # ошибки загрузки перед последней
Экспорт журнала в текстовый файл:
journalctl --since today > today.log
journalctl -u nginx --json-pretty > nginx.json # в формате JSON
Просмотр журнала с временными метками в UTC:
journalctl -o utc
Ограничение вывода по количеству строк:
journalctl -n 50 --reverse # 50 самых свежих записей (от новых к старым)
Проверка результата
- Выполните
journalctl -n 10— должны отобразиться последние 10 записей. - Проверьте фильтрацию:
journalctl -u sshd --since "1 hour ago"— логи SSH за час. - Убедитесь, что очистка сработала:
journalctl --disk-usageпокажет уменьшенный размер. - Если меняли конфиг, перезагрузите службу и проверьте, что новые параметры активны (через
journalctl --disk-usageиcat /proc/sys/kernel/printk).
Возможные проблемы
«Permission denied» при чтении журнала
Причина: недостаточно прав. Решение: добавьте sudo или войдите как root. Для чтения логов конкретного пользователя используйте journalctl --user.
Журнал не ротируется, размер растёт
Причина: параметры в journald.conf не заданы или конфликтуют. Решение: проверьте конфиг, убедитесь, что SystemMaxUse и SystemKeepFree не противоречат друг другу. Перезапустите демон.
Недостаточно места на диске для вакуума
Причина: --vacuum-size не может освободить место, если текущий размер уже превышает лимит. Решение: сначала удалите старые файлы вручную из /var/log/journal/ или используйте --vacuum-time с большим значением.
Логи службы не появляются в journalctl
Причина: служба пишет напрямую в файл (например, через >> /var/log/app.log). Решение: настройте службу на вывод в stdout/stderr (стандартный поток systemd). Проверьте конфиг юнита: StandardOutput=journal и StandardError=journal (по умолчанию).
После настройки Storage=persistent журнал не пишется на диск
Причина: отсутствует каталог /var/log/journal/ или неправильные права. Решение: создайте каталог: sudo mkdir -p /var/log/journal && sudo systemd-tmpfiles --create --prefix /var/log/journal. Перезапустите systemd-journald.