🌐 journalctl — Часть 3:
Централизованный сбор журналов
(systemd-journal-remote)
systemd-journal-remote позволяет собирать и сохранять логи с других хостов, где используется systemd.
Это штатный инструмент systemd, без необходимости в rsyslog, syslog-ng или ELK.
Он прост, надёжен и идеально подходит для инфраструктур Astra Linux, Red OS и других дистрибутивов с systemd.
📑 Содержание
- Что такое systemd-journal-remote
- Компоненты и схема работы
- Установка необходимых пакетов
- Настройка сервера сбора логов (Receiver)
- Настройка клиента (Sender)
- Проверка работы и примеры
- Фильтрация, просмотр и ротация журналов
- Безопасность и шифрование (HTTPS)
- Практические советы и рекомендации
🧠 Что такое systemd-journal-remote
systemd-journal-remote и его спутник systemd-journal-upload — это встроенные утилиты systemd для пересылки бинарных журналов (journal) между хостами.
Основные возможности:
- Приём логов с других серверов по HTTP(S);
- Хранение их в стандартных бинарных
.journalфайлах; - Просмотр через обычный
journalctl; - Полная поддержка фильтрации и поиска по полям (
_HOSTNAME,_SYSTEMD_UNIT, и т.п.); - Без сторонних демонов и парсеров.
🧩 Компоненты и схема работы
┌────────────────────────────────┐ HTTPS/HTTP ┌────────────────────────────────┐
│ Клиент │ ───────────────────────▶ │ Сервер сбора │
│ (journal-upload) │ │ (journal-remote) │
│ systemd-journal-upload.service │ │ systemd-journal-remote.service │
└────────────────────────────────┘ └────────────────────────────────┘
- Клиент (
systemd-journal-upload) — отправляет логи на удалённый сервер. - Сервер (
systemd-journal-remote) — принимает и сохраняет журналы. - Просмотрщик (
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
После установки появятся службы:
systemd-journal-remote.servicesystemd-journal-upload.servicesystemd-journal-gatewayd.service(опционально — web-доступ)
🖥 Настройка сервера сбора логов (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
💡 Практические советы и рекомендации
- 🚀 Разворачивайте отдельный сервер логов, где хранятся только журналы (
journal-remote+Storage=persistent); - 🔒 Используйте HTTPS + сертификаты, чтобы защитить логи при передаче;
- 🕓 Регулярно выполняйте очистку (
--vacuum-time=30days); - 📁 Для разных хостов можно хранить логи в отдельных директориях (
_HOSTNAME); - 📡 Для визуализации можно подключить
journal-gatewayd(веб-интерфейс); -
📊 Экспортируйте логи в JSON для анализа:
sudo journalctl --directory=/var/log/journal/remote/ -o json-pretty > /tmp/logs.json - ⚙️ Не забывайте включить
Storage=persistentна клиентах, чтобы не терять записи при перезагрузке.
✅ Итог
systemd-journal-remote и journal-upload — это встроенная, надёжная альтернатива rsyslog для систем, использующих systemd.
Они позволяют легко и безопасно собирать логи с десятков серверов в централизованное хранилище без дополнительного софта.
В сочетании с journalctl и journald.conf это полноценная система управления журналами на уровне ОС.