CDK引用非本包CloudWatch指标配置告警及仪表盘方法
解决方案
完全可行。CDK里的cloudwatch.Metric本质是指标定位信息的配置载体,不存在“必须引用本CDK包创建的指标”的限制。
很多人会有认知误区:以为调用new cloudwatch.Metric()会在CloudWatch侧创建新指标,实际上CloudWatch指标本身是由数据发布方(AWS服务、业务应用、其他第三方组件)上报数据时自动生成的,CDK从来不会主动“创建”CloudWatch指标。你在CDK里定义的Metric对象,本质就是一组存储指标命名空间、指标名、维度、统计周期、统计方式的地址参数,只要参数填对,就能指向任意存在的CloudWatch指标,不管这个指标是其他CDK栈、其他IaC工具、甚至是业务代码手动埋点生成的。
具体操作方法
1. 构造Metric实例引用外部指标
根据指标类型有两种常用构造方式:
- 对于自定义命名空间的非AWS托管指标,写法和你之前定义Lambda指标的方式完全一致,只需要准确填入目标外部指标的元信息即可:
// 引用其他服务创建的自定义业务指标示例 const externalOrderErrorMetric = new cloudwatch.Metric({ // 替换为外部指标对应的命名空间 namespace: 'Custom/OrderService', // 替换为外部指标的指标名 metricName: 'OrderProcessingErrors', // 按监控需求配置周期、统计方式 period: cdk.Duration.minutes(1), statistic: 'Sum', // 严格匹配外部指标的维度键值对,缺一个维度都会导致指标查不到数据 dimensions: { ServiceName: 'OrderCoreService', Environment: 'Production' } });
你可以直接在CloudWatch控制台找到目标指标,查看指标详情获取准确的namespace、metricName、维度键值对信息,不要凭记忆填写,维度不匹配是引用外部指标最常见的失败原因。
- 对于AWS托管资源(其他团队创建的Lambda、SQS、RDS等)的指标,不需要手动拼参数,通过对应资源的
fromXXXAttributes方法导入资源后,直接调用资源自带的metric()相关方法就能生成正确的Metric实例:
// 通过ARN导入其他包创建的Lambda函数 const externalLambda = lambda.Function.fromFunctionArn( this, 'external-lambda', 'arn:aws:lambda:cn-north-1:123456789012:function:other-team-order-function' ); // 直接生成对应错误数指标,自动补全namespace、维度等固定参数 const externalLambdaErrorMetric = externalLambda.metricErrors({ period: cdk.Duration.minutes(1), statistic: 'Sum' });
如果外部指标是同账号同区域下其他CDK栈创建的,你也可以直接跨栈引用对应资源暴露的Metric属性,不需要手动构造参数。
2. 用构造好的Metric对象创建告警、添加仪表盘
这一步和你操作本包生成的Metric没有任何区别:
// 基于外部指标创建告警 new cloudwatch.Alarm(this, 'external-order-error-alarm', { metric: externalOrderErrorMetric, threshold: 5, comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, evaluationPeriods: 2, alarmDescription: '生产环境订单服务1分钟内错误数超过5个、持续2个周期触发告警' }); // 将外部指标添加到CloudWatch仪表盘 const dashboard = new cloudwatch.Dashboard(this, 'service-observability-dashboard'); dashboard.addWidgets( new cloudwatch.GraphWidget({ title: '订单服务错误数', left: [externalOrderErrorMetric] }) );
注意事项
- 配置前务必在CloudWatch控制台核对目标指标的命名空间、指标名、所有维度键值对,参数不匹配会直接导致告警、仪表盘拉不到数据,这是引用外部指标最常见的问题
cloudwatch.Metric构造函数本身没有任何副作用,不会在CloudWatch侧创建新指标,也不会修改已有指标的配置,你可以在任意CDK包内重复引用同一个已存在的CloudWatch指标- 跨账号、跨区域引用外部指标时,需要提前配置好CloudWatch跨账号观察权限,否则会出现权限不足无法拉取数据的问题
内容的提问来源于stack exchange,提问作者Kashish Mehndiratta
相关产品推荐
相关产品推荐

