异常检测
异常检测(Outlier Detection)是 Envoy 集群管理的重要功能,用于识别和隔离不健康的主机,提高系统的整体可靠性。
异常检测概念
异常检测通过监控主机的响应模式,识别异常行为并临时将其从负载均衡池中移除。被标记为异常的主机会在一定时间后重新加入池中。
检测策略
1. 连续失败检测
监控连续失败的请求数量:
outlier_detection:
consecutive_5xx: 5 # 连续 5 个 5xx 响应后标记为异常
base_ejection_time: 30s # 基础驱逐时间
max_ejection_percent: 10 # 最大驱逐百分比
2. 成功率检测
基于成功率的异常检测:
outlier_detection:
success_rate_request_volume: 100 # 最小请求量
success_rate_minimum_hosts: 5 # 最小主机数
success_rate_threshold: 85 # 成功率阈值(百分比)
failure_percentage_threshold: 85 # 失败率阈值
3. 延迟检测
基于响应时间的异常检测:
outlier_detection:
consecutive_gateway_failure: 5 # 连续网关失败
base_ejection_time: 30s
max_ejection_percent: 10
interval: 10s # 检测间隔
配置示例
基本异常检测配置
clusters:
- name: example_cluster
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
outlier_detection:
consecutive_5xx: 5
base_ejection_time: 30s
max_ejection_percent: 10
interval: 10s
hosts:
- socket_address:
address: example.com
port_value: 80
高级异常检测配置
clusters:
- name: advanced_cluster
connect_timeout: 0.25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
outlier_detection:
consecutive_5xx: 5
consecutive_gateway_failure: 3
success_rate_request_volume: 100
success_rate_minimum_hosts: 5
success_rate_threshold: 85
failure_percentage_threshold: 85
base_ejection_time: 30s
max_ejection_percent: 10
interval: 10s
enforcing_consecutive_5xx: 100
enforcing_consecutive_gateway_failure: 100
enforcing_success_rate: 100
enforcing_failure_percentage: 100
hosts:
- socket_address:
address: example.com
port_value: 80
驱逐机制
驱逐时间计算
驱逐时间使用指数退避算法:
驱逐时间 = base_ejection_time * (2^驱逐次数)
最大驱逐时间
outlier_detection:
base_ejection_time: 30s
max_ejection_time: 300s # 最大驱逐时间 5 分钟
强制执行配置
可以控制各种检测方法的强制执行百分比:
outlier_detection:
enforcing_consecutive_5xx: 100 # 100% 强制执行连续 5xx 检测
enforcing_consecutive_gateway_failure: 50 # 50% 强制执行网关失败检测
enforcing_success_rate: 100 # 100% 强制执行成功率检测
enforcing_failure_percentage: 100 # 100% 强制执行失败率检测
监控指标
异常检测相关的指标包括:
cluster.<cluster_name>.outlier_detection.ejections_active
:当前活跃的驱逐数量cluster.<cluster_name>.outlier_detection.ejections_total
:总驱逐次数cluster.<cluster_name>.outlier_detection.ejections_consecutive_5xx
:连续 5xx 驱逐次数cluster.<cluster_name>.outlier_detection.ejections_success_rate
:成功率驱逐次数
最佳实践
1. 合理设置阈值
- 根据服务特性调整连续失败次数
- 设置合适的成功率阈值
- 避免过于激进的驱逐策略
2. 监控和调优
- 监控驱逐指标
- 根据实际运行情况调整配置
- 定期评估异常检测效果
3. 配合健康检查
- 异常检测与健康检查配合使用
- 健康检查用于长期故障检测
- 异常检测用于短期故障处理
注意事项
- 异常检测会增加系统开销
- 驱逐时间过长可能影响服务恢复
- 驱逐时间过短可能导致频繁驱逐
- 需要根据实际业务场景调整配置
异常检测是 Envoy 集群管理的重要组成部分,合理配置可以显著提高系统的可靠性和容错能力。