代码之家  ›  专栏  ›  技术社区  ›  Luis

CloudWatch自定义EC2内存度量和警报,具有自动缩放策略

  •  3
  • Luis  · 技术社区  · 6 年前

    我的目标是根据EC2实例上使用的内存测试自动缩放。

    为了监视EC2实例内存,我在EC2实例上安装了CloudWatch代理,并创建和配置了CloudWatch代理配置文件,如下所述: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html

    {
            "metrics": {
                    "append_dimensions": {
                            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                            "ImageId": "${aws:ImageId}",
                            "InstanceId": "${aws:InstanceId}",
                            "InstanceType": "${aws:InstanceType}"
                    },
                    "metrics_collected": {
                            "cpu": {
                                    "measurement": [
                                            "cpu_usage_idle",
                                            "cpu_usage_iowait",
                                            "cpu_usage_user",
                                            "cpu_usage_system"
                                    ],
                                    "metrics_collection_interval": 60,
                                    "totalcpu": false
                            },
                            "disk": {
                                    "measurement": [
                                            "used_percent",
                                            "inodes_free"
                                    ],
                                    "metrics_collection_interval": 60,
                                    "resources": [
                                            "*"
                                    ]
                            },
                            "diskio": {
                                    "measurement": [
                                            "io_time"
                                    ],
                                    "metrics_collection_interval": 60,
                                    "resources": [
                                            "*"
                                    ]
                            },
                            "mem": {
                                    "measurement": [
                                            "mem_used_percent"
                                    ],
                                    "metrics_collection_interval": 60
                            },
                            "swap": {
                                    "measurement": [
                                            "swap_used_percent"
                                    ],
                                    "metrics_collection_interval": 60
                            }
                    }
            }
    }
    

    一旦我在EC2实例上启动了CloudWatch代理,定制指标就可以正常工作,我可以在CloudWatch上看到它们。

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:configuration-parameter-store-name -s
    

    我用这个EC2实例创建了一个AMI,并用这个AMI创建了一个自动缩放组。 然后,我根据自定义指标“mem\u used\u percent”(当>=50时)设置了一个警报,并将其用作自动缩放组策略(添加1个实例)。图像已附加。

    enter image description here

    我连接到EC2实例,并使用“压力”增加所使用的内存。发出警报,触发自动缩放策略并创建新的EC2实例。

    我看到的问题是,我在一个特定的EC2实例上创建了一个警报,而不是在整个自动缩放组上,并且一旦初始EC2实例终止,警报就不再有意义了。 除了自动缩放组,我如何配置相同的想法?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  6
  •   qkhanhpro    6 年前

    根据AWS文件,

    对于CloudWatch代理,您可以使用 aggregation_dimensions

    "metrics": {
      "cpu":{...}
      "disk":{...}
      "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
    }
    

    https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html

    对于仍在使用旧perl脚本的用户,请检查以下选项:

    --aggregated
    --auto-scaling
    

    https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html

        2
  •  0
  •   Vivek Jha    6 年前

    我也采取了同样的方法,但没有成功。

    {
    "metrics": {
        "metrics_collected": {
            "LogicalDisk": {
                "measurement": [
                    "% Free Space"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "Memory": {
                "measurement": [
                    "% Committed Bytes In Use"
                ],
                "metrics_collection_interval": 60
            },
            "Paging File": {
                "measurement": [
                    "% Usage"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "PhysicalDisk": {
                "measurement": [
                    "% Disk Time"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "Processor": {
                "measurement": [
                    "% User Time",
                    "% Idle Time",
                    "% Interrupt Time"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "_Total"
                ]
            }
        },
        "append_dimensions": {
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}",
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
        },
        "aggregation_dimensions" : [["AutoScalingGroupName"]]
    }
    

    }

    当我在cloudwatch管理控制台中查看输出时,我没有在All下看到AutoScalingGroupName的聚合>CWAgent