异常点检测
这取决于异常点检测的类型,驱逐或者以内联(例如在连续的 5xx 的情况下)或以指定的间隔(例如在定期成功率的情况下)运行。驱逐算法的工作原理如下:
- 主机被确定为异常点。
- 主机被驱逐需要几毫秒。主机被驱逐意味着主机被标记为不健康,并且在负载均衡期间不会被使用,除非负载均衡器处于恐慌情形中。毫秒数等于 outlier_detection.base_ejection_time_msvalue 乘以主机被驱逐的次数。这会导致主机主机被弹出需要越来越长的时间(如果它们继续失败)。
- 被驱逐的主机将在弹出时间满足后自动重新投入使用。通常,异常检测与主动健康检查一起用于全面的健康检查解决方案。
Envoy 支持以下的异常点检测类型:
如果上游主机返回一些连续的 5xx,它将被驱逐。请注意,在这种情况下,5xx 意味着实际的 5xx 响应代码,或者会导致 HTTP 路由器代表上游返回一个事件(重置、连接失败等)的事件。主机被弹出时所需的连续 5xx 数量由 值控制。
如果上游主机返回一些连续的“网关错误”(502、503 或 504 状态码),它将被驱逐。请注意,这包括会导致 HTTP 路由器代表上游返回其中一个状态码的事件(重置、连接失败等)。主机被驱逐所需的连续网关故障的数量由 outlier_detection.consecutive_gateway_failure 值控制。
基于成功率的异常值驱逐聚合来自集群中每个主机的成功率数据。然后以给定的间隔基于统计异常值检测来驱逐主机。如果主机在聚合时间间隔内的请求量小于 值,则无法为主机计算成功率异常点驱逐。此外,如果某个时间间隔内所需的最小请求量的主机数小于 outlier_detection.success_rate_minimum_hosts 值,则不会对集群执行检测。
Envoy 可以选择生成异常点驱逐事件日志。这在日常操作中非常有用,因为全局统计信息不能提供关于哪些主机正在被驱逐以及被驱逐的原因。日志使用 JSON 格式,每行一个对象:
time
事件发生的时间。
-
自上次动作(被驱逐或未被驱逐)发生时到现的时间(以秒为单位)。由于在第一次驱逐之前没有动作,所以该值将为 。
cluster
拥有被驱逐主机的 。
upstream_url
被驱逐主机的 URL,例如
tcp://1.2.3.4:80
。action
发生的动作。如果主机被驱逐,则为
eject
;如果主机恢复服务,则为uneject
。type
enforced
如果
action
为eject
,则指定驱逐是否被强制执行。true
表示主机被驱逐。false
表示事件已记录,但主机未被实际驱逐。host_success_rate
如果
action
为 ,指定发生驱逐事件时主机在0-100
范围内的成功率。cluster_success_rate_average
如果
action
为eject
,指定发生驱逐事件时集群中主机在0-100
范围内的平均成功率。-
如果
action
为eject
并且type
为 ,指定发生驱逐事件时的成功率驱逐阈值。