mirror of https://github.com/istio/istio.io.git
[zh] Translate Trace Sampling doc into Chinese (#15052)
* draft translate * Finish translation * fix * Fix lint
This commit is contained in:
parent
1d52316af9
commit
2f717cb47c
|
@ -0,0 +1,236 @@
|
|||
---
|
||||
title: 链路采样
|
||||
description: 了解有关如何在代理上配置链路采样的不同方法。
|
||||
weight: 10
|
||||
keywords: [sampling,telemetry,tracing,opentelemetry]
|
||||
owner: istio/wg-policies-and-telemetry-maintainers
|
||||
test: yes
|
||||
---
|
||||
|
||||
Istio 提供了多种配置链路采样的方法。
|
||||
在此页面中,您将学习并了解所有配置采样的不同方式。
|
||||
|
||||
## 开始之前 {#before-you-begin}
|
||||
|
||||
1. 确保您的应用程序按照[此处](/zh/docs/tasks/observability/distributed-tracing/overview/)描述的方式传播链路追踪标头。
|
||||
|
||||
## 可用的链路采样配置 {#available-trace-sampling-configurations}
|
||||
|
||||
1. 百分比采样器:选择用于链路生成的请求百分比的随机采样率。
|
||||
|
||||
1. 自定义 OpenTelemetry 采样器:自定义采样器实现,必须与 `OpenTelemetryTracingProvider` 进行配对。
|
||||
|
||||
1. 部署 OpenTelemetry Collector。
|
||||
|
||||
{{< boilerplate start-otel-collector-service >}}
|
||||
|
||||
### 百分比采样器 {#percentage-sampler}
|
||||
|
||||
{{< boilerplate telemetry-tracing-tips >}}
|
||||
|
||||
随机采样率百分比使用指定的百分比值来选择要采样的请求。
|
||||
|
||||
采样率应在 0.0 至 100.0 范围内,精度为 0.01。
|
||||
例如,要跟踪每 10000 个请求中的 5 个请求,请使用 0.05 作为此处的值。
|
||||
|
||||
您可以通过三种方式配置随机采样率:
|
||||
|
||||
#### 通过 `MeshConfig` 进行全局配置 {#globally-via-meshconfig}
|
||||
|
||||
随机百分比采样可以通过 `MeshConfig` 进行全局配置。
|
||||
|
||||
{{< text syntax=bash snip_id=install_default_sampling >}}
|
||||
$ 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
|
||||
{{< /text >}}
|
||||
|
||||
然后通过 Telemetry API 启用链路追踪提供程序。
|
||||
请注意,我们在这里不对 `randomSamplingPercentage` 进行设置。
|
||||
|
||||
{{< text syntax=bash snip_id=enable_telemetry_no_sampling >}}
|
||||
$ kubectl apply -f - <<EOF
|
||||
apiVersion: telemetry.istio.io/v1alpha1
|
||||
kind: Telemetry
|
||||
metadata:
|
||||
name: mesh-default
|
||||
namespace: istio-system
|
||||
spec:
|
||||
tracing:
|
||||
- providers:
|
||||
- name: otel-tracing
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
#### `proxy.istio.io/config` Pod 注解 {#pod-annotation-proxy.istio.io/config}
|
||||
|
||||
您可以将 `proxy.istio.io/config` 注解添加到 Pod 元数据规范中,
|
||||
以覆盖任何网格范围的采样设置。
|
||||
|
||||
例如,要覆盖上面的网格范围的采样,您可以将以下内容添加到 Pod 清单中:
|
||||
|
||||
{{< text syntax=yaml snip_id=none >}}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: sleep
|
||||
spec:
|
||||
...
|
||||
template:
|
||||
metadata:
|
||||
...
|
||||
annotations:
|
||||
...
|
||||
proxy.istio.io/config: |
|
||||
tracing:
|
||||
sampling: 20
|
||||
spec:
|
||||
...
|
||||
{{< /text >}}
|
||||
|
||||
#### Telemetry API {#telemetry-api}
|
||||
|
||||
随机百分比采样器也可以通过 Telemetry API 进行配置。
|
||||
通过 Telemetry API,可以在各种范围内配置采样:网格范围、命名空间或工作负载,提供了极大的灵活性。
|
||||
要了解更多信息,请参阅 [Telemetry API](/zh/docs/tasks/observability/telemetry/) 文档。
|
||||
|
||||
安装 Istio,并且不在 `defaultConfig` 中设置 `sampling`:
|
||||
|
||||
{{< text syntax=bash snip_id=install_without_sampling >}}
|
||||
$ 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
|
||||
{{< /text >}}
|
||||
|
||||
然后通过 Telemetry API 启用链路追踪提供程序并设置 `randomSamplingPercentage`。
|
||||
|
||||
{{< text syntax=bash snip_id=enable_telemetry_with_sampling >}}
|
||||
$ kubectl apply -f - <<EOF
|
||||
apiVersion: telemetry.istio.io/v1alpha1
|
||||
kind: Telemetry
|
||||
metadata:
|
||||
name: otel-demo
|
||||
spec:
|
||||
tracing:
|
||||
- providers:
|
||||
- name: otel-tracing
|
||||
randomSamplingPercentage: 10
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
### 自定义 OpenTelemetry 采样器 {#custom-opentelemetry-sampler}
|
||||
|
||||
OpenTelemetry 规范定义了 [Sampler API](https://github.com/open-telemetry/opentelemetry-specation/blob/v1.31.0/specification/trace/sdk.md#sampler)。
|
||||
Sampler API 支持构建自定义采样器,该采样器可以执行更智能、更高效的采样决策,
|
||||
例如 [Probability Sampling(概率采样)](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.31.0/specification/trace/tracestate-probability-sampling.md)。
|
||||
|
||||
然后,此类采样器可以与
|
||||
[`OpenTelemetryTracingProvider`](/zh/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-ExtensionProvider-OpenTelemetryTracingProvider) 配对。
|
||||
|
||||
{{< quote >}}
|
||||
驻留在代理中的采样器实现,
|
||||
可以在 [Envoy OpenTelemetry Samplers](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/trace/opentelemetry/samplers#opentelemetry-samplers) 中找到 。
|
||||
{{< /quote >}}
|
||||
|
||||
当前在 Istio 中的自定义采样器配置:
|
||||
|
||||
- [Dynatrace 采样器](/zh/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-ExtensionProvider-OpenTelemetryTracingProvider-DynatraceSampler)
|
||||
|
||||
自定义采样器通过 `Meshconfig` 进行配置。以下是配置 Dynatrace 采样器的示例:
|
||||
|
||||
{{< text syntax=yaml snip_id=none >}}
|
||||
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
|
||||
{{< /text >}}
|
||||
|
||||
## 优先顺序 {#order-of-precedence}
|
||||
|
||||
通过多种配置采样的方法,了解每种方法的优先顺序非常重要。
|
||||
|
||||
使用随机百分比采样器时,优先顺序为:
|
||||
|
||||
`Telemetry API` > `Pod 注解` > `MeshConfig`。
|
||||
|
||||
这意味着,如果在上述所有内容中都定义了一个值,
|
||||
则 `Telemetry API` 中的值就是被选定的值。
|
||||
|
||||
配置自定义 OpenTelemetry 采样器时,优先顺序为:
|
||||
|
||||
`自定义 OTel 采样器` > (`Telemetry API` | `Pod 注解` | `MeshConfig`)
|
||||
|
||||
这意味着,如果配置了自定义 OpenTelemetry 采样器,它将覆盖所有其他方式。
|
||||
此外,随机百分比值被设置为 `100` 且不可更改。
|
||||
这很重要,因为自定义采样器需要接收 100% 的 Span 才能正确执行其决策。
|
||||
|
||||
## 部署 Bookinfo 应用程序 {#deploy-the-bookinfo-application}
|
||||
|
||||
部署 [Bookinfo](/zh/docs/examples/bookinfo/#deploying-the-application) 示例应用程序。
|
||||
|
||||
## 使用 Bookinfo 示例生成链路 {#generating-traces-using-the-bookinfo-sample}
|
||||
|
||||
1. 当 Bookinfo 应用程序启动并运行时,
|
||||
访问 `http://$GATEWAY_URL/productpage` 一次或多次以生成链路信息。
|
||||
|
||||
{{< boilerplate trace-generation >}}
|
||||
|
||||
## 清理 {#cleanup}
|
||||
|
||||
1. 删除 Telemetry 资源:
|
||||
|
||||
{{< text syntax=bash snip_id=cleanup_telemetry >}}
|
||||
$ kubectl delete telemetry otel-demo
|
||||
{{< /text >}}
|
||||
|
||||
1. 使用 control-C 或下面命令删除可能仍在运行的任何 `istioctl` 进程:
|
||||
|
||||
{{< text syntax=bash snip_id=none >}}
|
||||
$ istioctl uninstall --purge -y
|
||||
{{< /text >}}
|
||||
|
||||
1. 卸载 OpenTelemetry Collector:
|
||||
|
||||
{{< text syntax=bash snip_id=cleanup_collector >}}
|
||||
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability
|
||||
$ kubectl delete namespace observability
|
||||
{{< /text >}}
|
Loading…
Reference in New Issue