Service Mesh (ASM)支援無侵入式熔斷、限流及流量監控。本文介紹熔斷和限流常用的大盤配置及警示規則。
熔斷降級
流量熔斷是一種過載保護機制,主要用於防止系統因為短時間內過大的流量而崩潰。在雲原生服務之間存在東西向調用流量的情況下,如果某個服務發生故障(例如:響應過慢或者失敗率升高),可能會導致該服務所在調用鏈路上的一系列服務也發生連鎖崩潰。
通過為服務間的東西向調用流量配置熔斷規則,可以實現當請求失敗率或響應逾時次數達到閾值時,主動“切斷”來自上遊服務的請求。在保護上遊服務的同時,也有效防止故障在整個調用鏈路中擴散,造成整個系統雪崩。
配置熔斷規則後,每個網格代理將基於其代理的請求分別計算請求失敗率或響應逾時次數。因此,對於同一個發生故障的上遊服務、用戶端網格代理髮生熔斷的時機可能略有不同。
大盤樣本

對應每個面板說明如下:
|
面板(Panels) |
說明 |
|
Requests |
請求總體情況,包含以下指標:
|
|
Requests OK Percent |
請求成功的總數佔總請求數的比例。 |
|
Requests Throttled Percent |
觸發熔斷的請求佔總請求數的比例。 |
您可以將以下JSON匯入到Grafana大盤,為叢集建立熔斷大盤。您也可以修改或根據以下JSON內容自訂建立大盤。
警示規則樣本
|
警示配置 |
樣本 |
說明 |
|
自訂PromQL語句 |
(sum by(cluster, namespace) (increase(envoy_asm_circuit_breaker_total_broken_requests[1m]))) > 10 |
查詢最近1分鐘之內熔斷的請求數量,並根據觸發熔斷的服務所在命名空間以及服務名稱進行分組。當1分鐘內被熔斷的請求數量大於10時觸發警示。 |
|
警示內容 |
發生服務級熔斷!命名空間:{{$labels.namespace}},發生熔斷的目標服務:{{$labels.cluster}}。當前1分鐘內熔斷的請求數量:{{ $value }} |
展示了觸發熔斷的服務所在命名空間以及服務名稱,以及最近1分鐘內發往該服務被熔斷的請求數量的警示資訊格式。 |
全域限流防護
在Envoy代理中,全域限流是一種用於控制整個服務網格中請求速率的機制。它基於Envoy的限流服務(Rate Limit Service)實現。該服務可以集中處理來自整個服務網格中的流量,並根據預先定義的規則和配額來限制請求的速率。
全域限流可以與本地限流結合使用,以提供不同層面的限流功能。
大盤樣本

對應每個面板說明如下:
|
面板(Panels) |
說明 |
|
Requests |
請求總體情況,包含以下指標:
|
|
Requests OK Percent |
請求成功的總數佔總請求數的比例。 |
|
Requests Reached Limits Percent |
觸發限流的請求佔總請求數的比例。 |
您可以將以下JSON匯入到Grafana大盤,為叢集建立全域限流大盤。您也可以修改或根據以下JSON內容自訂建立大盤。
警示規則樣本
|
警示配置 |
樣本 |
說明 |
|
自訂PromQL語句 |
sum (increase(envoy_cluster_ratelimit_over_limit[1m])) by (namespace, service_istio_io_canonical_name) > 10 |
查詢最近1分鐘之內限流的請求數量,並根據觸發限流的服務所在命名空間以及服務名稱進行分組。當1分鐘內被限流的請求數量大於10時觸發警示。 |
|
警示內容 |
已觸發限流!命名空間:{{$labels.namespace}},發生限流的目標服務:{{$labels.service_istio_io_canonical_name}}。當前1分鐘內限流的請求數量:{{ $value }} |
展示了觸發限流的服務所在命名空間以及服務名稱,以及最近1分鐘內發往該服務被限流的請求數量的警示資訊格式。 |
本地限流防護
Envoy代理使用令牌桶演算法實現本地限流。令牌桶演算法是一種限制發送到服務端的請求數量的方法,基於一定數量的令牌桶。儲存桶以恒定的速率不斷填充令牌,當向服務發送請求時,會從儲存桶中刪除一個令牌。如果儲存桶為空白,則請求將被拒絕。
本地限流可以與全域限流結合使用,以提供不同層面的限流功能。
大盤樣本

對應每個面板說明如下:
|
面板(Panels) |
說明 |
|
Requests |
請求總體情況,包含以下指標:
|
|
Requests OK Percent |
請求成功的總數佔總請求數的比例。 |
|
Requests Reached Limits Percent |
觸發限流的請求佔總請求數的比例。 |
您可以將以下JSON匯入到Grafana大盤,為叢集建立本地限流大盤。您也可以修改或根據以下JSON內容自訂建立大盤。
警示規則樣本
|
警示配置 |
樣本 |
說明 |
|
自訂PromQL語句 |
sum (increase(envoy_http_local_rate_limiter_http_local_rate_limit_enforced[1m])) by (namespace, service_istio_io_canonical_name) > 10 |
查詢最近1分鐘之內限流的請求數量,並根據觸發限流的服務所在命名空間以及服務名稱進行分組。當1分鐘內被限流的請求數量大於10時觸發警示。 |
|
警示內容 |
已觸發限流!命名空間:{{$labels.namespace}},發生限流的目標服務:{{$labels.service_istio_io_canonical_name}}。當前1分鐘內限流的請求數量:{{ $value }} |
展示了觸發限流的服務所在命名空間以及服務名稱,以及最近1分鐘內發往該服務被限流的請求數量的警示資訊格式。 |
相關操作
匯入Grafana大盤
登入ARMS控制台。
-
在左側導覽列,單擊接入管理。
-
在已接入環境頁簽中選擇容器環境,通過叢集名稱搜尋環境,然後單擊進入目標環境。單擊大盤目錄。
大盤目錄位於容器環境詳情頁基本資料地區中,單擊其對應的值即可跳轉至Grafana大盤目錄。
-
在Dashboards頁簽右側,單擊Import按鈕。
-
將JSON內容粘貼到Import via panel json地區,然後單擊Load按鈕。保持預設設定,單擊Import,即可完成大盤的匯入。
說明您也可以通過上傳JSON檔案的方式匯入大盤。