我是boto的新手,并尝试获取所有有警报的指标。有人可以指导我怎么做吗?这是我想要做的。我可以通过以下方式获取所有指标。
import boto.ec2.cloudwatch
conn = boto.ec2.cloudwatch.connect_to_region('ap-southeast-1')
metrics = conn.list_metrics()
for metric in metrics:
print metric.name, metric.namespace
我知道有一个函数“describe_alarms_for_metric”可以返回指标的警报。但它不适用于我并给我一个空列表。这是我正在尝试的。
for metric in metrics:
print conn.describe_alarms_for_metric(metric.name, metric.namespace)
我还可以使用“describe_alarms”查看所有报警的列表,但我不知道哪个报警是针对什么指标的。
alarms = conn.describe_alarms()
for alarm in alarms:
print alarm
describe_alarms()
返回boto.ec2.cloudwatch.alarm
objects列表,可以检查该列表以查找有关警报的指标和其他详细信息。
alarms = conn.describe_alarms()
for alarm in alarms:
print alarm.name
print alarm.metric
print alarm.namespace
对于Boto3显然describe_alarms_for_metric()
不起作用,除非你也提供维度 - 请参阅documentation:
维度(列表) - 与指标关联的维度。如果度量标准具有任何关联维度,则必须指定它们才能使调用成功。
(字典) - 扩展指标的标识。
名称(字符串) - [必需]维度的名称。
值(字符串) - [必需]表示尺寸测量值。
有了这个要求,我不确定这个API的重点是什么。另一种方法是通过paginator使用describe_alarms()
然后指定过滤器。
您可以使用示例here作为基础:
import boto3
# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch')
# List alarms of insufficient data through the pagination interface
paginator = cloudwatch.get_paginator('describe_alarms')
for response in paginator.paginate(StateValue='INSUFFICIENT_DATA'):
print(response['MetricAlarms'])
然后修改它以添加过滤器:
paginator = cloudwatch.get_paginator('describe_alarms')
page_iterator = paginator.paginate()
filtered_iterator = page_iterator.search("MetricAlarms[?MetricName==`CPUUtilization` && Namespace==`AWS/EC2`]")
for alarm in filtered_iterator:
print(alarm)