如何设置一个警报来特别监控 AWS API Gateway API 的限制429 - 请求过多?

问题描述

一种方法是让警报监控自动发出的 Cloudwatch 指标 4XXError。但是,问题在于它无法将限制错误 (429) 与其他 4xx 错误区分开来。因此,我的警报可能因限制以外的原因触发,这违背了警报的特定目的 - 仅专门监控限制。

解决方法

Api 网关日志,只要在阶段级别启用,应该打印类似于

的日志

*******vit5mg 超出 API 阶段 abc123npx8/qa 的配额限制:使用计划 ID v2tyvt 的关键配额已用完。限制:1 期间:DAY 方法

已完成状态:429

我们可以在文本 completed with status: 429 上设置一个 cloudwatch logs 指标过滤器,指标值为 1。我们可以在其上创建仪表板或警报等。

,

是的,现在可以使用正确的配置进行设置:

  1. 根据所附图片使用正确的 api 访问日志设置: aws api,logging levels
  2. 对于日志格式,包括以下 JSON(有些字段过多,请确保它们符合您的需求,StatusCode 会在节流时为您提供所需的 429 响应)
{"APIId":"$context.apiId","DomainName":"$context.domainName","ErrResponse":"$context.error.responseType","ErrValidString":"$context.error.validationErrorString","ErrorMessg":"$context.error.message","RequestId":"$context.requestId","RequestPath":"$context.path","RequestTime":"$context.requestTime","ResourcePath":"$context.resourcePath","SourceIp":"$context.identity.sourceIp","Stage":"$context.stage","StatusCode":"$context.status"}
  1. 使用正确的 json 模式设置指标过滤器,例如{ $.StatusCode = 429 }
  2. 根据过滤器设置闹钟

瞧!