You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否为API Gateway配置单个Cloudwatch Alarm监控4xx与5xx错误?

API Gateway 单CloudWatch告警监控4xx+5xx错误的方案解析

1. 方案是否可行?

完全可行。CloudWatch支持通过数学表达式将API Gateway的4xx和5xx错误指标相加,基于这个组合指标创建单个告警,完全能满足你5分钟内累计10次错误触发告警的需求。

2. 单告警 vs 双告警:哪种更合适?

  • 如果你的核心需求是只要错误总数超标就告警,不需要区分错误类型,单告警更简洁,能减少运维需要管理的告警数量。
  • 如果需要针对不同错误类型做差异化处理(比如4xx多为客户端问题,5xx属于服务端故障,需要不同的响应流程或通知对象),那分开配置两个告警是更合理的最佳实践。
    总结:按需选择即可,核心看你是否需要拆分错误类型进行针对性处理。

3. AWS CDK for Python 实现代码示例

以下是创建单告警的核心代码,通过MathExpression合并两个错误指标:

from aws_cdk import (
    aws_cloudwatch as cloudwatch,
    aws_apigateway as apigateway,
    Stack,
    Duration,
)
from constructs import Construct

class ApiGatewayAlarmStack(Stack):
    def __init__(self, scope: Construct, construct_id: str, api: apigateway.RestApi, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        # 获取API Gateway的4xx和5xx错误指标
        metric_4xx = api.metric_client_error()
        metric_5xx = api.metric_server_error()

        # 合并两个指标:计算4xx + 5xx的总错误数
        combined_errors = cloudwatch.MathExpression(
            expression="m1 + m2",
            using_metrics={
                "m1": metric_4xx,
                "m2": metric_5xx,
            },
            label="Total 4xx+5xx Errors",
            period=Duration.minutes(5)
        )

        # 创建CloudWatch告警
        cloudwatch.Alarm(
            self, "ApiTotalErrorAlarm",
            metric=combined_errors,
            evaluation_periods=1,
            threshold=10,
            comparison_operator=cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
            alarm_description="API Gateway 5分钟内累计4xx+5xx错误达到10次",
            alarm_name="API-Total-Error-Alarm"
        )

代码说明:

  • 通过API Gateway内置方法直接获取4xx(客户端错误)和5xx(服务端错误)指标
  • 用MathExpression将两个指标相加,设置统计周期为5分钟
  • 基于组合后的总错误指标创建告警,阈值设为10,满足条件即触发告警

内容的提问来源于stack exchange,提问作者Avramo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:25:31