我们已经使用Web和worker类(多个集群)为AWS Beanstalk设置了一个不变的配置。部署新应用程序时,它将创建一个临时自动伸缩组,然后将其部署到该应用程序,最后切换回旧的自动伸缩组。此过程大约需要20-30分钟,并且效果很好。
尽管如此,每次我们部署应用程序时,监视状态:CPU利用率,内存利用率,磁盘空间等,在返回之前,它们都会消失5-6小时。似乎是一个AWS问题,但不确定我们是否做错了什么。还有其他人遇到过这种行为吗?有解决方法吗?
答案 0 :(得分:0)
我尝试通过选中CPUUtilization
,使用负载均衡的EB环境对一个实例进行复制问题。
在不变部署之后,我观察到很小的差距(10分钟)。距离5-6小时还很远。
观察到的延迟仅在EB控制台中。相应的CloudWatch(CW)指标没有没有延迟。这样,我可以在CW中监视CPUUtilization
,同时等待EB控制台赶上。
对于我的测试,我执行了两个不可变的部署。在CW中,指标与部署创建的新实例完全吻合(没有任何间隙):
实例的指标在CW中也应该可行。因此,在EB控制台赶上时,您应该可以在那里查看它们。
要获取所有单个指标的统一视图,可以使用metric math:
AVG(METRICS())
答案 1 :(得分:0)
对于以后发现此问题的任何人-我都知道了问题。我使用的脚本由Cloudwatch提供,该脚本在内部将自动扩展组名缓存6小时。通常,这不会成为问题,因为这些值不会定期更改。但是由于部署是不可变的,因此在部署期间会创建一个临时的自动扩展组,该组会缓存6小时。
要解决此问题,我在CloudWatchClient代码中替换了以下行:
$meta_data_short_ttl = 21600; # 6 hours
具有:
meta_data_short_ttl = 600; # 10 mins
如果您使用的是this script,也可以通过对现有代码进行.ebextension
更改来完成:
04-reduce-cache:
command: sed -i 's/meta_data_short_ttl = 21600; # 6 hours/meta_data_short_ttl = 600; # 10 mins/g' /opt/cloudwatch/aws-scripts-mon/CloudWatchClient.pm