追踪采样
Istio 提供多种方法来配置追踪采样。在本页中,您将学习和了解所有不同的采样配置方式。
开始之前
- 确保您的应用程序传播追踪标头,如此处所述。
可用的追踪采样配置
百分比采样器:用于选择要生成追踪的请求百分比的随机采样率。
自定义 OpenTelemetry 采样器:必须与
OpenTelemetryTracingProvider
配合使用的自定义采样器实现。部署 OpenTelemetry 收集器
为 OpenTelemetry 收集器创建命名空间
$ kubectl create namespace observability
部署 OpenTelemetry 收集器。您可以使用此示例配置作为起点:
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
然后通过遥测 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
还可以通过遥测 API 配置随机百分比采样器。通过遥测 API,可以在各种范围内配置采样:网格范围、命名空间或工作负载,提供极大的灵活性。要了解更多信息,请参阅遥测 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
然后通过遥测 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
优先级顺序
有多种配置采样的方法,因此了解每种方法的优先级顺序非常重要。
使用随机百分比采样器时,优先级顺序为
遥测 API
> Pod 注解
> MeshConfig
。
这意味着,如果在上述所有内容中都定义了值,则选择遥测 API
上的值。
配置自定义 OpenTelemetry 采样器时,优先级顺序为
自定义 OTel 采样器
> (遥测 API
| Pod 注解
| MeshConfig
)
这意味着,如果配置了自定义 OpenTelemetry 采样器,它将覆盖所有其他方法。此外,随机百分比值设置为100
,并且无法更改。这很重要,因为自定义采样器需要接收 100% 的跨度才能正确执行其决策。
部署 Bookinfo 应用程序
部署Bookinfo示例应用程序。
使用 Bookinfo 示例生成追踪
Bookinfo 应用程序启动并运行后,访问
http://$GATEWAY_URL/productpage
一次或多次以生成跟踪信息。要查看跟踪数据,您必须向您的服务发送请求。请求数量取决于 Istio 的采样率,并且可以使用遥测 API进行配置。使用默认的 1% 采样率,您需要发送至少 100 个请求才能看到第一个跟踪。要向
productpage
服务发送 100 个请求,请使用以下命令$ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
清理
删除遥测资源
$ kubectl delete telemetry otel-demo
使用 control-C 或删除任何可能仍在运行的
istioctl
进程$ istioctl uninstall --purge -y
卸载 OpenTelemetry Collector
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability