Получение сообщений Syslog с помощью systemd Arch Linux

Мне кажется, что я упустил из виду очевидное, но я не могу понять, как заставить мой сервер Arch Linux, который использует systemd , получать и записывать сообщения syslog из удаленной системы.

У меня есть модем Cisco 678 DSL и DD-WRT WAP, и оба могут быть настроены для отправки сообщений формата syslog на другой компьютер. Я бы хотел, чтобы эта машина была моим сервером Arch Linux.

Я googled вокруг, и все, что я нахожу, это то, что «systemd заменяет syslog», или что мне больше не нужно запускать syslog или что-то подобное, не относящееся к моему вопросу.

ОБНОВИТЬ

Я спросил на форумах Arch и не получил соответствующих ответов. Я установил syslog-ng только для прослушивания на UDP-порту 514. syslog-ng пишет сообщения от моего Cisco 678 и DD-WRT WAP, которые у меня есть. К сожалению, сообщения не попадают в журнал systemd, а скорее в плоские файлы. Итак, нет точного решения, но что-то вроде обходного пути. Я предпочел бы иметь сообщения syslog в журнале, а не в плоских файлах.

5 Solutions collect form web for “Получение сообщений Syslog с помощью systemd Arch Linux”

Вы можете легко писать syslog-сервер плохого человека с помощью socat . Вам просто нужен сервисный модуль:

 [Service] Restart=on-success ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT 

Он будет слепо отправлять что-либо, полученное на служебном порту syslog, в журнал systemd. Сохраните выше, как, скажем, /etc/systemd/system/syslog.service а затем

 # systemctl daemon-reload # systemctl start syslog 

Затем вам просто нужен источник для отправки сообщений на UDP-порт 514 на вашем сервере прослушивания.

Вы можете улучшить это, чтобы фактически анализировать полученные данные и форматировать их, но это не обязательно, если все, что вы хотите сделать, – это журнал, который получен.

( socat находится в репозитории Arch Linux Extra : pacman -S socat )

Таким образом, здесь есть немного пробела.

Systemd поддерживает удаленный обмен сообщениями через компонент systemd-journal-gateway. При этом эти сообщения не находятся в формате syslog. Syslog (как формат) является ратифицированной IETF-формой, документированной в RFC 5424 (которая устарела в предыдущей версии, RFC 3164).

Здесь описаны все сложности, связанные с тем, что эти игры прекрасно сочетаются:

http://www.freedesktop.org/wiki/Software/systemd/syslog/

и здесь (man systemd-journald.service)

  systemd-journald is a system service that collects and stores logging data. It creates and maintains structured, indexed journals based on logging information that is received from the kernel, from user processes via the libc syslog(3) call, from STDOUT/STDERR of system services or via its native API. It will implicitly collect numerous meta data fields for each log messages in a secure and unfakeable way. See systemd.journal-fields(7) for more information about the collected meta data. 

В заключение убедитесь, что сообщения отправляются из syslog-ng в STDOUT, и все должно заканчиваться в журнале.

Следуя этому, я еще немного нашел это:

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

Где кто-то пишет привязку из PostgreSQL к systemd для ведения журнала. В этом они цитируют, что в настоящее время (с момента этого файла, 2013/06) многострочные сообщения не поддерживаются в systemd, поэтому следите за этим тоже.

Я не знаю распределения Arch. У меня есть Fedora 20 (включая systemd) и настроил его для приема сообщений удаленного системного журнала.

IMHO, эта функциональность не связана с systemd. Systemd-journald.service вставляет себя между программами kernel / userspace и подсистемой syslog. Он захватывает (я думаю) только локальные сообщения из этих источников в свою базу данных журнала, а затем пересылает их в syslog. См. Например, «man systemd-journald.service» (по крайней мере, на Fedora).

В моем случае я включаю это, настраивая дополнительный модуль TCP syslog-приемника в /etc/rsyslog.conf, т. Е.

 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 

Также доступен модуль UDP.

Также необходимо добавить (r) правила syslog, чтобы направлять вывод на нужные файлы. Полную документацию см. По адресу : http://www.rsyslog.com/doc/.

НТН.

Я установил syslog-ng и смог получать сообщения журнала syslog. Но хотелось бы, чтобы я действительно хотел получить сообщения журнала журнала syslog, а затем записать указанное сообщение в journald. Я не мог найти способ настроить syslog-ng для записи удаленных сообщений syslog в journald.

Поэтому я написал утилиту для этого.

https://github.com/advantageous/rsyslog-journald-repeater

 ./rsyslog-journald-repeater -h Usage of ./rsyslog-journald-repeater: -debug debug flag -host string hostname to listen on (default "0.0.0.0") -port int port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.) 

В проект включены файлы и инструкции по тестированию и примеры файлов unitd. Наслаждайтесь!

syslog-ng и systemd журнал

Из syslog-ng

Начиная с версии syslog-ng 3.6.1 исходный код system() по умолчанию для system() Linux, использующий systemd, использует journald как свой стандартный источник system() .

Если вы хотите использовать файлы journald и syslog-ng, убедитесь, что действуют следующие настройки. Для systemd-journald, в файле /etc/systemd/journald.conf, Storage = либо установлено автоматически, либо отключено (по умолчанию установлено значение auto), а ForwardToSyslog = установлено значение no или unset (по умолчанию – нет). Для /etc/syslog-ng/syslog-ng.conf вам нужна следующая строфа источника:

  source src { system(); internal(); }; 

Если, с другой стороны, вы не хотите сохранять журналы журнала, но только текстовые журналы syslog-ng, установите Storage=volatile и ForwardToSyslog=yes в /etc/systemd/journald.conf . Это будет хранить journald в ram. Начиная с syslog-ng 3.6.3, syslog-ng использует journald как источник system() поэтому, если вы установите Storage = none, журнал systemd выведет все сообщения и не переадресует их в syslog-ng.

После перезапуска перезапустите демоны systemd-journald.service и syslog-ng.service .

  • systemd-journal: каково отношение dev-log и syslog?
  • Отсутствует журнал журнала systemd
  • Как получить сообщение об ошибке в journald
  • В journald, почему некоторые записи журнала sshd не относятся к ssh.service
  • Как получить текущий _BOOT_ID в журнале
  • Как я могу получить список попыток входа в систему с помощью журналаctctl?
  • Является ли systemd-journald реализацией syslog?
  • Передать журналы из файла в journald
  • Должен ли я использовать отдельные файлы журналов или записывать все в журнал?
  • Как восстановить `/ dev / log` в хосте systemd + rsyslog?
  • Как определить исходный процесс журнала, порожденный службой systemd?
  • Linux и Unix - лучшая ОС в мире.