带有unix-stream目的地的syslog-ng

时间:2013-09-17 13:49:31

标签: sockets unix ipc syslog-ng

我正在尝试配置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套接字?任何人都可以帮助我。

1 个答案:

答案 0 :(得分: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-single/index.html#configuring-destinations-pipe

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

原因,作家将阻止,直到有一个读者。缺少读者将导致丢失一些消息,这些消息在Reader Started之前累积。并且应该只有一个Reader实例。如果有多个读取器,则第二个读取器将获得空指针异常,因为它想要读取的消息已被第一个读取器读取。请注意,这是根据我的经验。让我知道,如果我错了。