1

これがSO、SuperUser、またはServerFaultの質問であるかどうかはわかりませんが、WindowsマシンにFlumeNodeサービスをインストールしたばかりで、名前付きパイプを介してログイン情報をFlumeNodeに送信したいと思いました。

Flume Cookbookには、名前付きパイプをFlumeに合わせることができると記載されていますが、これにはcygwinが必要であり、すべてのFlumeノードにcygwinをインストールする可能性は低いようです。クックブックの手順は次のとおりです。

データをFlumeに直接パイプできるため、コンソールソースは便利です。次の例では、プログラムからFlumeにデータをパイプ処理し、Flumeがデータを配信します。

$ <external process> | flume node_nowatch -1 -s -n foo -c
'foo:console|agentBESink("collector");'

理想的には、名前付きパイプにデータを書き込み、Flumeにテキストまたはテールを使用して名前付きパイプからデータを読み取らせることができます。残念ながら、このバージョンのFlumeのテキストとテールは、現在Linux環境の名前付きパイプと互換性がありません。ただし、stdinコンソールでリッスンしているFlumeノードにデータをパイプすることはできます。

$ tail -f namedpipe | flume node_nowatch -1 -s -n foo -c
'foo:console|agentBESink;'

または、execソースを使用してその出力データを取得できます。

$ flume node_nowatch -1 -s -n bar -c 'bar:exec("cat
pipe")|agentBESink;'

このアイデアに関するグーグルグループの議論も見つけました。Clauderaの人々はそれが可能だと言っているようですが、Flumeがパイプに接続する方法と、その場合にサーバーまたはクライアントとして機能するかどうかを具体的に説明するものはありません。

理想的には、アプリケーションでNamedPipeClientSteramまたはを作成できるはずです。NamedPipeServerStreamクライアントは名前付きパイプサーバーが実行されている必要があり、クライアントはそれに接続するクライアントを探します。Flumeがサーバーとして機能すると思いますが、確認できません。例えば

NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "FlumeNamedPipe", PipeDirection.Out, pIpeOptions.None);
pipeClient.Connect();

WindowsでFlumeサービスを開始するときに、パイプを調整するためにコマンドライン引数に追加できるものはありますか?

4

2 に答える 2

0

ログをテーリングする代わりに、NLogとlog4net用の.NetFlumeアペンダーを作成しました。Flumeによって公開されたthriftバインディングを使用します。これらは現在、ThriftLegacySourceと呼ばれています。Avroに基づくFlumeの新しいバインディングには、現在C#クライアントがないため、これが私が考えることができる唯一の賢明な代替手段でした。

アペンダーはnugetでインストールされます:

インストールパッケージDotNetFlumeNG.Client.log4net

インストールパッケージDotNetFlumeNG.Client.NLog

完全なドキュメントはここにあります:https ://github.com/marksl/DotNetFlumeNG.Clients

于 2013-01-11T04:04:02.960 に答える
0

Clauderaから回答がありましたが、Windowsには組み込みのtailプログラムがないため、そのような機能にはCygwinを使用する必要があるとのことです。cygwinをインストールしたくないので、別の解決策を探しています。

Clauderaによると、別の方法は、同じWindowsボックス上のThriftソースを使用してデータをFlumeエージェントに送信するC# Thriftバインディングを使用することです。FlumeエージェントのThriftソースをどのように指定するかは正確にはわかりませんが、おそらくそれは可能です。

于 2011-07-20T21:25:35.517 に答える