如何在Logs Insights中使用相同字段名解析日志并展示指定列?
解决CloudWatch Logs Insights重复字段解析报错的方案
你遇到的问题是两次parse语句重复定义了token和error字段,导致Logs Insights抛出字段已定义的错误。以下两种方法可以实现用相同字段名解析不同日志格式,最终只展示Token和Error两列:
方法一:临时字段+合并取值
先将两种日志格式解析到不同的临时字段,再通过coalesce函数将非空值合并到目标字段:
fields @timestamp, @message | filter @message like /Failed Token|APN failed/ | parse @message "Failed Token: * Error: *" as temp_token, temp_error | parse @message "device: * reason: *" as temp_token2, temp_error2 | fields token = coalesce(temp_token, temp_token2), error = coalesce(temp_error, temp_error2) | display token, error
coalesce会依次返回第一个非空的字段值,确保匹配到对应日志格式的解析结果能被正确赋值到token和error。
方法二:使用ifnotexists参数
在第二次parse语句后添加ifnotexists参数,让该语句仅在token或error字段未被前一次赋值时才执行,避免重复定义:
fields @timestamp, @message | filter @message like /Failed Token|APN failed/ | parse @message "Failed Token: * Error: *" as token, error | parse @message "device: * reason: *" as token, error ifnotexists | display token, error
这个方式更简洁,直接复用目标字段名,只有当第一次parse没匹配到对应日志格式(也就是字段未赋值)时,才会执行第二次parse。
内容的提问来源于stack exchange,提问作者RanH
相关产品推荐
相关产品推荐

