我有这个 AWS CloudWatch 查询,它是我通过 AWS CLI 使用
aws logs start-query
: 创建的
display @timestamp, @message
| sort @timestamp asc
| filter @message not like "GET / HTTP/1.1"'
使用
aws logs get-query-results
时,此查询会根据需要返回 @timestamp
和 @message
,但还会返回一个额外的 @ptr
字段。
如何更改查询以不返回
@ptr
字段?
服务器端,无法过滤掉作为日志记录标识符的
@ptr
字段。它由 GetQueryResults
在 API 级别返回,并且没有选项可以将其从结果中排除。
但是,在客户端,一些
jq
魔法可以从 AWS CLI 输出中删除 ptr
字段。
尝试:
aws logs get-query-results \
--query-id 'xxx' \
| jq 'del(.results[][] | select(.field == "@ptr"))'
此过滤器告诉
jq
删除 results
内每个数组中的所有对象,其中“field”等于 @ptr
。
过滤前的输出:
{
"results": [
[
{
"field": "@timestamp",
"value": "2023-09-25 22:41:44.378"
},
{
"field": "@message",
"value": "END RequestId: 69cdac96-c8d1-4935-94e4-6ce45acc4935\n"
},
{
"field": "@ptr",
"value": "Cl0KIAocNTg1NDcwMzQ2NjkyOi9hd3MvbGFtYmRhL2FhYRADEjUaGAIGUHTBkwAAAAAkeektAAZRIMOgAAACMiABKIDihfSsMTC644X0rDE4BUDRBUjiD1DpCBgAIAEQAxgB"
}
]
],
...
}
通过
jq
过滤后的输出:
{
"results": [
[
{
"field": "@timestamp",
"value": "2023-09-25 22:41:44.378"
},
{
"field": "@message",
"value": "END RequestId: 69cdac96-c8d1-4935-94e4-6ce45acc4935\n"
}
]
],
...
}