如何在CloudWatch Insights中解析对象数组字段并拼接多值?
CloudWatch Insights提取数组字段并拼接值的解决方案
问题场景
需要从CloudWatch日志中提取event.detail.Entries数组内所有Code字段的值,拼接成逗号分隔的字符串,但现有查询仅能获取第一个Code值,无法拿到全部结果。
示例日志
Field Value @message {"level":"INFO","message":"Event","timestamp":"2023-04-05T20:27:42.606Z","event":{"version":"0","time":"2023-04-05T20:27:41Z","resources":[""],"detail":{"Entries":[{"Code":"C25"},{"Code":"C27"}]}}} @timestamp 1680726462608 event.detail.Entries.0.Code C25 event.detail.Entries.1.Code C27 event.time 2023-04-05T20:27:41Z event.version 0 level INFO message Event timestamp 2023-04-05T20:27:42.606Z
期望结果
@timestamp code 2023-04-05T20:27:42.606Z C25,C27
已尝试的查询(仅返回第一个值)
filter message like /Event/ | parse @message '{"Code":"*"}' as code | sort @timestamp desc | limit 20
解决方法
使用CloudWatch Insights的map和array_join函数处理数组字段,直接提取并拼接所有Code值:
filter message like /Event/ | fields @timestamp, array_join(map(event.detail.Entries, x -> x.Code), ",") as code | sort @timestamp desc | limit 20
逻辑说明
event.detail.Entries是CloudWatch已自动解析完成的数组字段,包含所有Entry元素map(event.detail.Entries, x -> x.Code)遍历数组中的每个元素,提取出每个元素的Code值,生成一个新的字符串数组array_join(..., ",")将生成的字符串数组用逗号拼接成单个字符串,最终得到所有Code值的拼接结果
内容的提问来源于stack exchange,提问作者TouchA
相关产品推荐
相关产品推荐

