想象一下,一些 Linux 系统有各种各样的脚本(主要是 PERL,但可以是任何写入 STDERR 的脚本),这些脚本由具有略微不同需求的不同用户运行数百次。
每次运行脚本时,都会保留输出和警告/错误 (stderr) 的日志。这意味着会累积数千条日志。
用户会犯错误。开发人员也并不总是能写出干净的代码,等等。
我们希望从日志中了解正在发生的事情,既可以(从编程上)了解每种情况下的情况,也可以(从管理上、分析上)了解一段时间内的趋势。
这个问题也可以在 web 服务器/cgi 上下文中考虑,因为它通常会生成数百次脚本运行,但我并不是在寻找 apache 访问/错误日志特有的解决方案。
一般来说,有哪些免费/开源软件工具可以用来识别和分析来自这样的日志集合(其中每个日志代表一个程序的一次运行)的异常输出?
有用的功能可能包括:
- 可以将本次运行的 stdout/stderr 与历史输出进行比较,并确定 stdout 或 stderr 的哪些部分不寻常或值得注意
- 可以通过将所有日志以纯文本形式存储来实现“压缩”,因为无需存储相同的错误 100 次或更多次
- 可以分析整个商店的趋势(此消息出现的次数比过去少或多)以及计数(最常见的错误是这些)
- 具有某种可浏览的用户界面,带有图形和数据导出功能
例如,可以获取所有来自 stderr 的日志,对其进行 cat 处理,然后通过 sort 和 uniq -c 运行它们,再进行 sort,以从最不常见到最常见列出错误字符串。还可以开始将日志转储到某种 SQL 数据库中。
这可能会成为工具的构建块,但也许已经有完整的软件包可以做到这一点,甚至更多。所以我想我会问一下其他人使用什么。
您是否为此类事情开发了内部工具,或者是否有好的开源替代品?
答案1
这听起来像Splunk可以很好地满足您的许多需求(如果不是全部的话)。运行并进行评估相当容易。如果您已经考虑过它,也许可以评论一下为什么它不适合您的需求。
干杯
答案2
我的想法是:使用小(http://opensource.eyemg.com/Petit) 来分析,而不是 uniq。日志可以以 .gz 格式存储,因此以下内容可能实现您的前 3 个目标,并且它是 GPL。没有图形界面或导出概念。
zcat logfile.gz | petit --hash
或者
zcat logfile.gz | petit --dgraph