不确定这是一个 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 服务时,是否可以将某些内容添加到命令行参数中,以拖尾管道?