如何使用boto3和Python Lambda获取指定Lambda的CloudWatch指标
Lambda调用次数CloudWatch指标查询问题修复
核心错误配置点
你代码里的指标参数配置存在3处错误,是返回空值的直接原因:
- 指标命名空间
Namespace配置错误:Lambda的CloudWatch指标统一命名空间为AWS/Lambda,不是你写的Invocations - 指标名
MetricName配置错误:Lambda调用次数的标准指标名为Invocations,不是你写的Number of invokes - 维度
Dimensions配置错误:Lambda指标的函数名维度键为FunctionName,不是你写的lambda
修正后的代码
import boto3 import datetime import calendar def get_metric_data(): # 如果当前执行环境和目标Lambda不在同一区域,需要显式指定region_name参数 cloudwatch = boto3.client('cloudwatch', region_name='us-east-1') targetGroupARN='arn:aws:lambda:us-east-1:1234567890:function:lambda-function-to-analyze' tgarray=targetGroupARN.split(':') target=tgarray[-1] response = cloudwatch.get_metric_data( MetricDataQueries=[ { 'Id': 'myrequest', 'MetricStat': { 'Metric': { 'Namespace': 'AWS/Lambda', 'MetricName': 'Invocations', 'Dimensions': [ { 'Name': 'FunctionName', 'Value': target }, ] }, 'Period': 86400, # 按天统计可调整为86400,5分钟统计保持300即可 'Stat': 'Sum', 'Unit': 'Count' } }, ], StartTime=datetime.datetime(2021, 11, 1), EndTime=datetime.datetime(2021, 11, 30), ) print(response) return response
额外校验点
- 执行该函数的IAM角色必须包含
cloudwatch:GetMetricData权限 - 目标Lambda在2021年11月确实有调用记录,否则返回值依然会为空
- 如果需要统计整月总调用量,将返回结果里的
Values数组求和即可得到总调用次数
内容的提问来源于stack exchange,提问作者anubiros_theron
相关产品推荐
相关产品推荐

