Emp*_*nal 10 amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs
我们使用AWS CloudWatch Logs调试在AWS上运行的服务,我们日志中的许多属性名称使用冒号作为分隔符,但我们无法弄清楚如何使用这些属性名称进行搜索.
这是一个日志的例子:
{
"Counts": {
"RouteHandler:GetCookies": {
"value": 1
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用控制台,我尝试过这样的查询:
{ $.Counts.RouteHandler:GetCookies.value = 1 }
Run Code Online (Sandbox Code Playgroud)
当然,特殊字符通常在查询语言中具有特定用途,因此我试图以某种方式逃避它.
{ $.Counts.RouteHandler\:GetCookies.value = 1 }
// JavaScript inspired
{ $.Counts["RouteHandler:GetCookies"].value = 1 }
// Special character removed
{ $.Counts.RouteHandlerGetCookies.value = 1 }
Run Code Online (Sandbox Code Playgroud)
没有什么我能想出来的工作,也许这是不可能的.这些文档似乎没有解决这种情况.
任何人都知道如何搜索属性包含特殊字符的JSON日志,或者知道这是否支持?
在新的工作中,我们将使用不同的分隔符,但我们不会回去并在任何地方进行更改.
在撰写本文时,这是不可能的。唯一的解决方法是使用非 JSON 语法并搜索确切的字符串。以下过滤器:
"\"RouteHandler:GetCookies\": {\"value\": 1}"
Run Code Online (Sandbox Code Playgroud)
将匹配此日志事件:
{"Counts": {"RouteHandler:GetCookies": {"value": 1}}}
Run Code Online (Sandbox Code Playgroud)
显然,缺点是空白和位置很重要。
小智 7
使用 CloudWatch Logs 仍然无法做到这一点,但您可以使用 CloudWatch Logs Insights 来做到这一点,无论如何,它更适合使用结构化日志记录。Logs Insights 将自动发现 JSON 日志记录中的字段,并提供带有内置命令和函数的强大查询语言。
在查询中,您只需用反引号引用属性名称,例如:
fields @timestamp, @message
| filter `Counts.RouteHandler:GetCookies.value` = 1
Run Code Online (Sandbox Code Playgroud)
从文档中:
@
您必须将查询中命名的日志字段括起来,这些字段包含除符号、句点 ( )之外的字符.
以及反引号键 ( ) 中的非字母数字字符`
。例如,日志字段foo-bar
必须用反引号 ( ) 括起来,`foo-bar`
因为它包含非字母数字字符,即连字符 (-
)。
归档时间: |
|
查看次数: |
1602 次 |
最近记录: |