有没有办法在小部件中仅过滤不包含特定日志消息的 @LogStream ?
我尝试使用带有一些过滤器的日志表,如下所示: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html 和: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html#CWL_QuerySyntax-regex
据我了解,过滤器适用于消息,但我需要一种在日志流级别进行过滤和选择的方法。
尝试过这样的事情:
找到字段@logStream,strcontains(@logStream,“[INFO] - 我的消息”)
|找到过滤器=0
|显示@logStream
|限量20个
但是过滤器不起作用,它正在显示所有消息。
谢谢!
您的查询中的
strcontains(@logStream, "[INFO] - My message") as found
部分对我来说看起来不正确。我认为您的意思是:strcontains(@message, "[INFO] - My message") as found
?
您可以按日志流过滤:
过滤@logStream = 'xxx/yyy/5d4d93708e4e42a1924fb4a1f7003ccd' |字段@timestamp、@message
据我了解,过滤器适用于消息
过滤器可以应用于任何提供的字段(通常是@messages,但也包括@ingestionTime、@log、@logStream和@timestamp)
我需要一种在日志流级别进行过滤和选择的方法
我想你想要的是这样的:
fields @message, @logStream
| filter strcontains(@message, "[INFO] - My message")
| display @logStream
| dedup @logStream
| limit 20
重复数据删除行是为了确保您只获得唯一的 logStream Id - 但实际上我怀疑您是否需要它
(如果它有帮助,恕我直言,您不太可能需要重复数据删除行的原因是因为您的字符串文字“[INFO] - 我的消息” - 假设它是您实际想要在实践中使用的代表性示例 - 很可能每个 logStream 只发生一次,因此如果您使用的是过滤器命令,则每个 logStream 只会返回一行。
| filter strcontains(@message, "the")
filter 命令更有可能为每个 logStream 返回多行,此时 dedup @logStream 命令对您变得有用)