我目前正在为一个高流量网站开发,该网站正在使用AWS(除其他外)负载平衡。我们正在配置负载均衡器,因此我们有足够的实例运行以保持站点运行,但不会太多导致我们赔钱。
我们现在接近这一点的方法是密切关注CloudWatch中的CPU利用率并相应地更改我们的配置。
我们遇到的一个问题是,我们似乎无法弄清楚如何让CloudWatch绘制运行实例的数量,以便我们可以将其与CPU利用率相抵消。我们只能看到当前活动的实例数量,因此我们最终需要检查很多次,而不是回顾过去几小时/几天/周的统计数据。
理想情况下,我希望看到每个Elastic Beanstalk应用程序的实例数量图表。
我对AWS及其所有组件都相当新,所以我可能会以完全错误的方式看待这个问题,所以如果有人对如何正确配置实例扩展我有任何其他建议和/或资源我我很乐意听到它。
答案 0 :(得分:2)
为此,请在Auto Scaling组上启用Group Metrics Collection。 为此,请转到EC2仪表板-> Auto Scaling组。找到要在其上收集度量标准的组,然后使用“监视”选项卡下的“启用组度量标准集合”。 完成后,您可以在CloudWatch中的“缩放组”存储桶下看到该组。
希望这会有所帮助。
答案 1 :(得分:0)
阅读这篇文章
基本上,您在自动缩放组上设置了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/
我使用了这些文档:
答案 3 :(得分:0)
要使用默认 EC2 / ASG配置执行类似的操作,请为与您的Elastic beantalk环境相关联的负载均衡器使用HealthyHostCount
指标。
假设您的所有主机都正常,那么它实际上将与自动伸缩组的实例数相同。
在“ CloudWatch>指标”中,搜索“ healthyhostcount”,您将看到一个负载均衡器列表。为您要监视的EB环境选择一个。