Запись в 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, если вас кого-то беспокоит порядок данных. Пожалуйста, поправьте меня.