我想使用以下
MathExpression
来创建基于(表达式有所简化)的CloudWatch警报:
IF(6 >= HOUR(TIME_SERIES(1)) && HOUR(TIME_SERIES(1)) <= 23, 1, 0)
在 AWS 控制台中,我可以添加此表达式并查看指标如何在夜间发出 1 和在白天(06:00 - 23:00)发出 0,因此这部分似乎有效。
但是,当我尝试基于上述表达式创建警报时,显示以下错误:“表达式'expr_1'中出现错误:找不到 HOUR() 函数的有效周期。”
有什么方法可以根据表达式创建警报吗?如果指标低于 1 持续 5 分钟,则应触发警报。
我最终使用了以下表达式:“IF(HOUR(count) > 6 AND HOUR(count) < 23, count)"
其中 count 是 CloudWatch(API 网关)的一个指标。
然后我创建了一个警报,它会忽略丢失的数据,从而保持当前的警报状态。
我的 CDK 代码如下所示:
MathExpression metricCountCorrected = new MathExpression(MathExpressionProps.builder()
.expression("IF(HOUR(count) > 6 AND HOUR(count) < 23, count)")
.usingMetrics(Map.of("count", restApi.metric("Count", MetricOptions.builder()
.statistic(Stats.SUM)
.period(Duration.minutes(5))
.build())))
.period(Duration.minutes(5))
.build());
metricCountCorrected.createAlarm(this, prefix.asIs() + "x", CreateAlarmOptions.builder()
.alarmName(prefix.asIs() + "x")
.treatMissingData(TreatMissingData.IGNORE)
.comparisonOperator(ComparisonOperator.LESS_THAN_THRESHOLD)
.evaluationPeriods(1)
.threshold(1)
.build());