11

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

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

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

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

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

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

有人可以解释一下如何在只注册一个实例时使用 HHC 来获取警报吗?平均 HHC 是要走的路还是我应该使用其他指标?

4

2 回答 2

7

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

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

如果您有 3 个 AZ,每个 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,aPeriod为 1 分钟,Sum of HealthyHostCount当值低于 2 时触发(2 data values * 1 Healthy AZ * 1 healthy server = 2,不健康 AZ 的其他 4 个数据值应为 0,因此它们不会影响总和)。

更新:

事实证明,执行的运行状况检查的数量还取决于构成 ELB 的内部实例的数量(通常每个 AZ 一个),因此,如果您遇到流量高峰,或者有足够的负载使单个 elb-internal-instance 饱和,ELB 内的内部服务器数量将会增长,并且您会意外地拥有更多的数据点。sum仅当您有大量流量时,这可能会影响价值。在 3 个可用区中分布的 6k RPM 的峰值负载时,我没有看到这个问题。如果这是您的情况,那么使用average是更安全的选择,但我建议您使用低于 0.65 作为阈值。

链接还让我想知道该Cross-Zone Load Balancing功能如何影响数据点的数量......

于 2014-05-09T04:30:49.083 回答
4

这是 CloudWatch Web 控制台不公开 Cloud Watch 可以执行的所有操作的区域。正如文档解释的那样,HealthyHostCount是每个可用区的指标。控制台允许您按可用性区域(但跨所有负载均衡器)或负载均衡器(但跨所有区域)拥有 HealthHostCount,但不能双向切片。

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

于 2012-07-23T19:21:44.147 回答