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

> journalctl и rsyslog читают логи systemd и ограничивают их размер: команды, параметры journald.conf и настройка ротации.

## Как устроены логи в 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](https://www.zevshost.net/ru/kb/nastroit-logrotate/). Без ротации файл вроде `/var/log/nginx/access.log` за месяц вырастает до десятков гигабайт на нагруженном сервере.

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

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

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

Дальше — либо сокращение журнала командой `journalctl --vacuum-size`, либо настройка ротации для конкретного файла. Общий подход к поиску пожирателя места на диске разобран в статье [про диагностику заполненного диска](https://www.zevshost.net/ru/kb/disk-zapolnen-diagnostika/).

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

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

---

Источник: https://www.zevshost.net/ru/kb/journalctl-rsyslog-logi/
