异常检测

异常检测(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 集群管理的重要组成部分,合理配置可以显著提高系统的可靠性和容错能力。

文章导航

章节内容

这是章节的内容页面。

章节概览