可觀測性

Istio 為網格內的所有服務通訊產生詳細的遙測數據。此遙測數據提供了服務行為的可觀察性,使操作人員能夠排除故障、維護和優化其應用程式,而不會對服務開發人員造成任何額外的負擔。透過 Istio,操作人員可以徹底了解受監控服務的互動方式,包括與其他服務和 Istio 元件本身的互動。

Istio 產生以下類型的遙測數據,以提供整體服務網格的可觀察性

  • 指標。 Istio 根據監控的四個「黃金訊號」(延遲、流量、錯誤和飽和度)產生一組服務指標。 Istio 還為網格控制平面提供詳細的指標。 還提供基於這些指標構建的預設網格監控儀表板。
  • 分散式追蹤。 Istio 為每個服務產生分散式追蹤跨度,使操作人員可以詳細了解網格內的呼叫流程和服務依賴關係。
  • 存取日誌。 當流量流入網格內的服務時,Istio 可以產生每個請求的完整記錄,包括來源和目標元數據。 此資訊使操作人員能夠將服務行為稽核到個別的工作負載實例層級。

指標

指標提供了一種監控和理解整體行為的方法。

為了監控服務行為,Istio 會為所有進出 Istio 服務網格的服務流量產生指標。這些指標提供有關行為的資訊,例如整體流量、流量中的錯誤率以及請求的響應時間。

除了監控網格內服務的行為外,監控網格本身的行為也很重要。 Istio 元件會匯出其自身內部行為的指標,以提供有關網格控制平面健康狀況和功能的洞察。

代理層級指標

Istio 指標收集從 Sidecar 代理(Envoy)開始。 每個代理都會產生大量關於通過代理的所有流量(包括入站和出站)的指標。 代理還提供有關代理本身管理功能的詳細統計資訊,包括配置和健康資訊。

Envoy 產生的指標提供對 Envoy 資源(例如監聽器和叢集)粒度的網格監控。 因此,了解網格服務和 Envoy 資源之間的連接對於監控 Envoy 指標是必要的。

Istio 使操作人員能夠選擇在每個工作負載實例中產生和收集哪些 Envoy 指標。 預設情況下,Istio 僅啟用一小部分的 Envoy 生成的統計資訊,以避免壓垮指標後端並減少與指標收集相關的 CPU 負擔。 但是,操作人員可以根據需要輕鬆擴展收集的代理指標集。 這使得能夠有針對性地偵錯網路行為,同時降低整個網格的監控成本。

Envoy 文件網站包括Envoy 統計資訊收集的詳細概述。 Envoy 統計資訊上的操作指南提供了有關控制代理層級指標產生的更多資訊。

代理層級指標範例

envoy_cluster_internal_upstream_rq{response_code_class="2xx",cluster_name="xds-grpc"} 7163

envoy_cluster_upstream_rq_completed{cluster_name="xds-grpc"} 7164

envoy_cluster_ssl_connection_error{cluster_name="xds-grpc"} 0

envoy_cluster_lb_subsets_removed{cluster_name="xds-grpc"} 0

envoy_cluster_internal_upstream_rq{response_code="503",cluster_name="xds-grpc"} 1

服務層級指標

除了代理層級指標外,Istio 還提供了一組面向服務的指標,用於監控服務通訊。 這些指標涵蓋了四個基本的服務監控需求:延遲、流量、錯誤和飽和度。 Istio 附帶了一組預設的儀表板,用於基於這些指標監控服務行為。

標準 Istio 指標預設會匯出到Prometheus

使用服務層級指標是完全可選的。 操作人員可以選擇關閉這些指標的產生和收集,以滿足他們個別的需求。

服務層級指標範例

istio_requests_total{
  connection_security_policy="mutual_tls",
  destination_app="details",
  destination_canonical_service="details",
  destination_canonical_revision="v1",
  destination_principal="cluster.local/ns/default/sa/default",
  destination_service="details.default.svc.cluster.local",
  destination_service_name="details",
  destination_service_namespace="default",
  destination_version="v1",
  destination_workload="details-v1",
  destination_workload_namespace="default",
  reporter="destination",
  request_protocol="http",
  response_code="200",
  response_flags="-",
  source_app="productpage",
  source_canonical_service="productpage",
  source_canonical_revision="v1",
  source_principal="cluster.local/ns/default/sa/default",
  source_version="v1",
  source_workload="productpage-v1",
  source_workload_namespace="default"
} 214

控制平面指標

Istio 控制平面還提供了一組自我監控指標。 這些指標允許監控 Istio 本身的行為(與網格內服務的行為不同)。

有關維護哪些指標的更多資訊,請參閱參考文件

分散式追蹤

分散式追蹤提供了一種透過監控個別請求在網格中流動的方式來監控和理解行為的方法。 追蹤使網格操作人員能夠了解服務依賴關係和服務網格內延遲的來源。

Istio 透過 Envoy 代理支援分散式追蹤。 代理會代表它們代理的應用程式自動產生追蹤跨度,只需要應用程式轉發適當的請求上下文。

Istio 支援許多追蹤後端,包括ZipkinJaegerLightstepDatadog。 操作人員控制追蹤產生的取樣率(即每個請求產生追蹤數據的速率)。 這使操作人員可以控制為其網格產生追蹤數據的數量和速率。

有關使用 Istio 的分散式追蹤的更多資訊,請參閱我們的關於分散式追蹤的常見問題解答

單一請求的 Istio 產生分散式追蹤範例

Distributed Trace for a single request
單一請求的分散式追蹤

存取日誌

存取日誌提供了一種從個別工作負載實例的角度來監控和理解行為的方法。

Istio 可以以可設定的格式為服務流量產生存取日誌,使操作人員可以完全控制記錄的方式、內容、時間和位置。 有關更多資訊,請參閱取得 Envoy 的存取日誌

Istio 存取日誌範例

[2019-03-06T09:31:27.360Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 5 2 "-" "curl/7.60.0" "d209e46f-9ed5-9b61-bbdd-43e22662702a" "httpbin:8000" "127.0.0.1:80" inbound|8000|http|httpbin.default.svc.cluster.local - 172.30.146.73:80 172.30.146.82:38618 outbound_.8000_._.httpbin.default.svc.cluster.local
這些資訊對您有幫助嗎?
您有任何改進建議嗎?

感謝您的回饋!