Запись в Unix Domain Socket из rsyslog

Я хочу записать выходные сообщения из rsyslog в Unix Domain Socket. Я хочу сделать это, чтобы я мог читать сообщения из этого сокета, используя мой скрипт, и анализировать сообщения журнала дальше.

Я пытаюсь использовать omuxsock но это не создавало никакого сокета.

Возможно ли это, и если я правильно настрою rsyslog для записи в сокет?

Редактировать:

Это то, что я редактировал в /etc/rsyslog.conf

$ModLoad omuxsock
$OMUxSockSocket /tmp/sock
*.* :omuxsock:

2 ответа

Да, это возможно, и данный конфиг уже корректен *, как указано в rsyslog docs: http://www.rsyslog.com/doc/v8-stable/configuration/modules/omuxsock.html.

Однако в утверждении "omuxsock ... не было создано никакого сокета" ошибочное предположение. omuxsock не должен создавать сокет; он ожидает передачи в существующий сокет. Вероятно, поэтому @HBruijn предложил включить конфигурацию, "используемую для настройки сокета".

Вот пример такой настройки в Python:

import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
sock.bind('/tmp/sock')
print(sock.recv(4096))

Это работает с конфигурацией, указанной в вопросе, и будет блокироваться, пока не получит сообщение через сокет.

Обратите внимание, что omuxsock поддерживает только SOCK_DGRAM, а не SOCK_STREAM (что было бы по умолчанию в Python в приведенном выше примере), и, следовательно, не требует подключения (думайте, что UDP не TCP).

* Предполагая, конечно, что некоторый механизм ввода также был определен и что желательно, чтобы все (не исключенное ранее) было зарегистрировано в данный сокет.

сокеты, созданные с помощью socket.SOCK_DGRAM, ненадежны, а данные, считанные получателем, могут отличаться от записей отправителя. Например, если вы получаете большое XML-сообщение (событие Windows) с использованием omuxsock, это не гарантирует порядок полученных строк, и вы не можете контролировать байты reve. Я бы предпочел использовать omprog, если вас кого-то беспокоит порядок данных. Пожалуйста, поправьте меня.

Другие вопросы по тегам