Назад | Перейти на главную страницу

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

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

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

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

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

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

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

Да, это возможно, и данная конфигурация уже верна *, согласно документации rsyslog: 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).

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