You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从AWS CloudWatch自动获取不同维度值?

问题解答

首先明确:CDK部署阶段无法直接自动从CloudWatch获取动态生成的维度值——因为CDK是基础设施即代码,部署逻辑是静态预定义的,而CloudWatch的维度值是运行时动态产生的,部署过程中CDK无法查询实时的CloudWatch指标数据。

不过可以通过以下两种方案实现类似需求:

方案1:用CloudWatch Metrics Insights动态查询维度指标

不需要提前知道维度值列表,直接通过Metrics Insights查询语句让仪表盘自动展示所有存在的dimension1值对应的指标。

示例代码:

const graphWidget = new GraphWidget({
  title: 'P90 Metric by Dimension1',
  left: [
    Metric.fromSearchQuery({
      searchQuery: 'SELECT p90(MetricName) FROM MetricNamespace WHERE dimension1 IS NOT NULL GROUP BY dimension1',
      label: 'P90 - ${dimension1}',
      color: Color.BLUE,
      period: Duration.minutes(15),
      unit: Unit.MILLISECONDS,
    }),
  ],
});

这种方式会让仪表盘自动同步CloudWatch中所有dimension1的取值,新增维度值后无需修改CDK代码。

方案2:预查询维度值注入CDK

如果必须在CDK中为每个维度值单独创建Metric实例,可以提前通过CloudWatch API获取维度值列表,再传入CDK循环创建。

  1. 先通过AWS CLI或脚本获取维度值:
aws cloudwatch list-metrics --namespace MetricNamespace --metric-name MetricName --query 'Metrics[*].Dimensions[?Name==`dimension1`].Value' --output text | tr '\t' '\n' > dimension-values.txt
  1. 将值整理为JSON文件后,在CDK中读取并循环创建Metric:
const dimensionValues = require('./dimension-values.json');
const metrics = dimensionValues.map(value => new Metric({
  namespace: 'MetricNamespace',
  metricName: 'MetricName',
  dimensionsMap: { "dimension1": value },
  statistic: Stats.percentile(90),
  label: `Label - ${value}`,
  color: Color.BLUE,
  period: Duration.minutes(15),
  unit: 'Milliseconds'
}));

const graphWidget = new GraphWidget({
  title: 'P90 Metric by Dimension1',
  left: metrics,
});

注意这种方式需要在部署CDK前手动/自动执行查询脚本更新维度值列表,无法实时同步新增的维度值,适合维度值变化不频繁的场景。

内容的提问来源于stack exchange,提问作者mohanakrishnavh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:17:02