如何在CloudWatch中使用ELB的HealthyHostCount进行监控?

时间:2012-07-23 08:29:11

标签: amazon-ec2 amazon-web-services metrics amazon-elb amazon-cloudwatch

我们有三个EC2实例 - 在eu-west-1区域的每个可用区(AZ)中有一个。它们使用ELB进行负载平衡。我们想要使用CloudWatch监控在负载均衡器上注册的实例数量。问题是:我不太了解HealthyHostCount指标。

对于部署,我们希望能够在不通知的情况下取消注册单个实例(从LB中取出)。因此警报将是:通知负载均衡器后面是否只有1个健康实例,持续5分钟。

据我所知,HealthyHostCount(HHC)是在给定ELB中注册的健康实例的数量,在所有AZ上平均。如果一切正常,HHC应该是1(无论在什么时间段内),因为每个AZ中有1个实例。

几天前,有人在没有重新注册实例的情况下部署,因此只有一个实例是平衡的。当我们注意到这一点时,我们创建了一个警报,当5分钟后平均HHC低于0.6时,通知我们。 (如果在ELB中只注册了1个实例,则HHC在任何时间段内应平均为0.33。)但是,警报从未更改为“ALARM”状态。

当我在CloudWatch中检查HHC时,HHC是没有意义的数字(我记得5分钟的间隔为10.0)。

这对我来说太乱了。每当我认为我理解该指标时,CloudWatch图表对我来说都是胡言乱语。

有人可以解释如何只注册一个实例时如何使用HHC来发出警报?平均HHC是可行的,还是应该使用其他指标?

2 个答案:

答案 0 :(得分:7)

每次执行运行状况检查时,HealthyHostCount指标会记录一个数据值,其中包含每个可用区的可用主机数。您的ELB运行状况检查具有Interval参数,该参数定义每分钟执行的运行状况检查数。

如果您正在观看每个AZ指标,健康检查Interval为10秒,该AZ中有2个健康主机,您将看到每分钟6个数据点(60/10)值为2.平均值,最大值和最小值将为2,但总和将为6*2=12

如果您有3个AZ,每个主机有2个主机,同样Interval = 10,但您正在查看Per-LB指标,您将看到每分钟3*6=18个数据点,每个值为2.平均值,最大值和最小值将为2,但总和将为18*2=36

我建议您设置一个可以分为60秒(5秒,6秒,10秒,15秒,20秒,30秒或60秒)的间隔值。

在您的情况下,如果间隔为30秒,并且每个AZ有3个AZ和1个服务器:每个AZ每分钟应该有2个数据点,因此设置警报Per-LB,{{{ 1}分钟,对于Period,当值为LowerOrEqual而不是2(Sum of HealthyHostCount时触发,不健康的AZ的其他4个数据值应为0,因此它们不会影响总和)。

更新:

turns out执行的运行状况检查的数量还取决于塑造ELB的内部实例的数量(每个AZ通常为一个),因此如果您遇到流量峰值或足够的负载以使其饱和单个elb-internal-instance,ELB内部服务器的数量将增加,并且您将意外地拥有更多数据点。仅当您有大量流量时,这可能会影响2 data values * 1 Healthy AZ * 1 healthy server = 2值。我没有看到这个问题,在3个AZ中分配了6k RPM的峰值负载。如果这是你的情况,那么使用sum是一个更安全的赌注,但我建议你使用LowerThan 0.65作为你的门槛。

link也让我想知道average功能如何影响数据点的数量......

答案 1 :(得分:4)

这是CloudWatch Web控制台不会公开云监视可以执行的所有操作的区域。正如docs解释,HealthyHostCount是每个可用区指标。控制台允许您按可用区域(但跨所有负载均衡器)或负载均衡器(但跨所有区域)使用HealthHostCount,但不能双向切片。

如果您只有一个负载均衡器,最简单的方法是在每个区域指标上设置一个警报。如果您有多个可用区域,那么您应该能够使用api在可用区域和负载均衡器之间创建警报切片(同样,每个负载均衡器有一个警报),但是就我而言,您无法从Web UI执行此操作知道。