[英]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 以及在这种情况下它是否充当服务器或客户端。
理想情况下,我应该能够在我的应用程序中创建NamedPipeClientSteram
或NamedPipeServerStream
。 客户端需要一个名为 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
我收到了 Claudera 和他们 state 的回复,因为 windows 没有内置的tail
程序,因此需要使用 Cygwin 来实现此类功能。 我们不想安装cygwin,所以我正在寻找替代解决方案。
根据 Claudera 的说法,替代方法是使用 C# Thrift 绑定,它将数据发送到具有同一 Windows 盒子上的 Thrift 源的 Flume 代理。 我不确定您如何为 Flume 代理指定 Thrift 源,但据说可以做到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.