使用Prometheus進行監控是Istio提供的監控能力之一。Istio提供豐富的監控能力,為網格中的服務收集遙測數據。Mixer是負責提供策略控制和遙測收集的Istio組件。
Istio通過Mixer實現流量監控的基本流程如下圖:每個pod內有一個service和proxy,Envoy容器實現proxy功能,對流入和流出pod的流量進行管理、認證和控制。Mixer則主要負責訪問控制和遙測信息收集。當某個服務被請求時,首先會請求istio-policy服務,來判定是否具備訪問資格,若具備資格則放行,反之則請求不會被下發到服務。這一切的訪問信息,都會被記錄在Envoy中,之后會上報給Mixer作為原始數據,並生成具體的監測指標。

Figure 1 mixer拓撲
Mixer配合一系列后端基礎設施,為運維提供豐富而深入的控制和監測,並且不額外增加服務開發人員負擔。后端提供用於構建服務的支持功能,訪問控制系統,遙測捕獲系統,配額執行系統,計費系統等。Mixer開放了Istio服務與不同的基礎設施后端的交互能力,隔離用戶程序和各個基礎設施后端的實現細節。Istio通過豐富組件的邊界交互,減少系統復雜性,消除服務代碼中的策略邏輯並將控制權交給運維。
Mixer處理不同基礎設施后端的是通過使用通用插件模型實現的。每個插件都被稱為 Adapter,Mixer通過它們可對接到不同的基礎設施后端,這些后端可提供日志、監控、配額、ACL檢查等核心運維功能。這些功能靈活可控,你既可以定制新的基礎設施后端,也可以完全禁用這些功能。

Figure 2 mixer 及其適配器
Prometheus是一款開源的監控和告警系統,將所有信息存儲為時間序列數據,實現監控方式,實時分析系統運行的狀態、執行時間、調用次數等,以找到系統的熱點,為性能優化提供依據。Prometheus系統自2016年加入CNCF,以其靈活的檢索語言,高效的數據存儲方式以及多維度的數據模型被越來越多的人使用。Istio自0.8版本開始默認將Prometheus包含在內,Mixer支持對接到Prometheus監控設施的Adapter。用戶可以通過查詢service或pod看到Prometheus的運行狀態和地址。也可以通過簡潔明了的Prometheus的UI界面查看監測數據。
接下來通過實踐說明如何使用Prometheus查詢Istio指標,使用基於網頁的界面進行指標查詢。
1.驗證Prometheus是否在集群中運行(默認情況下Prometheus的設置包含在istio.yaml和istio-demo-auth.yaml中)。在安裝istio的Kubernetes環境中,執行如下命令:

2.通過瀏覽器訪問http://localhost:9090/graph,在網頁頂部的“Expression”輸入框中,輸入要查詢的命令,Prometheus能夠根據輸入自動提示可輸入的命令,然后單擊 Execute 按鈕。
1) 查詢所有服務的請求總數:istio_request_bytes_count

2) 查詢指定服務的請求總數:(如查詢對 productpage 服務的所有請求的總數)istio_request_bytes_count{destination_service="productpage.default.svc.cluster.local"}

3) 查詢指定時間范圍內對指定服務的請求總數:(如查詢過去5分鍾內對所有 productpage 服務的請求率)
istio_request_bytes_count {destination_service=~"productpage.*", response_code="200"}[5m])

如下圖,Prometheus在圖形界面中也提供了直觀的顯示。將鼠標放到圖中的折線可以看到請求的詳細信息,詳細信息中的每一項都可以作為選定參考指標的特性。

同時Istio支持和允許用戶自己定義新的遙測數據,用戶可以自定義需要的監控指標進而再使用Prometheus查看監控數據結果。
Istio通過mixer組件無縫對接Prometheus監控服務,滿足用戶對路由網關、應用服務、資源使用以及自定義指標等實時監控,幫助用戶在使用istio的過程中,快速實現對關鍵業務的運維需求。
相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019
