0

我正在尝试配置 syslog-ng 目标路径以使用 unix-stream 套接字进行进程间通信。我已经浏览了这个文档http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.3-guides/en/syslog-ng-ose-v3.3-guide-admin- en/html/configuring_destinations_unixstream.html

我的 syslog.conf(只是其中的一部分)如下:

source s_dxtcp { tcp(ip(0.0.0.0) port(514)); };
filter f_request {program("dxall");};

destination d_dxall_unixstream {unix-stream("/var/run/logs/all.log");};
log {source(s_dxtcp); filter(f_request); destination(d_dxall_unixstream);};

当我重新启动我的 syslog-ng 服务器时,我收到以下消息:

Connection failed; fd='11', server='AF_UNIX(/var/run/logs/all.log)',
local='AF_UNIX(anonymous)', error='Connection refused (111)'
Initiating connection failed, reconnecting; time_reopen='60'

这个错误意味着什么?如何在 syslog-ng 中使用 unix 套接字?任何人都可以帮助我。

4

1 回答 1

0

到目前为止,我无法为进程间通信创建 Unix 域套接字。但我有办法解决它。我想要的只是一种单向通信,将在 syslog-ng 创建的数据发送到正在运行的 java 程序(我可以说是一个进程)。这是我通过在 Syslog-ng 中使用命名管道实现的。实现文件是http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.4-guides/en/syslog-ng-ose-v3.4-guide-admin/html-单/index.html#configuring-destinations-pipe

从命名管道读取与从普通文件读取相同。需要注意的一点是 Reader 进程(这里是 Java 程序)应该在 Syslog-ng 之前启动,(Writer,将日志消息写入命名管道)。

原因,Writer 会阻塞,直到有 Reader。没有 Reader 会导致一些消息丢失,这些消息是在 Reader 启动之前积累的。并且应该只有一个 Reader 实例。如果有多个阅读器,第二个阅读器将得到空指针异常,因为它要阅读的消息已经被第一个阅读器读取。请注意,这是根据我的经验。让我知道,如果我错了。

于 2013-10-23T12:48:18.563 回答