grep本地或远程更好?

我经常login一系列服务器来查看日志中的内容。
我想通过脚本自动化,以使其更容易。
所以我的问题是哪种方法最有效率,最合理?

my @data = `ssh host grep pattern logfile` 

或者从本地下载文件(scp文件)并在本地执行grep?

这取决于

  • 日志中有多少百分比的grep过滤器
  • 可用的CPU(远程和本地)
  • scp的可用带宽
  • 可用的文件系统大小
  • 随后是否可能需要将原始日志文件用于其他目的

如果以后不需要该文件,并且如果执行远程grep不是问题,那么在数据通过网络发送之前(这通常是瓶颈)减少数据在大多数情况下都是有益的。

为了进一步减少旅行数据,你甚至可以做类似的事情

 my @data = `ssh host 'grep pattern logfile | gzip' | gunzip` 

这应该是大致相同的,为了您的目的

 my @data = `ssh -C host 'grep pattern logfile'` 

虽然我从来没有尝试过这一个。

顺便说一句,你说你使用egrep ,这很好,但我从来没有厌倦,提醒人们grep将点解释为通配符,因此fgrep (或grep -F )应该用于固定的字符串。

grep不会是“自动”的 :它必须由计算机执行。

显而易见的答案是,最好是远程执行,因为这样(可能)更少的数据行必须通过网络返回。 也就是说,除非远程机器非常慢,否则将不需要的数据联网比将其过滤更快。

你为什么不用基准比较两个选项呢? 不要开始优化,直到你有事情运作良好。

如果你使用java,你可以简单地使用grep4j库,否则如果你想要图形化的东西,你可以使用SSearcH Everywhere