CPB*_*CPB 5 amazon-cloudwatch amazon-cloudwatchlogs aws-cloudwatch-log-insights
我有以下查询,输出如下:
Query:
filter @message like /A:|B:/
Output:
[INFO] 2020-07-28T09:20:48.406Z requestid A: [{'Delivery': OK, 'Entry': 12323 }]
[INFO] 2020-07-28T09:20:48.407Z requestid B: {'MyValue':0}
Run Code Online (Sandbox Code Playgroud)
我想打印ONLY的乙消息中,当一个消息“myvalue的” = 0。对于上面的例子,我必须有以下输出
Output:
[INFO] 2020-07-28T09:20:48.406Z requestid A: [{'Delivery': OK, 'Entry': 12323 }]
Run Code Online (Sandbox Code Playgroud)
对于下一个示例
[INFO] 2020-07-28T09:20:48.406Z requestid A: [{'Delivery': OK, 'Entry': 12323 }]
[INFO] 2020-07-28T09:20:48.407Z requestid B: {'MyValue':12}
Run Code Online (Sandbox Code Playgroud)
输出应该是空的
我不能做这样的事情,因为我想念 A 消息:
filter @message like /A:|B:/
filter MyValue = 0
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
如果有人仍然感兴趣,有一些方法可以从按字段分组中获取第一个和最后一个。因此,如果您可以将数据放入消息对中,可能会有所帮助。
例如,给定 API Gateway 访问日志(每行是一个@message):
2021-09-14T14:09:00.452+03:00 (01c53288-5d25-*******) Extended Request Id: ***************
2021-09-14T14:09:00.452+03:00 (01c53288-5d25-*******) Verifying Usage Plan for request: 01c53288-5d25-*******. API Key: API Stage: **************/dev
2021-09-14T14:09:00.454+03:00 (01c53288-5d25-*******) API Key authorized because method 'ANY /path/{proxy+}' does not require API Key. Request will not contribute to throttle or quota limits
2021-09-14T14:09:00.454+03:00 (01c53288-5d25-*******) Usage Plan check succeeded for API Key and API Stage **************/dev
2021-09-14T14:09:00.454+03:00 (01c53288-5d25-*******) Starting execution for request: 01c53288-5d25-*******
2021-09-14T14:09:00.454+03:00 (01c53288-5d25-*******) HTTP Method: GET, Resource Path: /path/json.json
2021-09-14T14:09:00.468+03:00 (01c53288-5d25-*******) Method completed with status: 304
Run Code Online (Sandbox Code Playgroud)
我们可以从最后两行获取方法、uri 和返回代码。为此,我将相关数据解析为参数,然后通过请求 id(我也解析)进行聚合来获取它们
神奇之处在于:使用像sortsFirst()andsortsLast()和 group by 这样的统计数据@reqid。(AWS 文档
注意:IMO,不要使用earliest()andlatest()因为它们依赖于内置@timestamp并且对我来说很奇怪,其中 2 个连续消息具有相同的时间戳
因此,例如,使用以下查询:
filter @message like "Method"
| parse @message /\((?<@reqid>.*?)\) (.*?) (Method: (?<@method>.*?), )?(.*?:)* (?<@data>[^\ ]*)/
| sort @timestamp desc
| stats sortsFirst(@method) as @reqMethod, sortsFirst(@data) as @reqPath, sortsLast(@data) as @reqCode by @reqid
| limit 20
Run Code Online (Sandbox Code Playgroud)
我们将得到以下所需的输出:
@reqid @reqMethod @reqPath @reqCode
f42e2b44-b858-45cb-***************** GET /path-******.json 304
fecddb03-3804-4ff5-***************** OPTIONS /path-******.json 200
e8e47185-6280-4e1e-***************** GET /path-******.json 304
e4fa9a0c-6d75-4e26-***************** GET /path-******.json 304
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2426 次 |
| 最近记录: |