question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[aws-cloudwatch] Missing ThresholdMetricId

See original GitHub issue

When creating Cloudwatch Alarm that makes use of anomaly detection the following error is raised at deploy time:

ComparisonOperators for ranges require ThresholdMetricId to be set (Service: AmazonCloudWatch; Status Code: 400; Error Code: ValidationError; Request ID: xxx; Proxy: null)

Reproduction Steps

aws_cloudwatch.Alarm(
     self,
    "my_alarm",
    evaluation_periods=1,
    metric=sqs_queue.metric_number_of_messages_sent(),
    threshold=2,
    statistic="Average",
    comparison_operator=aws_cloudwatch.ComparisonOperator.LESS_THAN_LOWER_OR_GREATER_THAN_UPPER_THRESHOLD,
)

The Alarm construct works great for any of the other ComparisonOperators that do not rely on anomaly detection i.e. GreaterThanThreshold.

Environment

  • CLI Version : 1.62.0
  • Framework Version: 1.64.0
  • Node.js Version: v12.14.1
  • OS : MacOS Catalina
  • Language (Version): Python 3.7

This is 🐛 Bug Report

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:4
  • Comments:10 (5 by maintainers)

github_iconTop GitHub Comments

6reactions
NetaNircommented, Nov 11, 2020

In the meantime, If you really need this feature you can configure it using escape hatch:

const anomalyDetectionExp = new cloudwatch.MathExpression({
  expression: 'ANOMALY_DETECTION_BAND(m1,2)',
  usingMetrics: {
    m1: metricA,
  },
  label: 'Anomaly detection',
  period: cdk.Duration.minutes(1),
});

const alarm = anomalyDetectionExp.createAlarm(this, 'MyAlarm', {
  evaluationPeriods: 1, 
  threshold: 5, // dummy value will be removed below 
  comparisonOperator: ComparisonOperator.LESS_THAN_LOWER_OR_GREATER_THAN_UPPER_THRESHOLD,
});

const cfnAlarm = alarm.node.defaultChild as CfnAlarm;
cfnAlarm.addPropertyDeletionOverride('Threshold');
(alarm.node.defaultChild as CfnAlarm).thresholdMetricId = 'expr_1'; // The id will always be 'expr_1' if there is one expression
5reactions
olavencommented, Dec 1, 2021

👋 A status update on this would be highly appreciated!

Read more comments on GitHub >

github_iconTop Results From Across the Web

MetricAlarm - Amazon CloudWatch - AWS Documentation
Sets how this alarm is to handle missing data points. The valid values are breaching , notBreaching , ignore , and missing ....
Read more >
class CfnAlarm (construct) · AWS CDK
Sets how this alarm is to handle missing data points. Valid values are breaching , notBreaching , ignore , and missing . For...
Read more >
Using Amazon CloudWatch alarms - AWS Documentation
When an AWS/DynamoDB metric has missing data, alarms that evaluate that metric remain in their current state. How alarm state is evaluated when...
Read more >
PutMetricAlarm - Amazon CloudWatch - AWS Documentation
Alarms that evaluate metrics in the AWS/DynamoDB namespace always ignore missing data even if you choose a different option for TreatMissingData . When...
Read more >
AWS::CloudWatch::Alarm - AWS CloudFormation
The AWS::CloudWatch::Alarm type specifies an alarm and associates it with the ... Double ThresholdMetricId: String TreatMissingData: String Unit: String ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found