什么是解析日志文件的最佳工具?

时间:2010-01-03 08:45:46

标签: python perl parsing

我使用grep来解析我的交易应用程序日志,但它在某种意义上是有限的,我需要在视觉上拖拽输出以查看发生了什么等。

我想知道Perl是否是更好的选择?有没有用Perl学习日志和字符串解析的好资源?

我也相信Python会对此有所帮助。 Perl vs Python vs'grep on linux'?

9 个答案:

答案 0 :(得分:11)

最后,它实际上取决于您想要识别多少语义,您的日志是否适合常见模式,以及您希望如何处理已分析的数据。

如果您可以使用正则表达式来查找所需内容,那么您有很多选择。 Perl是一种流行语言,具有非常方便的原生RE设施。我个人觉得使用Python更加舒服,并且发现RE的麻烦并不重要。

如果你想做一些比RE匹配更聪明的事情,或者想要有很多逻辑,你可能会更熟悉Python甚至是Java / C ++ /等。例如,它很容易在Python中逐行读取,然后对匹配应用各种谓词函数和反应,如果你有一个你想要应用的规则集,这很好。

答案 1 :(得分:4)

所有脚本语言都是不错的选择:Perl,Python,Ruby,PHP和AWK都可以。使用这些语言中的任何一种语言都比从(小)大小开始查看日志更好。

Wearing Ruby Slippers to Work是在Ruby中执行此操作的示例,以“为什么无法模仿的风格”编写。这是一个basic example in Perl。我建议你选择其中一种语言并开始破解。

答案 2 :(得分:2)

Perl对Python的一大优势是,解析文本时能够直接使用regular expressions作为语言语法的一部分。例如:

if ($line =~ m/^Regex/) {
    ... code goes here
}

Perl还将capture groups直接分配给$ 1,$ 2等,这使得它非常简单。根据您尝试解析的日志文件的格式和结构,这可能证明非常有用(或者,如果它可以解析为固定宽度文件或使用更简单的技术,根本不是很有用)。

这些只是语法糖,真的,其他语言也允许你使用正则表达式和捕获组(实际上,链接的文章显示了如何在Python中执行它)。你只需要编写更多代码并传递对象即可。

答案 3 :(得分:2)

有一个叫做Log_Analysis的Perl程序可以为你做很多分析和预处理。

答案 4 :(得分:2)

学习编程语言可以让你将日志分析能力带到另一个层次。

任何动态或“脚本”语言(如Perl,Ruby或Python)都可以完成这项工作。您应该使用什么取决于外部因素。在你应该考虑的事项中:

  • 工作已经使用了合适的 语言特点?
  • 你知道有谁可以 用合适的语言指导你?
  • 尝试一下每种语言,看看哪种语言更适合你。

就个人而言,对于上述任务,我会使用Perl。 YMMV。

喜欢Perl的几个理由:

强大的单行 - 如果你需要做一个真正快速,一次性的工作,Perl提供了一些非常好的捷径。有关示例,请参阅perlrun -n

多范式语言 - Perl支持命令式,功能性和面向对象的编程方法。

Sigils - 那些在$foo@bar等变量上带有标点字符的字符。它们有点像匈牙利符号,没有那么烦人。

Moose - 一个令人难以置信的新OOP系统,为代码组合和重用提供了强大的新OO技术。

Strictures - use strict pragma捕获了许多其他动态语言在编译时掩盖的错误。当我使用Python或PHP时,我非常想念它。

自我约束 - Perl让您可以随时自由地写作和做自己想做的事情。这意味着你必须学会​​编写干净的代码,否则你会受到伤害。幸运的是,有一些工具可以帮助初学者。 Perl::Critic对最佳实践的代码进行了类似lint的分析。

答案 5 :(得分:1)

在处理任何需要用python解析的作业时,我发现这个list非常有价值。

我不会使用perl来解析大型/复杂的日志 - 只是为了可读性(perl的速度对我来说缺乏(大型工作) - 但这可能是我的perl代码(我必须改进))。

然而,如果grep现在完全适合你的需求 - 真的没有理由陷入写一个完整的解析器。最简单的解决方案通常是最好的,而grep是一个很好的工具。

答案 6 :(得分:1)

对您的问题的另一种可能解释是“是否有任何工具可以使日志监控更容易?”,并回答我建议您查看SplunkLog4view

答案 7 :(得分:1)

在Linux上,如果日志文件的大小不是太大,你可以使用shell(bash,ksh等)来解析日志文件。其他工具通常是grep和awk。但是,为了获得更多编程能力,通常使用awk。如果要解析大文件,请尝试awk。

当然,也可以使用Perl或Python或几乎任何其他具有文件读取和字符串操作功能的语言。

答案 8 :(得分:-2)

尝试Nagios Log Monitoring

此工具最适合您的目的是:

不需要安装外包。这意味着,没有必要安装任何perl依赖项或任何可能让你紧张的愚蠢软件包。

几乎没有学习曲线。您不需要学习任何编程语言来使用它。您需要做的就是确切地知道您想要对所记录的日志做什么,并阅读该工具附带的PDF文件。

如果要解析的日志是syslog格式,可以使用如下命令:

./ NagiosLogMonitor 10.20.40.50:5444 logrobot autofig /opt/jboss/server.log 60m ' INFO' '。& #39; 1 2 - 显示

即使您的日志不是可识别的格式,仍然可以使用以下命令有效地监视它:

./ NagiosLogMonitor 10.20.40.50:5444 logrobot autonda /opt/jboss/server.log 60m ' INFO' '。& #39; 1 2 jbosslogs -ndshow

要解析特定字符串的日志,请替换' INFO'包含要在日志中查看的模式的字符串。如果您想搜索多个模式,请像这样指定它们' INFO | ERROR |致命'。

如果效率和简单(以及安全安装)对您很重要,那么这个Nagios工具就是您的选择。