如何从CloudWatch日志中查询存在OrderId: undefined报错对应的有效OrderId值
问题解答
可以实现,直接使用CloudWatch Logs Insights即可完成需求,无需额外工具。
实现逻辑
- Lambda每一次调用产生的所有日志都会自动绑定同一个
@requestId内置字段,同一段START到END区间的日志@requestId完全一致 - 首先筛选出所有包含
OrderId: undefined错误的日志对应的@requestId集合 - 再拉取上述
@requestId对应的所有日志行,从中提取符合OrderId: 数字格式的有效值即可
CloudWatch Logs Insights 示例查询语句
# 筛选存在OrderId: undefined错误的RequestId集合 fields @requestId | filter @message like /OrderId: undefined/ | into @error_requests # 匹配错误RequestId对应的日志,提取有效OrderId fields @message | filter @requestId in @error_requests | filter @message like /OrderId: \d+/ | display @message | sort @timestamp desc
运行上述查询后,输出结果和预期格式完全一致。
本地处理方案(可选)
如果需要批量处理大量历史日志,也可以将CloudWatch日志导出到本地后,用awk工具直接处理,示例命令如下:
awk ' /^START/{req_id=$3; delete logs; has_error=0} {logs[NR]=$0} /OrderId: undefined/{has_error=1} /^END/{ if(has_error){ for(i in logs){ if(logs[i] ~ /^OrderId: [0-9]+$/){ print logs[i] } } } }' 你的本地日志文件路径
内容的提问来源于stack exchange,提问作者I'll-Be-Back
相关产品推荐
相关产品推荐

