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

如何突破CloudWatch限制实现账号级Lambda并发总量监控告警

解决方案

方案1:自定义聚合指标(推荐原生AWS方案)

  • 编写一个定时触发的Lambda函数,每隔固定时间(比如1分钟)执行以下操作:
    1. 调用CloudWatch的GetMetricData API,批量获取所有Lambda函数的ConcurrentExecutions指标数据
    2. 在函数内部计算所有指标的总和
    3. 将计算得到的总和作为自定义指标(比如命名为TotalLambdaConcurrentExecutions)发布到CloudWatch
  • 基于这个自定义指标创建告警,当数值超过900时触发通知

关键代码片段示例

import boto3
import time

cloudwatch = boto3.client('cloudwatch')
lambda_client = boto3.client('lambda')

def lambda_handler(event, context):
    # 获取所有Lambda函数列表
    functions = []
    paginator = lambda_client.get_paginator('list_functions')
    for page in paginator.paginate():
        functions.extend([func['FunctionName'] for func in page['Functions']])
    
    # 构造GetMetricData的查询参数
    metric_queries = []
    for idx, func_name in enumerate(functions):
        metric_queries.append({
            'Id': f'm{idx}',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/Lambda',
                    'MetricName': 'ConcurrentExecutions',
                    'Dimensions': [{'Name': 'FunctionName', 'Value': func_name}]
                },
                'Period': 60,
                'Stat': 'Maximum'
            },
            'ReturnData': True
        })
    
    # 批量获取指标数据
    response = cloudwatch.get_metric_data(
        MetricDataQueries=metric_queries,
        StartTime=time.time() - 60,
        EndTime=time.time()
    )
    
    # 计算总和
    total_concurrent = 0
    for result in response['MetricDataResults']:
        if result['Values']:
            total_concurrent += result['Values'][0]
    
    # 发布自定义指标
    cloudwatch.put_metric_data(
        Namespace='Custom/Lambda',
        MetricData=[{
            'MetricName': 'TotalLambdaConcurrentExecutions',
            'Value': total_concurrent,
            'Unit': 'Count'
        }]
    )
    
    return {'total_concurrent': total_concurrent}
  • 注意:给这个Lambda函数配置足够的权限(cloudwatch:GetMetricData、cloudwatch:PutMetricData、lambda:ListFunctions)
  • 调整定时触发频率(比如1分钟),确保告警数据的时效性

方案2:使用CloudWatch Logs Insights + 指标导出

  • 利用CloudWatch Logs Insights查询所有Lambda函数的并发日志数据,聚合计算总和
  • 通过CloudWatch Logs Metric Filters将查询结果导出为自定义指标
  • 基于该自定义指标创建告警
  • 局限性:需要Lambda函数开启详细日志,且日志聚合的延迟可能比API查询高

方案3:分组告警+复合告警(折中方案)

如果不想写自定义代码,可以将Lambda函数分成多个组(每组不超过10个),为每个组创建基于指标数学表达式的告警,再用CloudWatch复合告警聚合所有组的状态——当各组并发总和的累加值接近900时触发通知

  • 缺点:需要手动分组,阈值计算相对复杂,精准度不如自定义指标

补充:AWS CloudWatch基于指标数学的告警10个指标的限制是硬限制,上述方案都是通过聚合指标的方式绕过该限制,其中自定义聚合指标的方案最灵活且精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:23:38