首页 > 解决方案 > AWS CloudWatch GetMetricsData:“Sum”在没有值的期间错过了点

问题描述

GetMetricsData从 AWS CloudWatch 查询:

                 {
                    StartTime: lastWeek ,
                    EndTime: today,
                    MetricDataQueries: [
                        {
                            Id: 'invocations',
                            Label: 'Invocations',
                            MetricStat: {
                                Metric: {
                                    Dimensions: [
                                        {
                                            Name: 'FunctionName',
                                            Value: /* FunctionName */,
                                        },
                                    ],
                                    MetricName: 'Invocations',
                                    Namespace: 'AWS/Lambda'
                                },
                                Period: 60*60*24, // day
                                Stat: 'Sum',
                                Unit: 'Count',
                            },
                        },
                    ],
                }

这就是我得到的:

在此处输入图像描述

我没有得到 7 天(即一周)的数据,而是得到 5 天。我有 2 天失踪(如图所示)。

那些失踪的日子没有任何数据。

CloudWatch 不会返回没有数据的点。如何使Sum操作返回实际计数(0)?

标签: amazon-web-servicesaws-sdkamazon-cloudwatchaws-sdk-jsamazon-cloudwatch-metrics

解决方案


您可以使用度量数学和 FILL 函数将缺失值默认为 0。

您的指标的 ID 是invocations这样的表达式:

FILL(invocations, 0) 

完整查询将类似于:

             {
                StartTime: lastWeek ,
                EndTime: today,
                MetricDataQueries: [
                    {
                        Id: 'result',
                        Label: 'Sums with zeros',
                        Expression: 'FILL(invocations, 0)'
                    },
                    {
                        Id: 'invocations',
                        Label: 'Invocations',
                        MetricStat: {
                            Metric: {
                                Dimensions: [
                                    {
                                        Name: 'FunctionName',
                                        Value: /* FunctionName */,
                                    },
                                ],
                                MetricName: 'Invocations',
                                Namespace: 'AWS/Lambda'
                            },
                            Period: 60*60*24, // day
                            Stat: 'Sum',
                            Unit: 'Count',
                        },
                    },
                ],
            }

这将返回 2 个指标,带零和不带零。ReturnData: false然后,您可以通过在该 MetricDataQuery 中进行设置来隐藏原始指标。

有关更多详细信息,请参见此处:


推荐阅读