如何通过AWS CDK基于SQL语句创建CloudWatch告警?
解决方案
方法一:直接使用CloudWatch Metrics Insights SQL(推荐)
你可以通过cloudwatch.Metric.fromMetricQuery基于Metrics Insights SQL创建指标,再绑定到告警上,和控制台用SQL创建告警的逻辑完全一致:
const gpuAlarm = new cloudwatch.Alarm(this, 'aiGpuAlarm', { alarmName: metaInfo['alarmNameGpu'], comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 30, evaluationPeriods: 1, // 基于Metrics Insights SQL创建指标 metric: cloudwatch.Metric.fromMetricQuery(this, 'AiGpuAvgMetric', { query: `SELECT AVG(disk_used_percent) FROM "aka-dev" WHERE AutoScalingGroupName = 'aka-dev-ai-asg'`, period: cdk.Duration.seconds(60), }), });
方法二:手动指定维度与统计值(无需SQL)
如果逻辑简单,也可以直接通过维度筛选指标并指定统计聚合方式,等价于你SQL的逻辑:
const gpuAlarm = new cloudwatch.Alarm(this, 'aiGpuAlarm', { alarmName: metaInfo['alarmNameGpu'], comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, threshold: 30, evaluationPeriods: 1, metric: new cloudwatch.Metric({ namespace: 'aka-dev', metricName: 'disk_used_percent', // 筛选AutoScalingGroupName维度 dimensionsMap: { AutoScalingGroupName: 'aka-dev-ai-asg', }, // 指定统计方式为平均值,对应SQL里的AVG statistic: cloudwatch.Statistic.AVERAGE, period: cdk.Duration.seconds(60), }), });
说明
- 方法一适合复杂的Metrics Insights查询场景,比如多维度聚合、复杂过滤逻辑
- 方法二更简洁,适合简单维度筛选+单一统计的场景,性能开销更低
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

