我有一个 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
这种方法很有效,但非常麻烦,因为存在许多不同类型的错误,如果要实施此解决方案,则需要检查每个错误并为每个错误开发一个正则表达式。
有没有一种方法可以通过更有效地总结此错误的查询来改进?