追蹤取樣
Istio 提供了多種方式來配置追蹤取樣。在本頁中,您將學習並了解所有不同的取樣配置方式。
開始之前
- 請確保您的應用程式如此處所述傳播追蹤標頭。
可用的追蹤取樣配置
百分比取樣器:針對選取用於產生追蹤的請求,設定隨機取樣率的百分比。
自訂 OpenTelemetry 取樣器:必須與
OpenTelemetryTracingProvider
配對使用的自訂取樣器實作。部署 OpenTelemetry Collector
為 OpenTelemetry Collector 建立命名空間
$ kubectl create namespace observability
部署 OpenTelemetry Collector。您可以將此範例配置作為起點:
otel.yaml
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability
百分比取樣器
隨機取樣率百分比使用指定的百分比值來選擇要取樣的請求。
取樣率應在 0.0 到 100.0 的範圍內,精確度為 0.01。例如,要追蹤每 10000 個請求中的 5 個,請在此處使用 0.05 作為值。
您可以透過三種方式配置隨機取樣率
透過 MeshConfig
全域設定
隨機百分比取樣可以透過 MeshConfig
全域配置。
$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 10
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 4317
service: opentelemetry-collector.observability.svc.cluster.local
resource_detectors:
environment: {}
EOF
然後透過 Telemetry API 啟用追蹤提供者。請注意,我們在此處未設定 randomSamplingPercentage
。
$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: mesh-default
namespace: istio-system
spec:
tracing:
- providers:
- name: otel-tracing
EOF
Pod 注釋 proxy.istio.io/config
您可以將 proxy.istio.io/config
注釋新增至您的 Pod 元數據規格,以覆寫任何網格範圍的取樣設定。
例如,要覆寫上述網格範圍的取樣,您需要將以下內容新增至您的 Pod 清單
apiVersion: apps/v1
kind: Deployment
metadata:
name: curl
spec:
...
template:
metadata:
...
annotations:
...
proxy.istio.io/config: |
tracing:
sampling: 20
spec:
...
遙測 API
隨機百分比取樣器也可以透過 Telemetry API 進行配置。透過 Telemetry API,可以在各種範圍(網格範圍、命名空間或工作負載)上配置取樣,提供極大的靈活性。若要瞭解更多資訊,請參閱 Telemetry API 文件。
在不設定 defaultConfig
內部的 sampling
的情況下安裝 Istio
$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 4317
service: opentelemetry-collector.observability.svc.cluster.local
resource_detectors:
environment: {}
EOF
然後透過 Telemetry API 啟用追蹤提供者並設定 randomSamplingPercentage
。
$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: otel-demo
spec:
tracing:
- providers:
- name: otel-tracing
randomSamplingPercentage: 10
EOF
自訂 OpenTelemetry 取樣器
OpenTelemetry 規範定義了 Sampler API。Sampler API 可以建立自訂取樣器,該取樣器可以執行更智慧和有效率的取樣決策,例如 機率取樣。
然後,此類取樣器可以與 OpenTelemetryTracingProvider
配對使用。
Istio 中目前自訂的取樣器配置
自訂取樣器透過 Meshconfig
配置。以下是一個配置 Dynatrace 取樣器的範例
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 443
service: abc.live.dynatrace.com/api/v2/otlp
http:
path: "/api/v2/otlp/v1/traces"
timeout: 10s
headers:
- name: "Authorization"
value: "Api-Token dt0c01."
dynatrace_sampler:
tenant: "abc"
cluster_id: 123
優先順序
透過多種配置取樣的方式,了解每種方法的優先順序非常重要。
使用隨機百分比取樣器時,優先順序為
Telemetry API
> Pod 注釋
> MeshConfig
。
這表示,如果所有上述位置都定義了值,則會選取 Telemetry API
上的值。
當配置自訂 OpenTelemetry 取樣器時,優先順序為
自訂 OTel 取樣器
> (Telemetry API
| Pod 注釋
| MeshConfig
)
這表示,如果配置了自訂 OpenTelemetry 取樣器,則會覆寫所有其他方法。此外,隨機百分比值會設定為 100
,且無法變更。這很重要,因為自訂取樣器需要接收 100% 的跨度,才能夠正確執行其決策。
部署 Bookinfo 應用程式
部署 Bookinfo 範例應用程式。
使用 Bookinfo 範例產生追蹤
當 Bookinfo 應用程式啟動並執行後,存取
http://$GATEWAY_URL/productpage
一次或多次,以產生追蹤資訊。若要查看追蹤資料,您必須將請求傳送至您的服務。請求數量取決於 Istio 的取樣率,可以使用 Telemetry API 進行配置。使用預設取樣率 1% 時,您需要至少傳送 100 個請求,才能看到第一個追蹤。若要將 100 個請求傳送至
productpage
服務,請使用以下命令$ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
清理
移除 Telemetry 資源
$ kubectl delete telemetry otel-demo
使用 Ctrl-C 或
$ istioctl uninstall --purge -y
解除安裝 OpenTelemetry Collector
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability