异常值检测和弹出是动态确定上游群集中的某些主机是否正在执行不同于其他主机的过程,并将其从正常负载平衡集中移除。 性能可能沿着不同的轴线,例如连续的故障,时间成功率,时间延迟等。异常检测是被动健康检查的一种形式。 特使还支持主动健康检查。 被动和主动健康检查可以一起使用或独立使用,形成整体上游健康检查解决方案的基础。
弹射算法
取决于异常值检测的类型,弹出或者以行内(例如在连续5xx的情况下)或以指定的间隔(例如在定期成功率的情况下)运行。 弹射算法的工作原理如下:
- 主机被确定为异常。
- 特使检查以确保弹出的主机数量低于允许的阈值(通过outlier_detection.max_ejection_percent设置指定)。 如果弹出的主机数量超过阈值,主机不会被弹出。
- 主机被弹出几毫秒。 弹出表示主机被标记为不健康,在负载平衡期间不会使用,除非负载平衡器处于紧急情况。 毫秒数等于outlier_detection.base_ejection_time_ms值乘以主机被弹出的次数。 这会导致主机如果继续失败,则会被弹出更长和更长的时间。
- 弹出的主机将在弹出时间满足后自动重新投入使用。 一般而言,异常值检测与主动健康检查一起使用,用于全面的健康检查解决方案。
检测类型
Envoy支持以下异常检测类型:
连续5xx
如果上游主机返回一些连续的5xx,它将被弹出。请注意,在这种情况下,5xx意味着一个实际的5xx响应代码,或者一个会导致HTTP路由器代表上游返回的事件(复位,连接失败等)。弹出所需的连续5xx数量由outlier_detection.consecutive_5xx值控制。
连续的网关故障
如果上游主机返回一些连续的“网关错误”(502,503或504状态码),它将被弹出。请注意,这包括会导致HTTP路由器代表上游返回其中一个状态码的事件(重置,连接失败等)。弹出所需的连续网关故障的数量由outlier_detection.consecutive_gateway_failure值控制。
成功率
基于成功率的异常值弹出汇总来自群集中每个主机的成功率数据。然后以给定的时间间隔基于统计异常值检测来弹出主机。如果主机在聚合时间间隔内的请求量小于outlier_detection.success_rate_request_volume值,则无法为主机计算成功率异常值弹出。此外,如果一个时间间隔内请求量最小的主机数量小于outlier_detection.success_rate_minimum_hosts值,则不会对群集执行检测。
弹射事件记录
Envoy可以选择生成异常值弹出事件日志。 这在日常操作中非常有用,因为全局统计数据不能提供有关哪些主机被弹出的信息以及原因。 日志使用每行一个对象的JSON格式:
{ "time": "...", "secs_since_last_action": "...", "cluster": "...", "upstream_url": "...", "action": "...", "type": "...", "num_ejections": "...", "enforced": "...", "host_success_rate": "...", "cluster_success_rate_average": "...", "cluster_success_rate_ejection_threshold": "..."}
time
事件发生的时间。
secs_since_last_action
自从上一次操作(弹出或未注射)发生以秒为单位的时间。由于在第一次喷射之前没有动作,所以该值将为-1。
cluster
拥有弹出主机的群集。
upstream_url
弹出的主机的URL。例如,tcp://1.2.3.4:80。
action
发生的行动。如果主机被弹出,则弹出;如果弹出主机,则弹出。
type
如果操作弹出,指定发生的弹出类型。当前类型可以是5xx,GatewayFailure或SuccessRate之一。
num_ejections
如果操作被弹出,则指定主机已被弹出的次数(对于该特使而言是本地的,并且如果主机由于任何原因从上游集群移除并且然后被重新添加)则被重置。
enforced
如果操作被弹出,则指定弹出是否被强制执行。真正意味着主机被弹出。假意味着事件被记录了,但是主机并没有被弹出。
host_success_rate
如果操作弹出,并且类型为SuccessRate,则指定喷射事件发生时在0-100范围内的主机成功率。
cluster_success_rate_average
如果操作弹出,并且类型为SuccessRate,则指定弹出事件时集群中主机在0-100范围内的平均成功率。
cluster_success_rate_ejection_threshold
如果操作弹出,类型为SuccessRate,则指定弹出事件时的成功率弹出阈值。
配置参考
- 集群管理器全局配置
- 每个群集配置
- 运行时设置
- 统计参考