字符串包含的 AWS Log Insights 查询

kum*_*mar 38 amazon-cloudwatch

如何使用 AWS Log 洞察中的包含字符串进行查询

fields @timestamp, @message
filter @message = "user not found"
| sort @timestamp desc
| limit 20

fields @timestamp, @message
filter @message strcontains("User not found")
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

小智 48

这应该可以正常工作

fields @timestamp, @message
| filter @message like /user not found/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

  • 为了清楚起见,正斜杠将您要搜索的字符串括起来。例如,我正在寻找 HTTP 500 错误,因此我的字符串如下所示:`| 过滤@message,例如/ 500 /` (3认同)

sup*_*ova 17

我一直在寻找containsin过滤器。允许的过滤选项有:

'in', 'and', 'or', 'not', 'like', '=~', '~=', '|', '|>', '^', '*', '/', '%', '+', '-', '<', '>', '<=', '>=', '=', '!='
Run Code Online (Sandbox Code Playgroud)

因此,使用like 的解决方案似乎也是运营商方面的最佳版本。

fields @timestamp, @message
| filter @message like /user not found/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

尽管如此,还有另一种可能性来解析消息本身,并对需要更准确的用例进行同等比较。对于格式化的日志行,例如:

2020-12-24T19:08:18.180+01:00 [main] INFO com.foo.bar.FooBar - My log message!
Run Code Online (Sandbox Code Playgroud)

您可以解析消息中的子字符串并将它们分配给一个字段,然后可以使用等号运算符(“=”)过滤该字段。在下面的示例中,您可以看到消息中没有“INFO”字符串会干扰过滤严重性:

fields @timestamp, @message
| parse @message "[*] * *" as @level, @severity, @info
| filter @logStream like "my/stream/within/loggroup"
| filter @severity="INFO"
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)


Car*_*los 16

我认为您需要选择它们作为字段,然后过滤它们的值。例如:

fields @timestamp, @message, strcontains(@message, "user not found") AS unf
| filter unf=1
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)

或者使用正则表达式

fields @timestamp, @message
| filter @message like /User\snot\sfound/
| ...
Run Code Online (Sandbox Code Playgroud)

(尚未测试它们)


Eri*_*nga 8

在 AWS Log Insights 中检查消息是否包含子字符串/文本的不同方法

1.UsingLIKE子句(文档
fields @timestamp, @message
| filter @message like /user not found/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)
2. 使用strcontains字符串方法(文档
fields @timestamp, @message
| filter strcontains(@message, "User not found")
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)
3.使用正则字符串方法
fields @timestamp, @message
| filter @message =~ /.*User not found.*/
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)


sas*_*ash 5

我最近遇到了同样的情况。strcontains 将输入字符串作为第一个参数,将搜索值作为第二个参数。所以在你的情况下,以下应该可以正常工作。

fields @timestamp, @message
| filter strcontains(@message, "User not found")
| sort @timestamp desc
| limit 20
Run Code Online (Sandbox Code Playgroud)