🌐 journalctl — Часть 3:

Централизованный сбор журналов
(systemd-journal-remote)

systemd-journal-remote позволяет собирать и сохранять логи с других хостов, где используется systemd.
Это штатный инструмент systemd, без необходимости в rsyslog, syslog-ng или ELK.
Он прост, надёжен и идеально подходит для инфраструктур Astra Linux, Red OS и других дистрибутивов с systemd.


📑 Содержание


🧠 Что такое systemd-journal-remote

systemd-journal-remote и его спутник systemd-journal-upload — это встроенные утилиты systemd для пересылки бинарных журналов (journal) между хостами.

Основные возможности:


🧩 Компоненты и схема работы


┌────────────────────────────────┐         HTTPS/HTTP       ┌────────────────────────────────┐
│    Клиент                      │ ───────────────────────▶ │  Сервер сбора                  │
│ (journal-upload)               │                          │ (journal-remote)               │
│ systemd-journal-upload.service │                          │ systemd-journal-remote.service │
└────────────────────────────────┘                          └────────────────────────────────┘

  1. Клиент (systemd-journal-upload) — отправляет логи на удалённый сервер.
  2. Сервер (systemd-journal-remote) — принимает и сохраняет журналы.
  3. Просмотрщик (journalctl --directory=/var/log/journal/remote/) — анализирует полученные логи.

⚙️ Установка пакетов

Для Debian / Astra Linux

sudo apt install systemd-journal-remote

Для Red OS / RHEL / CentOS / ALT

sudo dnf install systemd-journal-remote
# или
sudo yum install systemd-journal-remote

После установки появятся службы:


🖥 Настройка сервера сбора логов (Receiver)

1️⃣ Включаем постоянное хранение журналов

sudo mkdir -p /var/log/journal/remote
sudo chown systemd-journal-remote:systemd-journal-remote /var/log/journal/remote
sudo chmod 2755 /var/log/journal/remote

2️⃣ Включаем и запускаем службу

sudo systemctl enable systemd-journal-remote
sudo systemctl start systemd-journal-remote

3️⃣ Проверяем статус

sudo systemctl status systemd-journal-remote

По умолчанию служба слушает:

http://0.0.0.0:19532/

4️⃣ Проверяем порт

sudo ss -tulnp | grep 19532

5️⃣ Каталог хранения логов по умолчанию:

/var/log/journal/remote/

🛰 Настройка клиента (Sender)

1️⃣ Создаём конфиг Файл: /etc/systemd/journal-upload.conf

[Upload]
# URL сервера сбора логов
URL=http://10.10.10.5:19532

# Отправлять только подтверждённые логи (без дубликатов)
ServerKeyFile=/etc/ssl/private/client.key
ServerCertificateFile=/etc/ssl/certs/client.crt
TrustedCertificateFile=/etc/ssl/certs/ca.crt

(если HTTPS не используется — оставляем только URL)

2️⃣ Активируем и запускаем

sudo systemctl enable systemd-journal-upload
sudo systemctl start systemd-journal-upload

3️⃣ Проверяем отправку

sudo systemctl status systemd-journal-upload

🔍 Проверка работы

На сервере приёмнике:

sudo journalctl --directory=/var/log/journal/remote/ | head

Проверяем, что приходят новые записи с разных хостов:

_HOSTNAME=web01
_SYSTEMD_UNIT=nginx.service
MESSAGE=nginx started successfully

Можно фильтровать по хосту:

sudo journalctl --directory=/var/log/journal/remote/ _HOSTNAME=web01

🧾 Фильтрация, просмотр и ротация

Фильтрация:

sudo journalctl --directory=/var/log/journal/remote/ _SYSTEMD_UNIT=sshd.service -p err

Просмотр логов конкретного клиента:

sudo journalctl --directory=/var/log/journal/remote/ _HOSTNAME=db01

Очистка и сжатие старых журналов:

sudo journalctl --directory=/var/log/journal/remote/ --vacuum-time=30days

🔐 Безопасность и HTTPS

По умолчанию systemd-journal-remote слушает HTTP (порт 19532). Для production рекомендуется включить HTTPS и аутентификацию.

1️⃣ Генерация сертификатов (self-signed пример)

sudo mkdir -p /etc/systemd/ssl
cd /etc/systemd/ssl
sudo openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=logserver.local"

2️⃣ Настраиваем /etc/systemd/journal-remote.conf

[Remote]
Seal=yes
ListenStream=19532
ServerKeyFile=/etc/systemd/ssl/server.key
ServerCertificateFile=/etc/systemd/ssl/server.crt

3️⃣ Перезапускаем службу

sudo systemctl restart systemd-journal-remote

Теперь сервер слушает https://0.0.0.0:19532.

4️⃣ На клиенте (journal-upload.conf)

[Upload]
URL=https://logserver.local:19532
TrustedCertificateFile=/etc/systemd/ssl/server.crt

💡 Практические советы и рекомендации


✅ Итог

systemd-journal-remote и journal-upload — это встроенная, надёжная альтернатива rsyslog для систем, использующих systemd. Они позволяют легко и безопасно собирать логи с десятков серверов в централизованное хранилище без дополнительного софта. В сочетании с journalctl и journald.conf это полноценная система управления журналами на уровне ОС.