Service Mesh (ASM)會為所有流入、流出及網格內部的服務流量產生指標,以便監控服務行為。這些指標包括總流量數、錯誤率和請求回應時間等資訊。然而,長時間運行會產生大量的指標資料,顯著增加了Envoy和Prometheus的資源消耗。為此,ASM提供了定期清理監控指標的配置,支援定期清理Envoy中緩衝的一段時間內未使用的指標,以減少Envoy記憶體消耗,並降低Prometheus拉取指標時的網路負載。本文將介紹如何配置定期清理功能及其應用執行個體。
前提條件
已添加叢集到ASM執行個體,且執行個體版本在1.18及以上。具體操作,請參見添加叢集到ASM執行個體。
配置方式
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在可觀測配置頁面,單擊全域頁簽,在監控指標設定處輸入定期清理時間,然後單擊提交。
重要建議監控指標定期清理時間至少設為Prometheus指標抓取時間
scrape_interval
的兩倍,以確保在指標清理之前Prometheus能夠成功地抓取指標。
樣本示範
部署樣本應用
使用以下內容在資料面叢集部署樣本應用。具體操作,請參見通過編排模板建立Linux應用或使用YAML模板建立。
執行以下命令,查看應用狀態,
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE httpbin-846bxxx694-xxxxx 2/2 Running 0 44s sleep-866xxx97f9-xxxxx 2/2 Running 0 44s
啟用指標並測試
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在可觀測配置頁面,單擊全域頁簽,在監控指標設定列表中,勾選SERVER側指標的REQUEST_COUNT指標的啟用。然後單擊提交。
執行以下命令,訪問httpbin應用。
kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl -s httpbin:8000/status/418 > /dev/null; done'
執行以下命令,查看httpbin應用的監控指標。
kubectl exec -it deploy/httpbin -c istio-proxy -- curl 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{
預期輸出:
istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...,request_protocol="http",response_code="418",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 20
配置監控指標定期清理
根據配置方式中的步驟,配置監控指標定期清理時間為10s。
指標清理會有幾秒的延遲,驗證過程中,您可以視情況適當調整清理時間。
配置完成後,執行以下命令,查看httpbin應用的監控指標。
kubectl exec -it deploy/httpbin -c istio-proxy -- sh -c ' for i in $(seq 1 2); do echo "# Current content of the istio_requests_total metric: "; curl -s 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{; sleep 15; done'
預期輸出:
# Current content of the istio_requests_total metric: istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...connection_security_policy="mutual_tls"} 30 # Current content of the istio_requests_total metric:
以上測試命令共發送2次請求。在清理之前,每次請求都會返回一行指標內容輸出和一行自訂輸出;15s後指標資料已經被清理,每次請求的返回變為只有一行自訂輸出。