查看AWS CloudWatch中的实例数量/正确配置实例扩展

时间:2014-01-25 17:28:20

标签: amazon-web-services elastic-beanstalk amazon-cloudwatch

我目前正在为一个高流量网站开发,该网站正在使用AWS(除其他外)负载平衡。我们正在配置负载均衡器,因此我们有足够的实例运行以保持站点运行,但不会太多导致我们赔钱。

我们现在接近这一点的方法是密切关注CloudWatch中的CPU利用率并相应地更改我们的配置。

我们遇到的一个问题是,我们似乎无法弄清楚如何让CloudWatch绘制运行实例的数量,以便我们可以将其与CPU利用率相抵消。我们只能看到当前活动的实例数量,因此我们最终需要检查很多次,而不是回顾过去几小时/几天/周的统计数据。

理想情况下,我希望看到每个Elastic Beanstalk应用程序的实例数量图表。

我对AWS及其所有组件都相当新,所以我可能会以完全错误的方式看待这个问题,所以如果有人对如何正确配置实例扩展我有任何其他建议和/或资源我我很乐意听到它。

4 个答案:

答案 0 :(得分:2)

为此,请在Auto Scaling组上启用Group Metrics Collection。 为此,请转到EC2仪表板-> Auto Scaling组。找到要在其上收集度量标准的组,然后使用“监视”选项卡下的“启用组度量标准集合”。 完成后,您可以在CloudWatch中的“缩放组”存储桶下看到该组。

希望这会有所帮助。

答案 1 :(得分:0)

阅读这篇文章

http://www.techrepublic.com/blog/the-enterprise-cloud/how-to-add-cloudwatch-monitors-to-auto-scale-your-amazon-web-service/#

基本上,您在自动缩放组上设置了cloudwatch警报或图表,而不是您的ec2实例。根据警报设置cpu平均值和比例。

答案 2 :(得分:0)

我无法弄清楚如何在CloudWatch中查看正在运行的实例数量。所以我决定通过AWS PHP SDK自己测量它们,这实际上比我想象的要容易得多。

以下是我的cron命令中的代码,适用于任何想要了解的人:

public function fire(){
    $client = AWS::get('CloudWatch');

    $containers = [
       'production',
       'staging'
    ];

    foreach($containers as $container){
        $client->putMetricData([
            'Namespace'  => 'Company',
            'MetricData' => [
                [
                    'MetricName' => 'NumberOfInstances',
                    'Timestamp'  => time(),
                    'Value'      => $this->_getInstanceCount($container),
                    'Dimensions' => [
                        [
                            'Name'  => 'Environment',
                            'Value' => AwsHelper::getEnvironment($container)
                        ],
                        [
                            'Name'  => 'Container',
                            'Value' => $container   
                        ]
                    ]
                ]
            ]
        ]);
    }
}

protected function _getInstanceCount($container){
    $beanstalk = AWS::get('ElasticBeanstalk');
    $resources = $beanstalk->describeEnvironmentResources([
        'EnvironmentName' => AwsHelper::getEnvironment($container)
    ])->get('EnvironmentResources');

    return count($resources['Instances']);
}

AwsHelper是一个自定义类,仅用于检索容器的环境。 AWS是适用于PHP的官方AWS SDK:http://aws.amazon.com/sdkforphp/

我使用了这些文档:

http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.CloudWatch.CloudWatchClient.html#_putMetricData

答案 3 :(得分:0)

要使用默认 EC2 / ASG配置执行类似的操作,请为与您的Elastic beantalk环境相关联的负载均衡器使用HealthyHostCount指标。

假设您的所有主机都正常,那么它实际上将与自动伸缩组的实例数相同。

在“ CloudWatch>指标”中,搜索“ healthyhostcount”,您将看到一个负载均衡器列表。为您要监视的EB环境选择一个。