2011-07-19 42 views
1

不知道這是一所以,超級用戶或ServerFault的問題,但我剛剛安裝在我的Windows機器上的FlumeNode服務,我想通過發送記錄infromation到FlumeNode的命名管道。如何尾命名管道到水槽的Windows節點(水槽節點服務)

Flume Cookbook聲明我們可以將命名管道拖尾到Flume,但似乎這需要cygwin,並且我們不太可能在所有Flume節點上安裝cygwin。以下是食譜的說明:

控制檯資源非常有用,因爲我們可以直接將數據傳輸到Flume 。下一個示例將程序中的數據傳輸到Flume中,然後 將其傳遞。

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

理想情況下,你可以寫數據到一個命名管道,只是有水槽用文字或尾部從命名管道讀取數據 。不幸的是,Flume的文本和尾部版本 目前與Linux環境中的命名管道 不兼容。但是,你可以管數據傾聽標準輸入控制檯上的一個水槽節點 :

$ 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;' 

我還發現一個google groups regarding this idea討論,似乎Claudera人說,這是可能的,但並沒有什麼具體的解釋水槽將如何連接到一個管道,如果它充當服務器或CL在這種情況下。

理想情況下,我應該可以在我的應用程序中創建NamedPipeClientSteramNamedPipeServerStream。客戶端需要一個命名管道服務器才能運行,客戶端會查找連接到它的客戶端。我假設Flume將充當服務器,但我無法證實這一點。例如。

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

有什麼東西可以添加到命令行參數,當在Windows啓動Flume服務,以便尾巴管道?

回答

0

我收到了Claudera的回覆,他們說由於windows沒有內置的tail程序,所以需要使用Cygwin來實現此類功能。我們不想安裝cygwin,所以我正在尋找替代解決方案。

根據Claudera的說法,另一種方法是使用C#Thrift bindings,該數據將在同一Windows窗口中將帶有Thrift源的Flume代理髮送到Flume代理。我並不確定您是如何爲Flume代理指定Thrift源代碼的,但據說它可以完成。

0

作爲替代拖尾日誌,我創建了一個淨水槽附加器用於NLOG和log4net的。它使用Flume公開的節儉綁定。這些現在稱爲ThriftLegacySource。 Flume基於Avro的較新綁定目前沒有C#客戶端,所以這是我能想到的唯一明智的選擇。

的追加程序都安裝的NuGet:

安裝,包裝DotNetFlumeNG.Client.log4net

安裝,包裝DotNetFlumeNG.Client.NLog

完整文檔是在這裏:https://github.com/marksl/DotNetFlumeNG.Clients