问题描述
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
这种方法有效,但非常麻烦,因为存在许多不同类型的错误,如果要实施此解决方案,则需要检查每个错误并为每个错误开发正则表达式。
解决方法
子孙后代的答案:
也许 cluster
命令会有所帮助。它将类似的消息分组在一起。