### 異常檢測
異常值檢測和逐出是動態確定上游群集中,某些主機是否正在執行不同于其他主機的過程,并將其從正常負載平衡集中移除。 性能可能會受到不同程度的影響,例如連續的故障,時間成功率,時間延遲等。異常檢測是被動健康檢查的一種形式。 Envoy還支持主動健康檢查。被動和主動健康檢查可以一起使用或獨立使用,形成整體上游健康檢查解決方案的基礎。
#### 逐出算法
取決于異常值檢測的類型,彈出或者以行內(例如在連續5xx的情況下)或以指定的間隔(例如在定期成功率的情況下)運行。逐出算法的工作原理如下:
1. 主機被確定為異常。
2. Envoy檢查以確保逐出的主機數量低于允許的閾值(通過`outlier_detection.max_ejection_percent`設置指定)。如果逐出的主機數量超過閾值,主機不會被逐出。
3. 主機被逐出幾毫秒。意味著主機被標記為不健康,在負載平衡期間不會使用,除非負載平衡器處于緊急情況。毫秒數等于`outlier_detection.base_ejection_time_ms`值乘以主機被逐出的次數。這會導致主機如果繼續失敗,則會被逐出更長和更長的時間。
4. 逐出的主機將在逐出時間滿之后自動重新投入使用。一般而言,異常值檢測與主動健康檢查一起使用,用于全面的健康檢查解決方案。
### 檢測類型
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**:
觸發的動作(`eject`/`uneject`)
**type**:
如果`action`是`eject`,這里描述的是`eject類型`;如`5xx`、`GatewayFailure`、`SuccessRate`。
**num_ejections**:
如果`action`是`eject`,指定主機被逐出的累計次數(對于Envoy而言是本地的,并且如果主機被重新添加到集群,那么這個數值會被重置)
**enforced**:
如果`action`是`eject`,指定逐出是否被強制執行。`true`表示主機被強制逐出。`false`表示著事件被記錄了,但是主機并沒有被逐出。
**host_success_rate**:
如果`action`是`eject`,并且`type`是`SuccessRate`,主機在被逐出時的成功率(0~100范圍)。
**cluster_success_rate_average**:
如果`action`是`eject`,并且`type`是`SuccessRate`,主機在被逐出時所在的集群平均成功率(0~100范圍)。
**cluster_success_rate_ejection_threshold**:
如果`action`是`eject`,并且`type`是`SuccessRate`,指定逐出事件的成功率閾值。
### 配置參考
- [集群管理全局配置](../../v1APIreference/Clustermanager/Outlierdetection.md)
- [每個群集配置](../../v1APIreference/Clustermanager/Cluster/Outlierdetection.md)
- [運行時設置](../../Configurationreference/Clustermanager/Runtime.md)
- [統計參考](../../Configurationreference/Clustermanager/Statistics.md)
### 返回
- [架構介紹](../Architectureoverview.md)
- [簡介](../../Introduction.md)
- [首頁目錄](../../README.md)
- 首頁
- 簡介
- Envoy是什么
- 架構介紹
- 術語
- 線程模型
- 監聽器
- L3/L4網絡過濾器
- HTTP連接管理
- HTTP過濾器
- HTTP路由
- gRPC
- WebSocket支持
- 集群管理
- 服務發現
- 健康檢查
- 連接池
- 負載均衡
- 異常檢測
- 熔斷
- 全局限速
- TLS
- 統計
- 運行時配置
- 跟蹤
- TCP代理
- 訪問日志
- MongoDB
- DynamoDB
- Redis
- 熱重啟
- 動態配置
- 初始化
- 逐出
- 腳本
- 部署
- 業界對比
- 獲得幫助
- 歷史版本
- 編譯安裝
- 編譯
- 參考配置
- 演示沙箱
- 前端代理
- Zipkin跟蹤
- Jaeger跟蹤
- gRPC橋接
- 構建Envoy Docker鏡像
- 工具
- 配置參考
- V1 API 概述
- V2 API 概述
- 監聽器
- 網絡過濾器
- TLS客戶端身份認證
- Echo
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP連接管理器
- 路由匹配
- 流量轉移/分流
- HTTP頭部操作
- HTTP頭部清理
- 統計
- 運行時設置
- 路由發現服務
- HTTP過濾器
- 緩存
- CORS過濾器
- 故障注入
- DynamoDB
- gRPC HTTP/1.1 橋接
- gRPC-JSON 轉碼過濾器
- gRPC-Web 過濾器
- 健康檢查
- 速率限制
- 路由
- Lua
- 集群管理
- 統計
- 運行時設置
- 集群發現服務
- 健康檢查
- 熔斷
- 訪問日志
- 限速服務
- 運行時配置
- 路由表檢查工具
- 運維管理
- 命令行選項
- 熱重啟
- 管理接口
- 統計概述
- 運行時配置
- 文件系統
- 自定義擴展示例
- V1 API參考
- 監聽器
- 網絡過濾器
- TLS客戶端身份認證
- Echo
- HTTP連接管理
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP路由配置
- 虛擬主機
- 路由
- 虛擬集群
- 速率限制配置
- 路由發現服務
- HTTP過濾器
- 緩存
- CORS過濾器
- DynamoDB
- 故障注入
- gRPC HTTP/1.1 橋接
- gRPC-JSON 轉碼過濾器
- gRPC-Web 過濾器
- 健康檢查
- Lua
- 速率限制
- 路由
- 集群管理
- 集群
- 健康檢查
- 熔斷
- TLS上下文
- 異常值檢測
- HASH環負載均衡配置
- 異常檢測
- 集群發現服務
- 服務發現服務
- 訪問日志
- 管理接口
- 限速服務
- 運行時配置
- 跟蹤
- V2 API參考
- 啟動引導
- 監聽&監聽發現
- 集群&集群發現
- 服務發現
- 健康檢查
- HTTP路由管理&發現
- TLS配置
- 通用的類型
- 網絡地址
- 協議選項
- 發現API
- 限速組件
- 過濾器
- 網絡過濾器
- TLS客戶端身份認證
- HTTP連接管理
- Mongo代理
- 速率限制
- Redis代理
- TCP代理
- HTTP過濾器
- 緩存
- 故障注入
- 健康檢查
- Lua
- 速率限制
- 路由
- gRPC-JSON轉碼器
- 常見訪問日志類型
- 常見故障注入類型
- FAQ
- Envoy有多快?
- 我在哪里獲得二進制文件?
- 我如何設置SNI?
- 如何設置區域感知路由?
- 我如何設置Zipkin跟蹤?