4

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

我们现在解决这个问题的方法是密切关注 CloudWatch 中的 CPU 利用率并相应地更改我们的配置。

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

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

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

4

4 回答 4

6

为了做到这一点,在 Auto Scaling 组上启用组指标收集。为此,请转到 EC2 Dashboard -> Auto Scaling Groups。找到您要收集指标的组,然后使用监控选项卡下的启用组指标收集。完成后,您可以在 CloudWatch 中的 Scaling Group 存储桶下看到该组。

希望这可以帮助。

于 2018-09-11T17:51:49.557 回答
0

阅读这篇文章

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

基本上,您在自动缩放组而不是您的 ec2 实例上设置 cloudwatch 警报或图表。将其设置为 cpu 平均值并根据警报进行缩放。

于 2014-01-25T23:04:35.087 回答
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 开发工具包:http: //aws.amazon.com/sdkforphp/

我使用了这些文档:

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

于 2014-01-28T12:58:09.633 回答
0

要对默认EC2/ASG 配置执行类似操作,请使用HealthyHostCount与弹性 beanstalk 环境关联的负载均衡器的指标。

假设您的所有主机都是健康的,那么它实际上与 Auto Scaling 组的实例计数相同。

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

于 2019-07-22T00:22:34.427 回答