遙測 API
Istio 提供了遙測 API,能夠彈性配置指標、存取日誌和分散式追蹤。
使用 API
範圍、繼承和覆寫
遙測 API 資源會從 Istio 配置階層中的父資源繼承配置。
- 根配置命名空間(例如:
istio-system
) - 本地命名空間(具有沒有工作負載
selector
的命名空間範圍資源) - 工作負載(具有工作負載
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 仍會轉發追蹤標頭,但不會向已配置的追蹤提供者報告任何跨度。