当使用函数describe_alarms时,如何打印所有警报名称,而不是仅打印50个?
代码,使用Python:
conn = boto.connect_cloudwatch()
alarms = conn.describe_alarms()
for item in alarms:
print item.name谢谢。
发布于 2015-12-09 15:47:07
默认情况下,它返回50。如果需要更多信息,请设置max_records=value并尝试。
由于底层AWS实现限制,它将返回最多100个警报。不知道现在是不是修好了。
conn.describe_alarms(max_records=100)
有关模块boto.ec2.Cloudwatch中的方法describe_alarms的帮助: Describe_alarms(自我,action_prefix=None,alarm_name_prefix=None,alarm_names=None,max_records=None,state_value=None,next_token=None) 类型max_records: int :param max_records:要检索的最大警报描述数。
发布于 2017-01-24 15:53:25
尽管我参加聚会有点晚了,但这里是我的解决方案(用Java)。您必须获得下一个令牌,并一直在循环中询问结果,直到没有下一个令牌为止,因此它的行为就像在网站上分页一样。
String nextToken = null;
List<MetricAlarm> metricAlarms = new ArrayList<>();
for (int i = 0; i < 100; i++) {
DescribeAlarmsRequest describeAlarmsRequest = new DescribeAlarmsRequest();
describeAlarmsRequest.setNextToken(nextToken);
describeAlarmsRequest.setMaxRecords(100);
DescribeAlarmsResult describeAlarmsResult = getClient().describeAlarms(describeAlarmsRequest);
List<MetricAlarm> metricAlarmsTmp = describeAlarmsResult.getMetricAlarms();
metricAlarms.addAll(metricAlarmsTmp);
nextToken = describeAlarmsResult.getNextToken();
logger.info("nextToken: {}", nextToken);
if (nextToken == null) {
break;
}
}
logger.info("metricAlarms size: {}", metricAlarms.size());当然,还有改进的余地,例如创建一个while循环而不是for循环。
更新:
在这里,我的精致版本
String nextToken = null;
List<MetricAlarm> metricAlarms = new ArrayList<>();
while (nextToken != null || metricAlarms.size() == 0) {
DescribeAlarmsRequest describeAlarmsRequest = new DescribeAlarmsRequest().withNextToken(nextToken).withMaxRecords(100); // create the request
DescribeAlarmsResult describeAlarmsResult = getClient().describeAlarms(describeAlarmsRequest); // get the result
metricAlarms.addAll(describeAlarmsResult.getMetricAlarms()); // add new alarms to our list
nextToken = describeAlarmsResult.getNextToken(); // check if we have a nextToken
if (nextToken == null && cachedMetricAlarms.size() == 0) { // if we have no alarm in AWS we get inside the loop but we would never exit -> intercept that
break;
}
}
logger.info("metricAlarms size: {}", metricAlarms.size());发布于 2018-12-17 12:56:57
下面是一个完整的示例,说明如何在记录中分页,以确保检索所有记录,而不是受Cloudwatch警报API上的最大记录的限制:
alarmMaxRecords = 10
response = client.describe_alarms(
AlarmNamePrefix=prefix,
MaxRecords=alarmMaxRecords
)
alarmsItems = []
while response:
alarmsItems += response['MetricAlarms']
response = client.describe_alarms(AlarmNamePrefix=prefix, MaxRecords=alarmMaxRecords, NextToken=response['NextToken']) if 'NextToken' in response else None
for alarm in alarmsItems:
# Do something with the alarm
print(response['MetricAlarms'])以上将检索10条记录一次,但可以是任何高达100。
或者更简单地使用boto3提供的boto3方法:
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(AlarmNamePrefix=prefix, MaxRecords=alarmMaxRecords):
# Do something with the alarm
print(response['MetricAlarms'])https://stackoverflow.com/questions/34179570
复制相似问题