К основному содержимому

Логи systemd: journalctl, rsyslog и лимит размера

VDS / VPS серверы · 29.09.2026

Как устроены логи в systemd: journald и rsyslog

На современных дистрибутивах Linux (Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux) логи собирает systemd-journald — служба, которая перехватывает вывод всех unit-файлов, ядра и системных сообщений в единый бинарный журнал. Читать его напрямую нельзя — только через утилиту journalctl. Часть систем дополнительно использует rsyslog, который берёт данные из journald и раскладывает их по текстовым файлам вроде /var/log/syslog или /var/log/messages.

Без ограничения бинарный журнал journald способен незаметно вырасти до нескольких гигабайт и занять всё место на диске. Разберём чтение логов, установку лимита и связку journald с rsyslog.

Основные команды journalctl

Частые сценарии работы с журналом:

journalctl -xe
journalctl -u nginx.service
journalctl -f
journalctl --since "1 hour ago"
journalctl -p err
journalctl --disk-usage

journalctl -xe показывает последние записи с расшифровкой ошибок, -u фильтрует по конкретной службе, -f работает как tail -f в реальном времени, а --disk-usage сразу показывает объём журнала на диске.

Ограничение размера журнала journald

Настройки хранения задаются в файле /etc/systemd/journald.conf. Основные параметры:

ПараметрНазначение
SystemMaxUseмаксимальный размер журнала на диске
SystemKeepFreeобъём места, остающийся свободным
MaxRetentionSecмаксимальный срок хранения записей
Storageрежим хранения: auto, persistent, volatile

Пример ограничения журнала в 200 мегабайт со сроком хранения 14 дней:

SystemMaxUse=200M
MaxRetentionSec=14day

После правки конфигурации служба перезапускается:

systemctl restart systemd-journald

Текущий размер журнала на диске проверяется командой journalctl --disk-usage, а принудительная очистка старых записей выполняется через journalctl --vacuum-size=200M или journalctl --vacuum-time=14d.

Настройка rsyslog для текстовых логов

rsyslog пригождается, когда логи требуется смотреть без journalctl — например, для сторонних скриптов парсинга. Конфигурация лежит в /etc/rsyslog.conf и файлах /etc/rsyslog.d/*.conf. Типовое правило, отправляющее сообщения определённой службы в отдельный файл:

if $programname == 'myapp' then /var/log/myapp.log
& stop

После изменения конфигурации служба перезапускается командой systemctl restart rsyslog. Корректность синтаксиса проверяется так: rsyslogd -N1.

Ротация логов: journald и rsyslog

journald сам ограничивает размер по параметрам из journald.conf, а текстовые файлы, которые пишет rsyslog, растут бесконтрольно без внешнего инструмента. За это отвечает logrotate — он сжимает и удаляет старые файлы по расписанию. Подробная настройка описана в статье про logrotate на Linux. Без ротации файл вроде /var/log/nginx/access.log за месяц вырастает до десятков гигабайт на нагруженном сервере.

Действия при заполнении диска логами

Когда место на диске заканчивается именно из-за логов, сначала находят виновника:

journalctl --disk-usage
du -sh /var/log/* | sort -rh | head -10

Дальше — либо сокращение журнала командой journalctl --vacuum-size, либо настройка ротации для конкретного файла. Общий подход к поиску пожирателя места на диске разобран в статье про диагностику заполненного диска.

Итог: чек-лист по логам

  • Логи смотрят через journalctl -u имя_службы и journalctl -f.
  • Размер журнала ограничивают в /etc/systemd/journald.conf: SystemMaxUse и MaxRetentionSec.
  • Для текстовых логов настраивают правила rsyslog в /etc/rsyslog.d/.
  • Для файлов rsyslog подключают ротацию logrotate.
  • Периодически проверяют journalctl --disk-usage, чтобы журнал не забил диск.
← Назад в базу знаний Задать вопрос поддержке