不确定这是一个so、superuser还是serverfault问题,但我刚刚在我的windows机器上安装了flumenode服务,我想通过一个命名管道将日志信息发送到flumenode。
FlumeCookbook声明我们可以将命名管道尾随到flume,但这似乎需要cygwin,而且我们不太可能在所有flume节点上安装cygwin。以下是食谱中的说明:
控制台源非常有用,因为我们可以将数据直接导入flume。下一个示例将程序中的数据导入flume,然后flume将其传递。
$ <external process> | flume node_nowatch -1 -s -n foo -c
'foo:console|agentBESink("collector");'
理想情况下,您可以将数据写入命名管道,并让flume使用文本或尾部从命名管道读取数据。不幸的是,这个版本的flume的text和tail当前与linux环境中的命名管道不兼容。但是,可以通过管道将数据传输到侦听stdin控制台的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;'
我还发现了一个关于谷歌小组讨论这个想法,似乎克劳德拉的人说这是可能的,但没有具体解释flume将如何连接到管道,如果它作为服务器或客户端在这种情况下。
理想情况下,我应该能够创建一个 NamedPipeClientSteram
或者 NamedPipeServerStream
在我的申请表里。客户机需要一个命名管道服务器才能运行,而客户机会查找连接到它的客户机。我假设Flume将作为一个服务器,但我不能证实这一点。例如
NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "FlumeNamedPipe", PipeDirection.Out, pIpeOptions.None);
pipeClient.Connect();
在windows中启动flume服务时,是否可以在命令行参数中添加一些内容来跟踪管道?
2条答案
按热度按时间xe55xuns1#
我收到了克劳德拉的回复,他们说既然windows没有内置
tail
在这个程序中,需要使用cygwin来实现这样的功能。我们不想安装cygwin,所以我正在寻找一个替代解决方案。根据claudera的说法,另一种方法是使用c#thrift绑定,它将数据发送给flume代理,该代理在同一个windows设备上有一个thrift源。我不太清楚如何为flume代理指定一个节俭源,但应该可以做到。
ffvjumwh2#
作为跟踪日志的替代方法,我为nlog和log4net创建了一个.net flume appender。它使用Flume暴露的旧绑定。这些现在被称为节俭的来源。flume基于avro的新绑定目前没有c#客户机,因此这是我能想到的唯一明智的选择。
appender与nuget一起安装:
安装包dotnetflumeng.client.log4net
安装包dotnetflumeng.client.nlog
完整文档如下:https://github.com/marksl/dotnetflumeng.clients