指標與日誌常見問題

可以通過 REST 訪問 Istio 指標嗎?

您可以使用 Prometheus 收集有關 Istio 的遙測數據。然後使用 Prometheus 的 HTTP API 來查詢該數據。

代理內遙測 (又稱 v2) 和基於 Mixer 的遙測 (又稱 v1) 報告的遙測數據有什麼差異?

與基於 Mixer 的遙測 (又稱 v1) 方法相比,代理內遙測 (又稱 v2) 降低了資源成本並提高了代理效能,並且是 Istio 中呈現遙測數據的首選機制。但是,v1 和 v2 之間報告的遙測數據存在一些差異,如下所列

  • 網格外流量缺少標籤 代理內遙測依賴 Envoy 代理之間的元數據交換來收集對等工作負載名稱、命名空間和標籤等資訊。在基於 Mixer 的遙測中,此功能由 Mixer 執行,作為將請求屬性與平台數據組合的一部分。此元數據交換由 Envoy 代理執行,方法是為 HTTP 協議添加特定的 HTTP 標頭或增強 TCP 協議的 ALPN 協議,如 此處 所述。這需要將 Envoy 代理注入到客戶端和伺服器工作負載中,這意味著當一個對等方不在網格中時,報告的遙測數據將缺少對等屬性,例如工作負載名稱、命名空間和標籤。但是,如果兩個對等方都注入了代理,則在生成的指標中將可以使用 此處 提到的所有標籤。當伺服器工作負載不在網格中時,伺服器工作負載元數據仍然會分發到客戶端 sidecar,導致客戶端指標填寫伺服器工作負載元數據標籤。

  • TCP 元數據交換需要 mTLS TCP 元數據交換依賴 Istio ALPN 協議,這需要啟用相互 TLS (mTLS) 才能讓 Envoy 代理成功交換元數據。這意味著如果您的叢集中未啟用 mTLS,則 TCP 協議的遙測數據將不包含對等資訊,例如工作負載名稱、命名空間和標籤。

  • 沒有機制可以為直方圖指標配置自定義 buckets 基於 Mixer 的遙測支援自定義直方圖類型指標 (如請求持續時間和 TCP 位元組大小) 的 buckets。代理內遙測沒有此類可用機制。此外,代理內遙測中延遲指標可用的 buckets 單位為毫秒,而基於 Mixer 的遙測中延遲指標的單位為秒。但是,在代理內遙測中,預設情況下,較低延遲層級的延遲指標可以使用更多 buckets。

  • 短暫指標沒有指標過期機制 基於 Mixer 的遙測支援指標過期,因此對於可配置的時間長度內未產生的指標,Prometheus 將取消註冊以進行收集。這在某些情況下非常有用,例如產生短暫指標的一次性工作。取消註冊指標可防止報告未來不再變化的指標,從而減少 Prometheus 中的網路流量和儲存空間。代理內遙測中沒有提供此過期機制。此問題的解決方法可以在 此處 找到。

我該如何管理短暫的指標?

短暫指標可能會阻礙 Prometheus 的效能,因為它們通常是標籤基數的大來源。基數是標籤唯一值的數量度量。若要管理短暫指標對 Prometheus 的影響,您必須先識別高基數的指標和標籤。Prometheus 在其 /status 頁面上提供基數資訊。可以 通過 PromQL 檢索其他資訊。有多種方法可以減少 Istio 指標的基數

  • 停用主機標頭回退。如果 Istio 代理無法從其他請求元數據中確定目標服務,則 destination_service 標籤是一種潛在高基數來源。如果用戶端正在使用各種主機標頭,則可能會導致 destination_service 的值數量眾多。在這種情況下,請按照 指標自定義 指南在整個網格中停用主機標頭回退。若要針對特定工作負載或命名空間停用主機標頭回退,您需要複製 stats EnvoyFilter 配置、更新它以停用主機標頭回退,然後使用更具體的選取器應用它。此問題 提供了有關如何實現此目標的更多詳細資訊。
  • 從集合中刪除不必要的標籤。如果不需要高基數的標籤,您可以通過使用 tags_to_remove指標自定義 從指標集合中刪除該標籤。
  • 通過聯盟或分類來正規化標籤值。如果需要標籤提供的資訊,您可以使用 Prometheus 聯盟請求分類來正規化標籤。
我該如何遷移現有的 Mixer 功能?

Mixer 在 Istio 1.8 版本中已移除。如果您仍然依賴 Mixer 的內建適配器或任何網格擴展的進程外適配器,則需要進行遷移。

對於內建適配器,提供了多種替代方案

對於自定義進程外適配器,強烈建議遷移到基於 Wasm 的擴展。請參閱有關 Wasm 模組開發擴展分發 的指南。作為臨時解決方案,您可以在 Mixer 中啟用 Envoy ext-authz 和 gRPC 存取日誌 API 支援,這使您可以在繼續使用帶有進程外適配器的 1.7 Mixer 的同時,將 Istio 升級到 1.7 之後的版本。這將為您提供更多時間來遷移到基於 Wasm 的擴展。請注意,此臨時解決方案尚未經過實戰測試,並且不太可能獲得修補程式修復,因為它僅在 Istio 1.7 分支上可用,該分支在 2021 年 2 月之後已超出支援範圍。

Prometheus 适配器可以在非 Kubernetes 環境中使用嗎?

您可以使用 docker-compose 安裝 Prometheus。

如何找出 Istio 中請求發生了什麼事?

您可以啟用 追蹤,以確定 Istio 中請求的流程。

此外,您可以使用以下命令來了解有關網格狀態的更多資訊

  • istioctl proxy-config:檢索在 Kubernetes 中執行時有關代理配置的資訊

    # Retrieve information about bootstrap configuration for the Envoy instance in the specified pod.
    $ istioctl proxy-config bootstrap productpage-v1-bb8d5cbc7-k7qbm
    
    # Retrieve information about cluster configuration for the Envoy instance in the specified pod.
    $ istioctl proxy-config cluster productpage-v1-bb8d5cbc7-k7qbm
    
    # Retrieve information about listener configuration for the Envoy instance in the specified pod.
    $ istioctl proxy-config listener productpage-v1-bb8d5cbc7-k7qbm
    
    # Retrieve information about route configuration for the Envoy instance in the specified pod.
    $ istioctl proxy-config route productpage-v1-bb8d5cbc7-k7qbm
    
    # Retrieve information about endpoint configuration for the Envoy instance in the specified pod.
    $ istioctl proxy-config endpoints productpage-v1-bb8d5cbc7-k7qbm
    
    # Try the following to discover more proxy-config commands
    $ istioctl proxy-config --help
    
  • kubectl get:獲取有關網格中不同資源以及路由配置的資訊

    # List all virtual services
    $ kubectl get virtualservices
    
我可以使用 Prometheus 來抓取 Istio 的應用程式指標嗎?

是。Prometheus 是一個開源監控系統和時間序列資料庫。您可以將 Prometheus 與 Istio 結合使用,以記錄追蹤 Istio 和服務網格內應用程式運作狀況的指標。您可以使用 GrafanaKiali 之類的工具來視覺化指標。請參閱 Prometheus 的配置,以了解如何啟用指標收集。

一些注意事項

  • 如果 Prometheus pod 在 istiod pod 能夠產生所需憑證並將其分發到 Prometheus 之前啟動,則需要重新啟動 Prometheus pod,才能從相互 TLS 保護的目標收集資料。
  • 如果您的應用程式在專用埠上公開 Prometheus 指標,則應將該埠添加到服務和部署規格中。