0

プロセス間通信に unix-stream ソケットを使用するように syslog-ng 宛先パスを構成しようとしています。このドキュメント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-です。 single/index.html#configuring-destinations-pipe .

名前付きパイプからの読み取りは、通常のファイルからの読み取りと同じです。注意すべき重要な点の 1 つは、リーダー プロセス (ここでは Java プログラム) を Syslog-ng (ログ メッセージを名前付きパイプに書き込むライター) の前に開始する必要があることです。

理由、Writer は Reader が存在するまでブロックします。Reader が存在しないと、Reader が起動する前に蓄積された一部のメッセージが失われます。また、Reader のインスタンスは 1 つだけである必要があります。複数のリーダーがある場合、2 番目のリーダーはヌル ポインター例外を受け取ります。これは、読みたいメッセージが最初のリーダーによって既に読み取られているためです。これは私の経験によるものであることをご了承ください。私が間違っている場合はお知らせください。

于 2013-10-23T12:48:18.563 に答える