【问题标题】:Converting AWS CloudWatch Metrics Insight query to CDK Metric将 AWS CloudWatch Metrics Insight 查询转换为 CDK 指标
【发布时间】:2022-11-11 00:24:03
【问题描述】:

我正在修改https://github.com/cdk-patterns/serverless/tree/main/the-eventbridge-etl/typescript 的示例,因为我想将仪表板小部件添加到显示 Fargate vCPU 使用情况的 CloudFormation 堆栈中。我已经能够升级应用程序以使用 CDK v2,并且已确认部署/功能。但是,我无法让仪表板中的 vCPU 小部件显示任何数据。

如果我从 AWS CloudWatch 的 Source 字段中手动配置小部件,查询如下所示:

{
    "metrics": [
        [ { "expression": "SELECT COUNT(ResourceCount) FROM SCHEMA(\"AWS/Usage\", Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'", "label": "Query1", "id": "q1" } ],
        [ "AWS/Usage", "ResourceCount", "Service", "Fargate", "Type", "Resource", { "id": "m1" } ]
    ],
    "view": "timeSeries",
    "title": "ExtractECSJob",
    "region": "us-west-2",
    "timezone": "Local",
    "stat": "Sum",
    "period": 300
}

但是,当我尝试使用 CDK 时,使用以下 TypeScript 代码:

        const extractECSWidget = new GraphWidget({
            title: "ExtractECSJob",
            left: [
                new Metric({
                    namespace: "AWS/Usage",
                    metricName: "ResourceCount",
                    statistic: "Sum",
                    period: Duration.seconds(300),
                    dimensionsMap: {
                        "Service": "Fargate",
                        "Type": "Resource",
                        "Resource": "vCPU"
                    }
                })
            ]
        });

这不会转化为上述内容,并且此小部件中未显示任何信息。新源如下所示:

{
    "view": "timeSeries",
    "title": "ExtractECSJob",
    "region": "us-west-2",
    "metrics": [
        [ "AWS/Usage", "ResourceCount", "Resource", "vCPU", "Service", "Fargate", "Type", "Resource", { "stat": "Sum" } ]
    ],
    "period": 300
}

如何将上述指标源定义映射到 CDK 源构造?

我尝试使用 MathExpression 但使用以下内容:

        let metrics = new MathExpression({
            expression: "SELECT COUNT('metricName') FROM SCHEMA('\"AWS/Usage\"', 'Class','Resource','Service','Type') WHERE Service = 'Fargate' AND Resource = 'vCPU'",
            usingMetrics: {}
        })

        const extractECSWidget = new GraphWidget({
            title: "ExtractECSJob",
            left: [
                metrics
            ]
        });

我在cdk diff 期间收到警告:

[Warning at /EventbridgeEtlStack/EventBridgeETLDashboard] Math expression 'SELECT COUNT(metricName) FROM SCHEMA($namespace, Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'' references unknown identifiers: metricName, namespace, lass, esource, ervice, ype, ervice, argate, esource, vCPU. Please add them to the 'usingMetrics' map.

我应该在 usingMetrics 地图中添加什么?任何帮助表示赞赏。

【问题讨论】:

  • This does not translate to the above - 它翻译成什么?

标签: amazon-cloudwatch aws-cdk aws-fargate aws-cdk-typescript


【解决方案1】:

CDK 尚不支持此功能。我已经打开了问题https://github.com/aws/aws-cdk/issues/22844 在基于查询的指标创建警报时,我遇到了同样的问题。我找到了 1 级构造 CfnAlarm 的解决方法 Widget 可能存在相同的解决方法。

【讨论】:

  • 请看一下我发布的解决方案。该修复由 AWS Support 建议并且有效。
【解决方案2】:

感谢 AWS Support,我得以解决此问题。更新后的代码如下所示:

        let metrics = new MathExpression({
            expression: "SELECT COUNT(ResourceCount) FROM SCHEMA("AWS/Usage", Class,Resource,Service,Type) WHERE Service = 'Fargate' AND Resource = 'vCPU'",
            usingMetrics: {},
            label: "Query1"
        })

        let metric2 = new Metric({
            namespace: "AWS/Usage",
            metricName: "ResourceCount",
            period: cdk.Duration.seconds(300),
            dimensionsMap: {
                "Service": "Fargate",
                "Type": "Resource",
            }
        })

        const extractECSWidget = new GraphWidget({
            title: "ExtractECSJobTest",
            left: [metrics, metric2],
            region: "us-west-2",
            statistic: "Sum",
            width: 24
        });

        dashboardStack.addWidgets(
            extractECSWidget
        );

运行cdk deploy 时,我仍然收到相同的警告(关于引用的未知标识符),但小部件按预期运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多