如何使用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
相关产品推荐
相关产品推荐

