将 AWS CloudWatch Metrics Insight 查询转换为 CDK 指标

LNI*_*LNI 5 amazon-cloudwatch aws-fargate aws-cdk aws-cdk-typescript

我正在修改https://github.com/cdk-patterns/serverless/tree/main/the-eventbridge-etl/typescript上的示例,因为我想向我的 CloudFormation 堆栈添加一个仪表板小部件来显示 Fargate vCPU 使用情况。我已经能够升级应用程序以使用 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
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用 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"
                    }
                })
            ]
        });
Run Code Online (Sandbox Code Playgroud)

这并不翻译为上面的内容,并且此小部件中不显示任何信息。新的来源如下所示:

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

如何将上述指标源定义映射到 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
            ]
        });

Run Code Online (Sandbox Code Playgroud)

我在以下期间收到警告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.
Run Code Online (Sandbox Code Playgroud)

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

LNI*_*LNI 4

感谢 AWS 支持,我得以修复此问题。更新后的代码如下所示:

        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
        );
Run Code Online (Sandbox Code Playgroud)

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