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

如何通过JavaScript SDK获取指定时间范围各AWS Lambda的调用次数?

解决AWS Lambda调用次数数据获取问题

你用listMetrics接口只拿到指标元数据是正常的——这个接口的作用就是返回存在的指标列表(包含命名空间、维度等元信息),并不返回实际的时间序列数值数据。要获取指定时间范围内每个Lambda函数的调用次数,需要使用CloudWatch的getMetricData或getMetricStatistics接口,其中getMetricData支持批量查询,效率更高,更适合你的场景。

方法一:使用getMetricData批量查询(推荐)

步骤如下:

  1. 先用listMetrics获取所有Lambda的Invocations指标元数据;
  2. 遍历这些元数据,提取每个函数的FunctionName维度;
  3. 构造getMetricData的查询参数,批量请求所有函数的调用次数数据。

示例代码:

// 初始化CloudWatch客户端(假设你已经完成这一步)
const AWS = require('aws-sdk');
const cloudWatch = new AWS.CloudWatch({ region: 'us-east-1' });

async function getLambdaInvocationCounts() {
    // 1. 获取所有Lambda的Invocations指标元数据
    const listParams = {
        Namespace: "AWS/Lambda",
        MetricName: "Invocations",
    };
    const metricList = await cloudWatch.listMetrics(listParams).promise();

    // 2. 提取每个函数的FunctionName维度,去重(避免重复查询同一函数)
    const functionNames = [...new Set(metricList.Metrics.map(metric => {
        const funcDim = metric.Dimensions.find(d => d.Name === 'FunctionName');
        return funcDim ? funcDim.Value : null;
    }).filter(Boolean))];

    // 3. 构造getMetricData的查询参数
    const metricDataQueries = functionNames.map((name, index) => ({
        Id: `m${index}`,
        MetricStat: {
            Metric: {
                Namespace: "AWS/Lambda",
                MetricName: "Invocations",
                Dimensions: [{ Name: 'FunctionName', Value: name }]
            },
            Period: 3600, // 统计周期,单位秒,这里设为1小时,可根据需求调整
            Stat: "Sum", // 调用次数用Sum统计,得到总调用量
            Unit: "Count"
        },
        ReturnData: true
    }));

    const getParams = {
        MetricDataQueries: metricDataQueries,
        StartTime: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // 7天前
        EndTime: new Date() // 当前时间
    };

    // 4. 调用getMetricData获取实际数据
    const result = await cloudWatch.getMetricData(getParams).promise();
    console.log("Lambda调用次数数据:", result.MetricDataResults);
}

getLambdaInvocationCounts();

方法二:使用getMetricStatistics单函数查询

如果只需要查询单个函数的调用次数,可以用这个接口,示例:

async function getSingleLambdaInvocationCount(functionName) {
    const params = {
        Namespace: "AWS/Lambda",
        MetricName: "Invocations",
        Dimensions: [{ Name: 'FunctionName', Value: functionName }],
        StartTime: new Date(Date.now() - 24 * 60 * 60 * 1000), // 24小时前
        EndTime: new Date(),
        Period: 3600,
        Statistics: ["Sum"],
        Unit: "Count"
    };

    const result = await cloudWatch.getMetricStatistics(params).promise();
    console.log(`${functionName}的调用次数:`, result.Datapoints);
}

getSingleLambdaInvocationCount('us-east-1.xxxx-xxxx');

关键说明

  • Stat参数选择:Invocations是计数型指标,用Sum可以得到指定时间范围内的总调用次数;如果需要平均每分钟调用数,可以用Average。
  • Period参数:根据你的时间范围调整,比如时间范围是1天,Period设为3600(1小时)会得到24个数据点;如果设为86400(1天)则得到1个总数据点。
  • 去重处理:因为同一个Lambda函数可能有多个维度组合(比如带Resource维度),所以需要提取FunctionName后去重,避免重复查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:10:13