遙測 API

Istio 提供了遙測 API,能夠彈性配置指標存取日誌分散式追蹤

使用 API

範圍、繼承和覆寫

遙測 API 資源會從 Istio 配置階層中的父資源繼承配置。

  1. 根配置命名空間(例如:istio-system
  2. 本地命名空間(具有沒有工作負載 selector 的命名空間範圍資源)
  3. 工作負載(具有工作負載 selector 的命名空間範圍資源)

根配置命名空間(通常是 istio-system)中的遙測 API 資源,會為行為提供網格範圍的預設值。根配置命名空間中的任何工作負載特定選擇器都將被忽略/拒絕。在根配置命名空間中定義多個網格範圍的遙測 API 資源是無效的。

可以透過在所需的命名空間中套用新的 Telemetry 資源(不帶工作負載選擇器)來實現網格範圍配置的命名空間特定覆寫。在命名空間配置中指定的任何欄位都將完全覆寫父配置(在根配置命名空間中)的欄位。

可以透過在所需的命名空間中套用新的 Telemetry 資源並帶有工作負載選擇器來實現工作負載特定的覆寫。

工作負載選取

命名空間中的個別工作負載是透過selector選取的,它允許基於標籤的工作負載選擇。

讓兩個不同的 Telemetry 資源使用 selector 選擇相同的工作負載是無效的。同樣地,在一個命名空間中,有兩個沒有指定 selector 的不同的 Telemetry 資源也是無效的。

提供者選取

遙測 API 使用提供者的概念來指示要使用的協定或整合類型。提供者可以在 MeshConfig 中配置。

以下是 MeshConfig 中提供者配置的範例集:

data:
  mesh: |-
      extensionProviders: # The following content defines two example tracing providers.
      - name: "localtrace"
        zipkin:
          service: "zipkin.istio-system.svc.cluster.local"
          port: 9411
          maxTagLength: 56
      - name: "cloudtrace"
        stackdriver:
          maxTagLength: 256

為了方便起見,Istio 預設配置了一些提供者,並帶有預設設定。

提供者名稱功能
prometheus指標
stackdriver指標、追蹤、存取日誌
envoy存取日誌

此外,還可以設定一個預設提供者,當 Telemetry 資源未指定提供者時將使用該提供者。

範例

設定網格範圍行為

遙測 API 資源會從網格的根配置命名空間繼承,通常是 istio-system。若要配置網格範圍的行為,請在根配置命名空間中新增(或編輯現有的)Telemetry 資源。

以下是一個使用先前章節中的提供者配置的範例配置:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: localtrace
    customTags:
      foo:
        literal:
          value: bar
    randomSamplingPercentage: 100

此配置會覆寫 MeshConfig 中的預設提供者,將網格預設值設定為 localtrace 提供者。它還將網格範圍的取樣百分比設定為 100,並配置一個標籤,將名為 foo 且值為 bar 的標籤新增到所有追蹤跨度。

設定命名空間範圍的追蹤行為

若要為個別命名空間客製化行為,請將 Telemetry 資源新增到所需的命名空間。在命名空間資源中指定的任何欄位都將完全覆寫從配置階層繼承的欄位配置。例如:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: namespace-override
  namespace: myapp
spec:
  tracing:
  - customTags:
      userId:
        header:
          name: userId
          defaultValue: unknown

當部署到具有先前網格範圍範例配置的網格中時,這將導致 myapp 命名空間中的追蹤行為,將追蹤跨度傳送到 localtrace 提供者,並以 100% 的速率隨機選擇請求進行追蹤,但會使用一個名為 userId 的自訂標籤,其值取自 userId 請求標頭。重要的是,父配置中的 foo: bar 標籤將不會在 myapp 命名空間中使用。自訂標籤行為完全覆寫了在 mesh-default.istio-system 資源中配置的行為。

設定特定於工作負載的行為

若要為個別工作負載客製化行為,請將 Telemetry 資源新增到所需的命名空間並使用 selector。在工作負載特定資源中指定的任何欄位都將完全覆寫從配置階層繼承的欄位配置。

例如:

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: workload-override
  namespace: myapp
spec:
  selector:
    matchLabels:
      service.istio.io/canonical-name: frontend
  tracing:
  - disableSpanReporting: true

在此情況下,將會停用 myapp 命名空間中 frontend 工作負載的追蹤。Istio 仍會轉發追蹤標頭,但不會向已配置的追蹤提供者報告任何跨度。

此資訊是否對您有幫助?
您是否有任何改進建議?

感謝您的回饋!