Can a CloudWatch alarm be defined for a metric over many dimensions

amazon-cloudwatch, amazon-web-services, boto

Solution

Yes, you can create an alarm for any single metric. In this case, the single metric has a dimension that represents all instances. Here's how you can do it in boto.

In [1]: import boto

In [2]: cw = boto.connect_cloudwatch()

In [3]: cw.list_metrics(metric_name='CPUUtilization')
Out[3]: 
[Metric:CPUUtilization,
 Metric:CPUUtilization,
 Metric:CPUUtilization,
 Metric:CPUUtilization]

In [4]: l = _

In [5]: for m in l:
   ...:     print m.name, m.dimensions
   ...: 
CPUUtilization {u'ImageId': [u'ami-1b814f72']}
CPUUtilization {u'InstanceId': [u'i-366c4354']}
CPUUtilization {}
CPUUtilization {u'InstanceType': [u'm1.large']}

You can see here that there are four separate metrics associated with the metric_name CPUUtilization. The first has a dimension of all instances that use that particular AMI, the second has a dimension for a particular instance that is now running, the fourth has a dimension of all instances of a particular type, but the third has no specified dimension. This metric represents CPUUtilization across all of my instances. So:

In [6]: m = l[2]

In [7]: m.create_alarm(name='cpu_all_instances', comparison='>', threshold=80.0, period=60, evaluation_periods=2, statistic='Average')
Out[7]: MetricAlarm:cpu_all_instances[CPUUtilization(Average) GreaterThanThreshold 80.0]

This alarm should fire if the average CPU utilization across all my instances exceeds 80% for two evaluation periods. You could also choose a different statistic, like 'Maximum', that would fire if the maximum value for CPU utilization across all instances exceeded 80% for more than 2 evaluation periods.

I don't know if you are specifically looking for MemoryUsage or if that was just an example but I don't think MemoryUsage is one of the available metrics from CloudWatch.

Problem

I'm using python and boto for cloudwatch metrics. I would like to be able to define an alarm for a `MetricName` which will be active for all the other dimensions. For instance I have a metric in the `sandbox` namespace with `MetricName` of `MemoryUsage` and `InstanceId` of `i-xxx`. Is it possible to define a single alarm that will be triggered for `MemoryUsage` for all `InstanceId` dimensions?

Original source