Linux

Полное руководство по журналам systemd: команды journalctl и управление

В этом гайде вы освоите работу с централизованным журналом systemd: от базовых команд journalctl до настройки ротации и очистки логов.

Обновлено 8 апреля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 8+Fedora 35+Arch Linux

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

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 самых свежих записей (от новых к старым)

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

  1. Выполните journalctl -n 10 — должны отобразиться последние 10 записей.
  2. Проверьте фильтрацию: journalctl -u sshd --since "1 hour ago" — логи SSH за час.
  3. Убедитесь, что очистка сработала: journalctl --disk-usage покажет уменьшенный размер.
  4. Если меняли конфиг, перезагрузите службу и проверьте, что новые параметры активны (через 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.

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

Как посмотреть логи systemd за последний час?
Как безопасно очистить журналы systemd?
Почему journalctl не показывает логи моей службы?
Как изменить место хранения журналов systemd?

Полезное

Просмотр всех журналов systemd
Фильтрация по службе, времени и приоритету
Мониторинг в реальном времени
Очистка старых записей
Настройка политики хранения