簡體   English   中英

如何將命名的 pipe 尾隨到 Flume Windows 節點(Flume 節點服務)

[英]How to tail a named pipe to Flume Windows node (Flume Node Service)

不確定這是一個 SO、SuperUser 還是 ServerFault 問題,但我剛剛在我的 windows 機器上安裝了 FlumeNode 服務,我想通過名為 pipe 的 FlumeNode 發送日志信息。

Flume Cookbook指出我們可以將命名的 pipe 尾隨到 Flume,但這似乎需要 cygwin,我們不太可能在所有 Flume 節點上安裝 cygwin。 以下是食譜中的說明:

控制台源很有用,因為我們可以將 pipe 數據直接導入 Flume。 下一個示例將程序中的數據通過管道傳輸到 Flume,然后由 Flume 傳遞數據。

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

理想情況下,您可以將數據寫入名為 pipe 的名稱中,然后讓 Flume 使用文本或尾部從名為 pipe 的名稱中讀取數據。 不幸的是,這個版本的 Flume 的 text 和 tail 目前與 Linux 環境中的命名管道不兼容。 但是,您可以將 pipe 數據發送到在標准輸入控制台上偵聽的 Flume 節點:

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

或者您可以使用 exec 源獲取其 output 數據:

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

我還發現了關於這個想法的關於谷歌群組的討論,似乎克勞德拉人說這是可能的,但沒有具體解釋 Flume 如何連接到 pipe 以及在這種情況下它是否充當服務器或客戶端。

理想情況下,我應該能夠在我的應用程序中創建NamedPipeClientSteramNamedPipeServerStream 客戶端需要一個名為 pipe 的服務器才能運行,並且客戶端會尋找連接到它的客戶端。 我假設 Flume 將充當服務器,但我無法確認這一點。 例如

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

在 Windows 中啟動 Flume 服務時,是否可以在命令行 arguments 中添加一些內容,以便尾隨 pipe?

作為拖尾日志的替代方法,我為 NLog 和 log4net 創建了一個.Net Flume appender。 它使用 Flume 公開的 thrift 綁定。 這些現在稱為 ThriftLegacySource。 Flume 基於 Avro 的較新綁定目前沒有 C# 客戶端,所以這是我能想到的唯一明智的選擇。

附加程序與 nuget 一起安裝:

安裝包 DotNetFlumeNG.Client.log4net

安裝包 DotNetFlumeNG.Client.NLog

完整的文檔在這里: https://github.com/marksl/DotNetFlumeNG.Clients

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

根據 Claudera 的說法,替代方法是使用 C# Thrift 綁定,它將數據發送到具有同一 Windows 盒子上的 Thrift 源的 Flume 代理。 我不確定您如何為 Flume 代理指定 Thrift 源,但據說可以做到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM