分布式的grep

有分布式grep的解决scheme吗?

这里有一个故事:我有一堆web服务器,并且想要查询他们的应用程序日志(如果有问题,我使用tomcat)。 我不想将这些文件复制到一个通用的存储空间,它们太大,networking价格昂贵,存储成本太高,所以我想把它们放在同一台服务器上。 所以即使haddop +蜂巢或类似的解决scheme不会飞。
所以我正在寻找的可能是一个本地代理,我可以发送grep请求到所有主机,并得到结果。
这样的东西存在吗?

  • 没有文件通过networking复制
  • 没有共同的存储
  • 不能在networking服务器上安装hadoop …我只是不能…
  • 格式化文本文件

谢谢!

顺便说一句,我问完全相同的问题http://scale.metaoptimize.com/questions/87/distributed-grep,但由于某种原因,服务器继续为我服务500秒,当我试图查看这个问题,所以我转发到这里。

对于简单的命令运行(例如在服务器日志中查找特定string),请使用并行SSH客户端(如pssh或dsh) 。

对于更复杂的任务,你可能想看看MCollective 。

尝试gnu并行可能会很有趣,也许是这样的:

把服务器放在一个文件servers.txt 。 然后:

 parallel --sshlogins servers.txt "grep foo logfile" 

我还没有尝试过自己。

我使用GNU并行进行这种任务。

 echo "fgrep -Rl <MyQuery> /var/log/" | parallel --onall --slf servers.txt 

为什么不在你的web服务器上运行类似于cron作业的东西?

grep something /path/to/log | ssh -C LogAnalyser "tee >> log_from_host X"

如果您希望能够知道LogAnalyser何时完成所有主机的转移,则可以先创build一个locking文件,然后删除。

您可以尝试MCollective http://puppetlabs.com/mcollective

其网站的描述是:

Marionette Collective AKA MCollective是构build服务器编排或并行作业执行系统的框架。 主要我们将使用它作为在服务器集群上系统pipe理操作的程序化执行手段。 在这方面,我们与Func,Fabric或Capistrano等工具在相同的空间中运作。 我们试图通过不依赖像SSH这样的中央清单和工具来devise这个系统来devise这个系统,我们不是简单的SSH“for循环”。

这是一个高度复杂的编排系统,如果你只需要执行一些简单的日志grep它可能会超出你的需求。

也许沿着下面的bash循环?

 export FQDNS="hostname.domain.tld another.domain.tld" for host in $FQDNS do ssh $host 'grep "andol was here" /var/log/syslog' done