首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态地找到AWS函数的p99执行时间?

如何动态地找到AWS函数的p99执行时间?
EN

Stack Overflow用户
提问于 2022-08-15 04:40:29
回答 1查看 184关注 0票数 0

我试图通过提供基于lambda函数执行时间的平均加载时间来改进我的用户体验。为此,我设置了一个CloudWatch仪表板,它为我的每个端点提取p99执行时间。不幸的是,我不知道如何实际提取这些数据。

使用AWS,我发现cloudwatch.getDashboard()函数只是提取实际的仪表板度量属性,而不是它们的显式值。

我是否需要定义更具体的(即:实际聚合,还是可以直接从预定义的仪表板中提取这些仪表板指标)?

这就是我目前所发现的:

代码语言:javascript
复制
{
  type: 'metric',
  x: 0,
  y: 0,
  width: 6,
  height: 6,
  properties: {
    metrics: [ [Array], [Array], [Array], [Array] ],
    view: 'bar',
    region: 'us-east-1',
    stat: 'XXX',
    period: XXX,
    title: 'XXX'
  }
}

理想情况下,我希望找到底层仪表板实际上提供的度量。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-15 21:29:09

我能够通过调用一个指标调用并使用95%的百分位数计算来解决这个问题。

代码语言:javascript
复制
function p95(arr){
    // Creating the mean with Array.reduce
    let mean = arr.reduce((acc, curr)=>{
        return acc + curr;
    }, 0) / arr.length;
    
    // Assigning (value - mean) ^ 2 to every array item
    arr = arr.map((k)=>{
        return (k - mean) ** 2;
    });
    
    // Calculating the sum of updated array
    let sum = arr.reduce((acc, curr)=> acc + curr, 0);
    
    // Return 95th percentile
    return mean + (2 * Math.sqrt(sum / arr.length));
}
代码语言:javascript
复制
async function get_average_lambda_execution_time(lambdaFunctionName) {
    const AWS = require('aws-sdk');
    AWS.config.update({region: 'us-east-1'});
    const startTime = new Date(new Date().setDate(new Date().getDate() - 14));
    const endTime = new Date();
    console.log(`Getting average lambda execution time for ${lambdaFunctionName} from ${startTime} to ${endTime}`);
    
    const cloudwatch = new AWS.CloudWatch();
    const params = {
        MetricName: 'Duration',
        Namespace: 'AWS/Lambda',
        Statistics: ['Average'],
        Period: 1440,
        StartTime: startTime,
        EndTime: endTime,
        Dimensions: [
            {
                Name: 'FunctionName',
                Value: lambdaFunctionName
            }
        ]
    };
    const metric = await cloudwatch.getMetricStatistics(params).promise();
    const datapoints = metric.Datapoints;
    const durations = [];
    for (const datapoint of datapoints) {
        durations.push(datapoint.Average);
    }
    return p95(durations);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73356964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档