从线程查询自动缩放组的EC2 cloudwatch度量

2024-09-26 17:53:48 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有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': [],

所以,希望有人能在这里插话,让我知道我做错了什么,或者也许是一个更好的方式来获取这些信息


Tags: 方法nameclientawsget度量responsesession
2条回答
  client = boto3.client('cloudwatch')
    response = client.get_metric_statistics(
            Namespace='AWS/EC2',
            MetricName='CPUUtilization',
            Dimensions=[
                {
                'Name': 'AutoScalingGroupName',
                'Value': 'asg-production'
                },
            ],
            StartTime=startTime,
            EndTime=endTime,
            Period=60,
            Statistics=[
                'Average',
            ],
            Unit='Percent',
        )

原因可能很多,但一个明显的问题是,公制尺寸不正确:

Dimensions = [
                {'Name': 'InstanceId', 'Value': asgName}
            ]

对于InstanceId的维度,您可以使用实例id而不是自动缩放名称should be

对于自动缩放名称,维度名称为AutoScalingGroupName

因此,请仔细检查您尝试使用的所有名称、维度和名称空间

相关问题 更多 >

    热门问题