繁体   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