AWS Cloudwatch 过滤器和模式语法问题
AWS Cloudwatch Filter and Pattern Syntax Issue
我按照此处的说明进行操作 https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
但它没有像我期望的那样工作。我正在尝试创建以下模式 [..., Query_time>1800,],但无法正常工作。我需要查询时间大于 1800 的日志。
以下是cloudwatch日志:
# Time: 210126 5:31:49 # User@Host: et_user[et_user] @ [127.0.0.1] Id: 458426829 # Query_time: 6.408787 Lock_time: 0.000206 Rows_sent: 1 Rows_examined: 19439654 SET timestamp=1611639109; SELECT COUNT(DISTINCT v.customer_id) AS total_registrations, COUNT(r.id) AS total_savings, SUM(r.savings_estimate) AS total_estimated_savings FROM web_ten.`validation` v LEFT OUTER JOIN web_ten.`savings` r ON v.user_id = r.user_id AND r.status=1 AND r.company LIKE 'ABDSDF%' LEFT OUTER JOIN `web_ten`.outlet AS o ON r.outlet_id = o.id AND o.user_id NOT IN (SELECT id FROM `web_ten`.`user` WHERE is_tutorial = 1) WHERE v.isused = 1 AND no_company = 'ABDSDF' AND v.email NOT IN ( SELECT `email` FROM `web_ten`.excluded_demo_emails );
# User@Host: et_user_test[et_user_test] @ [127.0.0.1] Id: 453140660 # Query_time: 2.018429 Lock_time: 0.000051 Rows_sent: 0 Rows_examined: 743405 use production; SET timestamp=1611639131; UPDATE `web_ten`.`pm_user_order` SET `cron_processing`=0 WHERE `id` > 0;
在这种情况下,您要从 Space-Delimited Log Events 中提取值,因此您必须根据空白 space 定义每个字段。
您应该使用的过滤器模式是:
[,field2 = *Query*, query_time_value>1800,...]
解释:
- 第一个字段(第一个 space 之前的文本)与过滤器无关,因此未声明
- 第二个字段需要过滤为Query,以确保只有需要的日志才会包含在过滤器中
- 第三个字段是查询时间的当前值,所以这里是filter(>1800)
- 不需要接下来的字段,因此使用“...”忽略它们
通过这种方式,您的指标筛选器应该可以正常工作。我已经根据您的日志进行了测试,结果是:
Test result metric filter
更新
根据您的日志结构,您以两种不同的格式打印查询时间。您将需要 2 种不同的过滤模式:
[,,,,,,,,,,,,f13=*Query*,querytimevalue>18,...]
和
[,,,,,,,,f9=*Query*,querytimevalue>18,...]
另一个更简单的筛选选项是使用 CloudWatch Insights 并使用此查询进行筛选:
parse @message '*Query_time: * *' as f1, querytime, f2
| display querytime
| filter querytime > 18
考虑到 CloudWatch Insigths 不允许您基于此查询创建指标或警报,但您可以在仪表板中看到它。
我按照此处的说明进行操作 https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
但它没有像我期望的那样工作。我正在尝试创建以下模式 [..., Query_time>1800,],但无法正常工作。我需要查询时间大于 1800 的日志。
以下是cloudwatch日志:
# Time: 210126 5:31:49 # User@Host: et_user[et_user] @ [127.0.0.1] Id: 458426829 # Query_time: 6.408787 Lock_time: 0.000206 Rows_sent: 1 Rows_examined: 19439654 SET timestamp=1611639109; SELECT COUNT(DISTINCT v.customer_id) AS total_registrations, COUNT(r.id) AS total_savings, SUM(r.savings_estimate) AS total_estimated_savings FROM web_ten.`validation` v LEFT OUTER JOIN web_ten.`savings` r ON v.user_id = r.user_id AND r.status=1 AND r.company LIKE 'ABDSDF%' LEFT OUTER JOIN `web_ten`.outlet AS o ON r.outlet_id = o.id AND o.user_id NOT IN (SELECT id FROM `web_ten`.`user` WHERE is_tutorial = 1) WHERE v.isused = 1 AND no_company = 'ABDSDF' AND v.email NOT IN ( SELECT `email` FROM `web_ten`.excluded_demo_emails );
# User@Host: et_user_test[et_user_test] @ [127.0.0.1] Id: 453140660 # Query_time: 2.018429 Lock_time: 0.000051 Rows_sent: 0 Rows_examined: 743405 use production; SET timestamp=1611639131; UPDATE `web_ten`.`pm_user_order` SET `cron_processing`=0 WHERE `id` > 0;
在这种情况下,您要从 Space-Delimited Log Events 中提取值,因此您必须根据空白 space 定义每个字段。 您应该使用的过滤器模式是:
[,field2 = *Query*, query_time_value>1800,...]
解释:
- 第一个字段(第一个 space 之前的文本)与过滤器无关,因此未声明
- 第二个字段需要过滤为Query,以确保只有需要的日志才会包含在过滤器中
- 第三个字段是查询时间的当前值,所以这里是filter(>1800)
- 不需要接下来的字段,因此使用“...”忽略它们
通过这种方式,您的指标筛选器应该可以正常工作。我已经根据您的日志进行了测试,结果是:
Test result metric filter
更新
根据您的日志结构,您以两种不同的格式打印查询时间。您将需要 2 种不同的过滤模式:
[,,,,,,,,,,,,f13=*Query*,querytimevalue>18,...]
和
[,,,,,,,,f9=*Query*,querytimevalue>18,...]
另一个更简单的筛选选项是使用 CloudWatch Insights 并使用此查询进行筛选:
parse @message '*Query_time: * *' as f1, querytime, f2
| display querytime
| filter querytime > 18
考虑到 CloudWatch Insigths 不允许您基于此查询创建指标或警报,但您可以在仪表板中看到它。