amazon-web-services - AWS Cloudwatch 筛选器和模式语法问题

标签 amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs

我按照此处的说明进行操作 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;

最佳答案

在本例中,您将从空格分隔的日志事件中提取值,因此您必须根据空格定义每个字段。 您应该使用的过滤器模式是:

[,field2 = *Query*, query_time_value>1800,...]

说明:

  • 第一个字段(第一个空格之前的文本)与过滤器无关,因此未声明
  • 需要将第二个字段过滤为查询,以确保过滤器中只包含所需的日志
  • 第三个字段是查询时间的当前值,所以这里是过滤器(>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 不允许您基于此查询创建指标或警报,但您可以在控制面板中查看它。

关于amazon-web-services - AWS Cloudwatch 筛选器和模式语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65890168/

相关文章:

java - 从 Java 客户端调用 lambda 函数后如何访问 lambda 函数调用的云监视日志

apache - 使用 Apache 服务器和 Elastic Load Balancer 在 Windows EC2 实例上使用 AWS 证书

android - Android 上的 AWS Cognito - 如何从刷新 token 获取新 session

amazon-cloudwatch - 来自 Cloudwatch Event 的 AWS Batch 输入参数

redis - 如何监控 Redis 的 Elasticache 指标,例如使用的资源

amazon-web-services - 使用 Winston 日志记录的 AWS Lambda 丢失请求 ID

amazon-web-services - 如何获取Cloudwatch中所有ECS实例的日志?

php - Amazon AWS PHP SDK - 集群无法启动 - 给定的 SSH key 名称无效

amazon-web-services - 如何在cloudwatch中添加IP地址到日志流名称

python-3.x - CloudWatch 日志流到 Lambda python