You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS CloudWatch中监控Auto Scaling Groups的内存与磁盘利用率

在AWS CloudWatch中收集Auto Scaling Groups的内存与磁盘指标

Auto Scaling Groups(ASG)本身没有原生的内存/磁盘指标——这些指标本质来自组内的EC2实例。要实现ASG层面的聚合监控,你需要基于已收集的EC2实例指标,按ASG维度进行聚合处理,步骤如下:

1. 确认EC2实例的CloudWatch Agent配置

你已经成功收集EC2的内存/磁盘指标,只需确保ASG内所有新启动的实例都会自动继承CloudWatch Agent配置:

  • 检查ASG的启动模板/配置,确认CloudWatch Agent已包含在启动脚本或自定义AMI中;
  • 验证Agent配置文件(如amazon-cloudwatch-agent.json)中确实包含内存(mem_used_percent、mem_available等)和磁盘(disk_used_percent、disk_free等)指标的收集规则。

2. 为ASG添加可继承的标签

要按ASG维度聚合指标,需给ASG添加标签并确保实例自动继承:

  • 进入Auto Scaling控制台,找到目标ASG,在「标签」页面添加标签(如Key: AutoScalingGroupName, Value: <你的ASG名称>);
  • 勾选「Add tag to instances」,确保新加入ASG的实例自动带上该标签。

3. 聚合ASG层面的指标

方法一:使用CloudWatch原生指标聚合

直接在CloudWatch控制台通过指标数学实现ASG维度的聚合:

  1. 进入CloudWatch → 指标 → 自定义命名空间(通常是CWAgent);
  2. 筛选出内存/磁盘指标,按AutoScalingGroupName维度过滤;
  3. 点击「添加数学表达式」,使用聚合函数生成ASG层面的指标,例如:
    • 计算ASG平均内存使用率:AVG(METRICS("CWAgent", "mem_used_percent", "AutoScalingGroupName", "MyASG"))
    • 计算ASG磁盘使用率最大值:MAX(METRICS("CWAgent", "disk_used_percent", "AutoScalingGroupName", "MyASG"))
  4. 保存表达式为自定义指标,即可在仪表盘或告警中直接使用。

方法二:用Lambda实现自定义聚合(适合复杂场景)

如果需要更灵活的聚合逻辑(比如排除异常实例、按实例类型加权等),可以用Lambda定期计算并发布ASG聚合指标:

import boto3
from datetime import datetime, timedelta

cloudwatch = boto3.client('cloudwatch')
asg_client = boto3.client('autoscaling')

def lambda_handler(event, context):
    asg_name = "YourASGName"
    # 获取ASG下的活跃实例
    asg_details = asg_client.describe_auto_scaling_groups(AutoScalingGroupNames=[asg_name])['AutoScalingGroups'][0]
    active_instances = [inst['InstanceId'] for inst in asg_details['Instances'] if inst['LifecycleState'] == 'InService']
    
    if not active_instances:
        return
    
    # 查询最近5分钟的实例内存使用率
    metric_stats = cloudwatch.get_metric_statistics(
        Namespace='CWAgent',
        MetricName='mem_used_percent',
        Dimensions=[{'Name': 'InstanceId', 'Value': id} for id in active_instances],
        StartTime=datetime.utcnow() - timedelta(minutes=5),
        EndTime=datetime.utcnow(),
        Period=300,
        Statistics=['Average']
    )
    
    # 计算ASG平均内存使用率
    total_avg = sum(dp['Average'] for dp in metric_stats['Datapoints'])
    asg_avg_mem = total_avg / len(active_instances)
    
    # 发布聚合指标到自定义命名空间
    cloudwatch.put_metric_data(
        Namespace='Custom/ASGMetrics',
        MetricData=[
            {
                'MetricName': 'AvgMemUsedPercent',
                'Dimensions': [{'Name': 'AutoScalingGroupName', 'Value': asg_name}],
                'Value': round(asg_avg_mem, 2),
                'Unit': 'Percent'
            }
        ]
    )
  • 给Lambda配置定时触发(比如每5分钟一次);
  • 确保Lambda拥有cloudwatch:GetMetricStatistics、cloudwatch:PutMetricData和autoscaling:DescribeAutoScalingGroups的IAM权限。

4. 配置ASG监控仪表盘与告警

  • 将聚合后的ASG指标添加到CloudWatch仪表盘,直观查看整体资源状态;
  • 创建告警规则:当ASG的平均内存/磁盘使用率超过阈值时,通过SNS发送通知或触发ASG扩容动作。

内容的提问来源于stack exchange,提问作者dba qcs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:34:54