尾部多个远程文件并管道结果

时间:2015-05-19 20:44:10

标签: bash logging ssh

我正在寻找一种方法来管理多个远程服务器上的多个日志文件,然后将结果传递给另一个程序。

现在我使用多头,但它并不完全符合我的需要,或者我做错了什么!

我希望能够将所有日志文件的合并发送到另一个程序。例如jq。现在,如果我这样做:

multitail --mergeall -l 'ssh server1 "tail -f /path/to/log"' -l 'ssh server2 "tail -f /path/to/log"' -l 'ssh server3 "tail -f /path/to/log"' | jq .

例如,我明白了:

parse error: Invalid numeric literal at line 1, column 2

但更一般地说,我想将此输出提供给我用来解析和显示日志的另一个程序: - )

谢谢大家!

1 个答案:

答案 0 :(得分:1)

实现这一壮举的一种方法是将所有输出组合成一个named pipe,然后处理该命名管道的输出。

首先,创建命名管道:$ mknod MYFIFO p

对于要整合来自$ tail -f logfile > MYFIFO的行的每个位置(注意,尾部-f可以通过ssh会话运行)。

然后让另一个进程从命名管道中取出数据并适当地处理它。一个丑陋的解决方案可能是:

$ tail -f MYFIFO | jq

品尝季节。