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 使用 text 或 tail 从命名管道读取数据。不幸的是,这个版本的 Flume 的 text 和 tail 目前不兼容 Linux 环境中的命名管道。但是,您可以将数据通过管道传输到在标准输入控制台上侦听的 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 如何连接到管道以及在这种情况下它是否充当服务器或客户端。

理想情况下,我应该能够在我的应用程序中创建 aNamedPipeClientSteram或 a NamedPipeServerStream。客户端需要一个命名管道服务器来运行,并且客户端寻找连接到它的客户端。我假设 Flume 将充当服务器,但我无法确认这一点。例如

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

在 Windows 中启动 Flume 服务时,是否可以将某些内容添加到命令行参数中,以拖尾管道?

4

2 回答 2

0

我收到了 Claudera 的回复,他们说由于 Windows 没有内置tail程序,因此需要使用 Cygwin 来实现此类功能。我们不想安装cygwin,所以我正在寻找替代解决方案。

根据 Claudera 的说法,另一种方法是使用 C# Thrift 绑定,它将数据发送到 Flume 代理和同一 Windows 机器上的 Thrift 源。我不确定您如何为 Flume 代理指定 Thrift 源,但据说可以做到。

于 2011-07-20T21:25:35.517 回答
0

作为拖尾日志的替代方法,我为 NLog 和 log4net 创建了一个 .Net Flume appender。它使用 Flume 公开的 thrift 绑定。这些现在称为 ThriftLegacySource。Flume 基于 Avro 的较新绑定目前没有 C# 客户端,所以这是我能想到的唯一明智的选择。

附加程序是使用 nuget 安装的:

安装包 DotNetFlumeNG.Client.log4net

安装包 DotNetFlumeNG.Client.NLog

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

于 2013-01-11T04:04:02.960 回答