如何将命名管道尾部连接到Flume Windows节点(Flume node Service)

本文关键字:Flume 节点 Windows node Service 连接 尾部 管道 | 更新日期: 2023-09-27 18:02:45

不确定这是SO, SuperUser还是ServerFault问题,但我刚刚在我的windows机器上安装了fluenode服务,我想通过命名管道向fluenode发送日志信息。

Flume Cookbook指出,我们可以将命名管道尾部指向Flume,但这似乎需要cygwin,而且我们不太可能在所有Flume节点上安装cygwin。以下是食谱中的说明:

控制台源很有用,因为我们可以将数据输送到Flume中直接。下一个示例将数据从程序输送到Flume中然后交付。

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

理想情况下,您可以将数据写入命名管道,而只让Flume读取使用文本或尾从命名管道获取的数据。不幸的是,这个版本Flume的文本和尾部目前与命名管道不兼容在Linux环境下。但是,您可以将数据管道传输到Flume节点在stdin控制台中监听:

$ 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群组中发现了一个关于这个想法的讨论,似乎Claudera的人说这是可能的,但是没有具体解释Flume如何连接到管道,以及在这种情况下它是作为服务器还是客户端。

理想情况下,我应该能够在我的应用程序中创建一个NamedPipeClientSteramNamedPipeServerStream。客户端需要一个命名管道服务器正在运行,并且客户端查找连接到它的客户端。我认为Flume将充当服务器,但我不能确定。例如

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

在Windows中启动Flume服务时,是否可以在命令行参数中添加一些内容以跟踪管道?

如何将命名管道尾部连接到Flume Windows节点(Flume node Service)

我得到了claudia的回应,他们说,因为windows没有内置的tail程序,所以需要使用Cygwin来实现这样的功能。我们不想安装cygwin,所以我正在寻找一个替代的解决方案。

根据Claudera的说法,另一种选择是使用c# Thrift绑定,它会将数据发送到同一个Windows盒子上具有Thrift源的Flume代理。我不太确定如何为Flume代理指定Thrift源,但应该可以这样做。

作为跟踪日志的替代方法,我为NLog和log4net创建了一个。net Flume appender。它使用Flume公开的节俭绑定。这些现在被称为ThriftLegacySource。Flume基于Avro的新绑定目前还没有c#客户端,所以这是我能想到的唯一明智的选择。

附件是用nuget安装的:

安装包DotNetFlumeNG.Client.log4net

安装包DotNetFlumeNG.Client.NLog

完整的文档在这里:https://github.com/marksl/DotNetFlumeNG.Clients