如何动态查找AWS Lambda函数的p99执行时间



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

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

我需要定义更具体的东西吗(即:实际的聚合,或者我可以直接从预定义的仪表板中提取这些仪表板指标吗(?

这就是我目前发现的:

{
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'
}
}

理想情况下,我想找到底层仪表板实际提供的指标。

谢谢!

我能够通过调用一个度量调用并使用95%的百分比计算来计算它。

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));
}
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);
}

最新更新