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

如何使用Boto3从CloudWatch获取Lambda的多个指标

问题描述

我有一个名为my_lambda的Lambda函数,希望通过Boto3 API获取它的2个监控指标(Duration和Errors)。目前我已实现按10分钟间隔获取单个Duration指标统计数据的代码如下:

import boto3
import time
from datetime import datetime, timedelta, date, timezone

cloudwatch = boto3.client('cloudwatch', region_name=region_name)

#Use get_metric_statistics
stat_response = cloudwatch.get_metric_statistics(        
    Namespace="AWS/Lambda",
    MetricName="Duration",
    Dimensions=[
        {
            "Name": "FunctionName",
            "Value": "my_lambda"
        }
    ],
    StartTime=datetime(2023, 3, 27, 12, 12, 13),
    EndTime=datetime.now(),
    Period=600,
    Statistics=["Average"],
)

print(stat_response)

现在我想添加Errors指标,请问是否可以一次性获取该Lambda的这两个指标?


答案

不行,get_metric_statistics接口一次只能指定一个MetricName,无法一次性拉取多个指标。如果要获取这两个指标,有两种可行方案:

方案1:两次调用get_metric_statistics

分别针对Duration和Errors调用接口,复用相同的时间范围、周期和维度参数即可:

import boto3
from datetime import datetime

region_name = "your-region"
cloudwatch = boto3.client('cloudwatch', region_name=region_name)
start_time = datetime(2023, 3, 27, 12, 12, 13)
end_time = datetime.now()
period = 600
dimensions = [{"Name": "FunctionName", "Value": "my_lambda"}]

# 获取Duration指标
duration_response = cloudwatch.get_metric_statistics(        
    Namespace="AWS/Lambda",
    MetricName="Duration",
    Dimensions=dimensions,
    StartTime=start_time,
    EndTime=end_time,
    Period=period,
    Statistics=["Average"],
)

# 获取Errors指标(Errors一般统计总和更有意义)
errors_response = cloudwatch.get_metric_statistics(        
    Namespace="AWS/Lambda",
    MetricName="Errors",
    Dimensions=dimensions,
    StartTime=start_time,
    EndTime=end_time,
    Period=period,
    Statistics=["Sum"],
)

print("Duration统计数据:", duration_response)
print("Errors统计数据:", errors_response)

方案2:使用get_metric_data批量获取

如果想通过一次API调用获取多个指标,推荐使用get_metric_data接口——它支持批量查询多个指标,效率更高。代码示例:

import boto3
from datetime import datetime

region_name = "your-region"
cloudwatch = boto3.client('cloudwatch', region_name=region_name)
start_time = datetime(2023, 3, 27, 12, 12, 13)
end_time = datetime.now()

response = cloudwatch.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'duration_avg',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/Lambda',
                    'MetricName': 'Duration',
                    'Dimensions': [{'Name': 'FunctionName', 'Value': 'my_lambda'}]
                },
                'Period': 600,
                'Stat': 'Average'
            }
        },
        {
            'Id': 'errors_sum',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/Lambda',
                    'MetricName': 'Errors',
                    'Dimensions': [{'Name': 'FunctionName', 'Value': 'my_lambda'}]
                },
                'Period': 600,
                'Stat': 'Sum'
            }
        }
    ],
    StartTime=start_time,
    EndTime=end_time
)

print("批量指标数据:", response)

返回结果中,每个指标会对应你定义的Id,可以通过这个标识区分不同指标的统计数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:33:31