假设我有crontask.py,它从AWS上运行的服务列表中读取数据,并为每个服务生成新的度量线程,以获取各自自动缩放组的CPUUtilization,并执行一些阈值计算。这在我之前使用的常规方法中运行良好:
client = boto3.client('cloudwatch')
然后执行:
response = client.get_metric_statistics()
当我同时运行几十个这样的线程时,问题就出现了,似乎每个线程都需要一个单独的会话。所以在重新工作的过程中,我遇到了一些问题
可能有一种更简单的方法可以做到这一点,但我通过实例的标识符标记过滤实例,并提取自动缩放组名称:
session = boto3.Session(region_name=os.getenv("AWS_REGION") or 'us-east-1')
ec2 = session.resource('ec2')
instances = ec2.instances.filter(
Filters=[
{
'Name': 'tag:Name',
'Values': [nameTag]
}
],
MaxResults=5,
)
使用自动缩放组名称,然后查询cloudwatch的CPUUtilization度量:
cloudwatch = session.resource('cloudwatch')
metric = cloudwatch.Metric('AWS/EC2',metricVar)
response = metric.get_statistics(
Namespace = 'AWS/EC2',
Period = 300,
StartTime = datetime.utcnow() - timedelta(seconds = 600),
EndTime = datetime.utcnow(),
MetricName = metricVar,
Statistics=['Average'], Unit='Percent',
Dimensions = [
{'Name': 'InstanceId', 'Value': asgName}
])
我得到一个200代码的响应,但数据点[]
为空:
{'Label': 'CPUUtilization', 'Datapoints': [],
所以,希望有人能在这里插话,让我知道我做错了什么,或者也许是一个更好的方式来获取这些信息
原因可能很多,但一个明显的问题是,公制尺寸不正确:
对于
InstanceId
的维度,您可以使用实例id而不是自动缩放名称should be对于自动缩放名称,维度名称为
AutoScalingGroupName
因此,请仔细检查您尝试使用的所有名称、维度和名称空间
相关问题 更多 >
编程相关推荐