Mic*_*ryl 5 amazon-web-services amazon-cloudwatch
我的公司已开始使用 JSON 日志记录,以便更好地支持 AWS 上的 CloudWatch InSights 查询。查询非常容易使用,除非我们处理数组数据。
例如,如果我们有如下所示的日志条目:
{
"id": 123,
"method": "getRelatedPolicies",
"policiesRetrieved": [
"333g",
"444q"
]
}
{
"id": 222,
"method": "getRelatedPolicies",
"policiesRetrieved": [
"123q",
"234w",
"345e",
"456r"
]
}
{
"id": 432,
"method": "getRelatedPolicies",
"policiesRetrieved": [
"345e"
]
}
Run Code Online (Sandbox Code Playgroud)
它们在 CloudWatch Insights 中展平,如下所示:
id 123,
method getRelatedPolicies
policiesRetrieved.0 333g
policiesRetrieved.1 444q
id 222,
method getRelatedPolicies
policiesRetrieved.0 123q
policiesRetrieved.1 234w
policiesRetrieved.2 345e
policiesRetrieved.3 456r
id 432,
method getRelatedPolicies
policiesRetrieved.0 345e
Run Code Online (Sandbox Code Playgroud)
但是我该怎么做才能搜索policiesRetrieved 数组包含该值的任何日志条目呢345e
?数组中可能有任意数量的条目,所以我不能只是开始添加像or policiesRetrieved.0 = "345e" or policiesRetrieved.1 = "345e"...
.
如果我可以将所有值折叠成一个分隔字符串,那么我就可以在字符串中搜索匹配项,此外,如果用户将数据导出为 CSV 或其他非 AWS 格式以进行进一步的操作,我还可以轻松使用该列表分析。
我可以以某种方式将数组值解析为字符串吗?我已经浏览了查询中所有可用的辅助函数,但没有任何一个让我觉得可行。
任何解决方案将不胜感激。
因此,我的特定情况的解决方案非常简单,因为相关数组仅包含字符串。[
我只是将and内的数组内容解析]
为单个字符串。这适用于字符串、数字或布尔值的数组。如果我想提取一组对象的 ID,那就不太好了。
无论如何,下面是一个解析数组中字符串的示例查询:
fields @timestamp, id, method # you don't need to put the 'policyNumbers' up here - it is added automatically
| parse @message '"policyNumbers":[*]' as policyNumbers
#| filter policyNumbers like '234w' # Uncomment to show only entries that mention a specific policy
Run Code Online (Sandbox Code Playgroud)
这将解析以下行:
{"timestamp":"2020-07-21T12:03:46.970Z","id":222,"method": "getRelatedPolicies","dataAccess":{"policyNumbers":["123q", "234w", "345e", "456r"]}}}
Run Code Online (Sandbox Code Playgroud)
存在id
,222
存在method
,getRelatedPolicies
并policyNumbers
具有价值"123q", "234w", "345e", "456r"
归档时间: |
|
查看次数: |
25276 次 |
最近记录: |