Amazon CloudWatch Logs Insights查询无结果,请求过滤解析协助
CloudWatch Logs Insights 查询无结果的修复方案
问题根源
你使用的filter @message="abc"是完全匹配逻辑,要求整个@message字段内容等于"abc",但你的日志示例中"abc"只是@message里的子串(位于[SFTP:2547246_0:abc:x.x.x.x]片段中),因此无法匹配到任何日志。
修正后的查询语句
1. 模糊匹配包含"abc"的日志
如果只需要找出所有包含"abc"字符串的日志,改用contains操作符:
fields @timestamp, @message, @logStream, @log | filter contains(@message, "abc") | sort @timestamp desc | limit 2000
2. 精准匹配特定位置的"abc"
如果要精准匹配[SFTP:...:abc:...]格式中的"abc"(比如指定是SFTP会话中的用户名为abc),可以使用正则匹配:
fields @timestamp, @message, @logStream, @log | filter @message =~ /\[SFTP:[^:]+:abc:[^\]]+\]/ | sort @timestamp desc | limit 2000
3. 解析日志字段后精准过滤
如果需要更灵活的分析,可以先用parse命令拆分@message中的关键信息(比如SFTP会话ID、用户名、IP、操作类型等),再针对提取出的字段过滤:
fields @timestamp, @message, @logStream, @log | parse @message "*|*|[SFTP:*:*:*:*] *: *" as cmd, log_timestamp, session_id, user, ip, operation, details | filter user = "abc" # 直接过滤提取出的用户名字段 | sort @timestamp desc | limit 2000
内容的提问来源于stack exchange,提问作者Nitish
相关产品推荐
相关产品推荐

