我正在尝试为我们的 tomcat 应用程序设置一个好的日志分析器。我能够使用 python regex 和 panda stats 功能创建一个基本的解析器和分析器。
解析器主要解析时间戳、日志级别、线程类、线程名称和错误部分。
但是错误部分并不统一,没有遵循特定的模式。即使忽略堆栈跟踪并仅解析主要错误部分,它仍然没有特定的模式,因为使用了来自不同供应商的插件,并且每个插件都遵循不同的规则来显示错误。
可以做的一件事是手动广泛识别和分组错误并创建参考子解析规则文件。我们已经通过使用参考 xml(基于供应商提供的 xml 来识别已知错误)做到了这一点。但为未知错误添加新规则需要付出很多额外的努力
我在想,如果我们可以手动解析,是否可以仅使用解析器而不使用参考表来做到这一点。
例子:
logAncestorsTableFailure Detected ancestors table corruption for pageId: 715588532. Access to this page is blocked for all users as inherited permissions cannot be determined. To resolve this, rebuild the ancestors table. See https://confluence.atlassian.com/display/DOC/Rebuilding+the+Ancestor+Table
logAncestorsTableFailure Detected ancestors table corruption for pageId: 685814402. Access to this page is blocked for all users as inherited permissions cannot be determined. To resolve this, rebuild the ancestors table. See https://confluence.atlassian.com/display/DOC/Rebuilding+the+Ancestor+Table
为了识别上述错误,我可以为其创建一个参考规则:logAncestorsTableFailure 检测到 pageId 的祖先表损坏
这种方法存在两个问题:
- 我们不知道错误信息的其余部分是否相似或不同。因此,在这种方法中,我们可能会错过之前未发现的重要错误。
- 如前所述,它需要最初的努力来识别所有可能的错误消息和所有模式。
因此,是否有可能在不使用此类参考的情况下对其进行解析,或者我们需要介入人工智能来解决此类问题?
如果我自己查看错误,我就能发现其中的规律。这是人类智慧在起作用吗?
换句话说,是否可以使用某种聚合器来自动识别类似的模式?
答案1
理论上是否有可能不使用人工智能来创建具有手动解析质量的日志解析器/分析器?
当然。你只需要拿一本最新版的《剑桥英语语法》,并按照其 1,860 页中描述的所有规则进行练习。你还需要一本像样的英语词典 - 一个完整的数据库,这可能会占用大量空间。
总而言之,您必须简化任务,这意味着定期查看日志,识别对您有意义的关键字和序列,并继续改进您的过滤或排序算法。