【问题标题】:Tail multiple remote files and pipe the result跟踪多个远程文件并通过管道传输结果
【发布时间】:2015-05-21 00:32:05
【问题描述】:

我正在寻找一种在多个远程服务器上通过管道传输多个日志文件的方法,然后将结果通过管道传输到另一个程序。

现在我正在使用 multitail,但它并不能完全满足我的需求,或者我做错了什么!

我希望能够将所有日志文件的合并发送到另一个程序。例如 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

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

谢谢大家!

【问题讨论】:

  • 您希望从grep 声明中发生什么?我不希望grep 对像multitail 这样的ncurses 程序做任何有用的事情,同样令人困惑的是,它看起来像是在查看当前目录(.)而不是标准输入。如果没有到grep 的管道,你会得到同样的错误吗?
  • grep 是一个错字>

标签: bash logging ssh


【解决方案1】:

实现这一壮举的一种方法是将所有输出通过管道传输到named pipe,然后处理来自该命名管道的输出。

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

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

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

$ tail -f MYFIFO | jq

调味。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多