我目前正在开发一个高流量网站,该网站正在使用AWS(除其他外)负载平衡。我们正在配置负载均衡器,因此我们有足够的实例来运行以保持站点运行,但不会太多导致我们赔钱。
我们现在接近这个的方法是密切关注CloudWatch中的CPU利用率并相应地更改我们的配置。
我们遇到的一个问题是,我们似乎无法弄清楚如何让CloudWatch绘制运行实例的数量,以便我们可以将其与CPU利用率相抵消。我们只能看到当前活动的实例数量,因此我们最终需要检查很多次,而不是回顾过去几小时/几天/周的统计数据。
理想情况下,我希望看到每个Elastic Beanstalk应用程序的实例数量的图表。
我对AWS及其所有组件都很陌生,所以我可能会以完全错误的方式看待这个,所以如果有人对如何正确配置实例扩展有任何其他建议和/或资源我会爱听到它。
为此,请在Auto Scaling组上启用Group Metrics Collection。要执行此操作,请转到EC2 Dashboard - > Auto Scaling Groups。找到要收集指标的组,然后使用监控选项卡下的启用组指标集合。完成后,您可以在Scaling Group存储桶下的CloudWatch中查看该组。
希望这可以帮助。
阅读这篇文章
基本上,您在自动缩放组上设置了cloudwatch警报或图形而不是ec2实例。将其设置为cpu average并根据警报进行缩放。
我无法弄清楚如何在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/
我用过这些文档: