我试图通过提供基于lambda函数执行时间的平均加载时间来改进我的用户体验。为此,我设置了一个CloudWatch仪表板,它为我的每个端点提取p99执行时间。不幸的是,我不知道如何实际提取这些数据。
使用AWS,我发现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'
}
}理想情况下,我希望找到底层仪表板实际上提供的度量。
谢谢!
发布于 2022-08-15 21:29:09
我能够通过调用一个指标调用并使用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);
}https://stackoverflow.com/questions/73356964
复制相似问题