0

我有一个 splunk 查询,它按频率生成汇总错误

index="pc_1" LogLevel=ERROR 
   | eval Message=split(_raw,"|") 
   | stats count(LogLevel) as Frequency by Message 
   | sort -Frequency

这会产生以下形式的结果

信息 频率
没有这样的用户 137
无法将邮件传递到 example@email.com:无法访问服务器 70
无法将邮件传递到 example1@email.com:无法访问服务器 43
无法验证用户 3456 8
无法将邮件传递到 example2@email.com:无法访问服务器 6
无法验证用户 2321 5
无法验证用户 13321 3
... .
... .
... .
无法将邮件传递到 examplen@email.com:无法访问服务器 1

正如您在生成的结果中注意到的那样,一些类似的错误正在根据用户电子邮件 ID 和机器 ID 的差异进行拆分。我正在寻找一种方法可以根据字符串的相似性对其进行分组。目前我正在使用的是用常见的正则表达式替换字符串,然后找到频率

index="pc_1" LogLevel=ERROR 
   | eval Message=split(_raw,"|")

   | eval Message=replace("unable to deliver mail to (.)* Unable to reach server", "unable to deliver mail to [email]: Unable to reach server")
   | eval Message=replace("unable to authenticate user \d+", "unable to authenticate user [userId]")

   | stats count(LogLevel) as Frequency by Message 
   | sort -Frequency

这种方法很有效,但非常麻烦,因为存在许多不同类型的错误,如果要实施此解决方案,则需要检查每个错误并为每个错误开发一个正则表达式。

有没有一种方法可以通过更有效地总结此错误的查询来改进?

4

1 回答 1

1

后人回答:

也许该cluster命令会有所帮助。它将喜欢的消息组合在一起。

于 2021-02-10T12:14:02.633 回答