Вопрос или проблема
Я пытаюсь настроить сервер логирования с помощью rsyslog. В качестве клиентов у меня есть машины, которые могут использовать journald, а также устаревшие приложения, которые могут работать только с syslog. Поэтому должен существовать простой syslog-эндпоинт.
Я хотел бы хранить все логи как отдельные журналы на сервере логирования, чтобы извлечь выгоду из его преимуществ по сравнению с обычным syslog. Как я могу этого достичь?
То, что я пробовал/думал:
- Использование omfwd на клиентах логирования и imtcp+omjournal на сервере логирования: Это, похоже, работает, однако все записи журнала сохраняются в собственном журнале сервера логирования, и я не могу отправить их в отдельные местоположения.
- Использование omfwd на клиентах логирования и omfile для динамических файлов на сервере логирования и попытка передать их на imfile+omjournal: Я думаю, это должно сработать, но не могу написать файл конфигурации, который это достижет.
- Использование omhttp на клиентах логирования для связи с systemd-journal-remote: Я подумывал об этом, но не уверен, как это настроить.
Ответ или решение
Для настройки сервера журналирования с использованием rsyslog и маршрутизации журналов на уровне хоста с использованием systemd-journald, можно использовать комбинацию rsyslog и journald. Основной задачей является организация перенаправления логов от клиентов на сервер, чтобы каждый хост имел свои собственные журналы.
Вот шаги, которые помогут вам достичь этой цели:
Шаг 1: Настройка сервера журналирования
-
Установка необходимых пакетов:
Убедитесь, что на сервере установлены необходимые пакеты:sudo apt update sudo apt install rsyslog rsyslog-gnome rsyslog-journal
-
Настройка конфигурации rsyslog:
Откройте конфигурационный файл/etc/rsyslog.conf
или создайте новый файл, например,/etc/rsyslog.d/01-remote.conf
, и добавьте следующие строки:module(load="imtcp") # Загружаем модуль для TCP input(type="imtcp" port="514") # Указываем порт для входящих соединений # Задаем путь для хранения журналов на основе хоста template(name="RemoteHost" type="string" string="/var/log/journal/%HOSTNAME%.journal") if ($fromhost-ip != "127.0.0.1") then { action(type="omjournal" template="RemoteHost") }
-
Создание каталогов для хранения журналов:
Убедитесь, что каталог/var/log/journal/
существует или создайте его:sudo mkdir -p /var/log/journal sudo chmod 755 /var/log/journal
-
Перезапуск rsyslog:
После изменений в конфигурации перезапустите службу rsyslog:sudo systemctl restart rsyslog
Шаг 2: Настройка клиента
-
Установка rsyslog:
На каждом клиенте убедитесь, что установлен rsyslog:sudo apt update sudo apt install rsyslog
-
Настройка конфигурации rsyslog:
Откройте конфигурационный файл/etc/rsyslog.conf
или создайте новый файл в/etc/rsyslog.d/
и добавьте строку для отправки журналов на сервер:*.* @@[IP_СЕРВЕРА]:514
Здесь
[IP_СЕРВЕРА]
замените на фактический IP-адрес вашего сервера журналирования. -
Перезапуск rsyslog:
После конфигурации перезапустите службу rsyslog:sudo systemctl restart rsyslog
Альтернативный вариант: Использование journald на клиентах
Если вы хотите использовать systemd-journald для отправки журналов:
-
Установите
systemd-journal-remote
на сервере:sudo apt update sudo apt install systemd-journal-remote
-
Настройка journald для отправки журналов:
На каждом клиенте вы можете использоватьsystemd-journal-gatewayd
илиsystemd-journal-remote
, чтобы отправлять журналы на сервер. -
Настройка journald на клиенте:
В/etc/systemd/journald.conf
добавьте или измените следующие параметры:[Journal] ForwardToSyslog=yes
-
Устраните проблемы с правами доступа:
Убедитесь, что у вас есть соответствующие права доступа для чтения и записи журналов. -
Настройка клиента для передачи журналов:
Используйтеsystemd-journal-remote
для передачи журналов по сети на сервер.
Заключение
Такое решение позволит вам организовать локальные журналы на сервере для каждого хоста, используя как rsyslog, так и systemd-journald. Журналы могут быть легко доступны для анализа и управления. Убедитесь в правильной настройке сети, и при необходимости добавьте шифрование, например, через TLS, чтобы обеспечить безопасность передаваемых данных.