我正在将 Auth0 日志流式传输到 CloudWatch 日志组,现在我想查询日志以查找每个日志事件类型代码的出现情况。
类型位于字段中:
detail.data.type
,如本例所示:
Field Value
---------------------------------------------------------
@ingestionTime 1684845468149
@logStream f802329f-3cf2-3378-91a1-9f3ed9dfca20
@message {"version":"0","id": ...}
@timestamp 1684845467000
detail-type Auth0 log
detail.data.ip 11.22.33.444
detail.data.log_id 90022
detail.data.type seacft
目前,我正在运行此查询来计算每个日志事件类型的出现次数:
fields @timestamp, detail.data.type
| stats count(detail.data.type) as occurrence_count by detail.data.type
这会产生有点不清楚的结果:
detail.data.type occurrence_count
1 ssa 4
2 seacft 5
3 s 2
4 scp 1
5 scpr 1
6 fp 1
7 fcpr 1
8 fu 2
我想做的就是将神秘的
ssa
s
fp
替换为相应的 Success Silent Auth
Success Login
Failed Login (Incorrect Password)
Event Type occurrence_count
1 Success Silent Auth 4
3 Success Login 2
6 Failed Login (Password) 1
可以用replace()来完成吗?
面临同样的问题。考虑到明显的需求,有点难以想象这是如此困难。因此,建议的解决方案看起来有点难看,请随意提出更好的解决方案。
无论如何,到目前为止我想出的可行解决方案是(为了清楚起见,我们限制为 2 个值):
fields @timestamp
| filter detail.data.type = "f" OR detail.data.type = "s"
| fields replace(detail.data.type, "s", "|Success|") as text_s
| fields replace(detail.data.type, "f", "|Failure|") as text_f
| fields concat(text_s, text_f) as text_parsed
| parse text_parsed "|*|" as text
| stats count() as rCount by text
| sort by rCount desc
替换可以用来创建一个新字段。因此,我创建了 x 个专用于每个代码的新字段,并在字符串周围添加了特殊字符。然后我将它们连接成一个字符串并解析出所需的描述。
它非常丑陋,所以我希望我的过滤器在一开始确实过滤了我不感兴趣的条目,而不是将此代码应用于每个条目。