Logs Insights 中的 AWS CloudWatch 筛选器 @LogStream

问题描述 投票:0回答:3

有没有办法在小部件中仅过滤不包含特定日志消息的 @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个

但是过滤器不起作用,它正在显示所有消息。

谢谢!

amazon-web-services amazon-cloudwatch aws-cloudwatch-log-insights
3个回答
2
投票

您的查询中的

strcontains(@logStream, "[INFO] - My message") as found
部分对我来说看起来不正确。我认为您的意思是:
strcontains(@message, "[INFO] - My message") as found


1
投票

您可以按日志流过滤:

过滤@logStream = 'xxx/yyy/5d4d93708e4e42a1924fb4a1f7003ccd' |字段@timestamp、@message


0
投票

据我了解,过滤器适用于消息

过滤器可以应用于任何提供的字段(通常是@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 命令对您变得有用)

© www.soinside.com 2019 - 2024. All rights reserved.