До основного вмісту

Логи 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, щоб журнал не забив диск.
← Назад до бази знань Поставити питання підтримці