We know AWS Cloudwatch: A very good monitoring service which we use to check metrics (or logs) of AWS resources. Personally I always used CloudWatch in its simplest way which is choosing a namespace, dimension and then the desired metric (AWS one or Custom) and playing with the time frame.
Sometimes it’s needed to do some more complex operation to monitor a situation instead of a simple metric. Especially when you want to create an alert. CloudWatch has this capability to do some math operations; you can find more information here but I will explain a use case which I faced recently. It’s related to long expected RabbitMQ broker of Amazon MQ.
Not long time ago, AWS announced availability of RabbitMQ as a broker of Amazon MQ service. RabbitMQ is very popular for distributed systems, so, a managed service from AWS will help DevOps teams a lot 🙂
This is familiar to those who know RabbitMQ but in our use case we wanted to receive an alert when the rate of Acknowledging messages is considerably less than rate of publishing messages to queues. We came up with the following Cloudformation code to implement this alarm:
AckRateAlarm: Type: 'AWS::CloudWatch::Alarm' Properties: AlarmDescription: Rate of Ack is considerably less than rate of publishing AlarmName: RabbitMQAckRateAlarm Metrics: - Id: a1 Expression: "IF(ma1 > ma2 + 1000, 1, 0)" Label: "Ack rate vs Publish rate" - Id: ma1 MetricStat: Metric: MetricName: PublishRate Namespace: AWS/AmazonMQ Dimensions: - Name: Broker Value: Foo Period: 300 Stat: Average ReturnData: false - Id: ma2 MetricStat: Metric: MetricName: AckRate Namespace: AWS/AmazonMQ Dimensions: - Name: Broker Value: Foo Period: 300 Stat: Average ReturnData: false EvaluationPeriods: '2' Threshold: 0 ComparisonOperator: GreaterThanThreshold AlarmActions: - SNS_ARN OKActions: - SNS_ARN
This use case sounds simple but I think shows the benefit of using Math in CloudWatch metrics well.