使用 MeshConfig 和 Pod 注释配置跟踪

鼓励用户使用 Telemetry API 来跟踪配置。

Istio 提供了配置高级跟踪选项的能力,例如采样率和向报告的跨度添加自定义标记。采样是一个 beta 特性,但是添加自定义标签和跟踪标签长度会考虑在本版本中开发。

开始之前

  1. 确保您的应用程序按照 here所述传输追踪标头。

  2. 遵循位于 Integrations 下的追踪安装指南,根据您喜欢的追踪后端安装适当的插件和配置您的 Istio 代理以将追踪发送到追踪部署。

可用的跟踪配置

您可以在 Istio 中配置以下跟踪选项:

  1. 将选择用于跟踪生成的请求百分比的随机采样率。

  2. 请求路径的最大长度,之后路径将被截断报告。这对于限制跟踪数据存储特别有用,如果您在入口网关收集跟踪。

  3. 在spans中添加自定义标签。这些标签可以基于静态文字添加请求标头中的值、环境值或字段。这可以用来在特定于您的环境的跨度中注入其他信息。

有两种方法可以配置跟踪选项:

  1. 全局通过 MeshConfig 选项。

  2. 用于工作负载特定定制的每个 pod 注释。

为了使新的跟踪配置对其中任何一个生效,您需要重新启动注入 Istio 代理的 pod 的选项。

为跟踪配置而添加的任何 pod 注释都会覆盖全局设置。为了保留任何全局设置,你应该将它们从全局网格配置复制到 pod 注释,并进行特定于工作负载的定制。特别是要确保注释中始终提供跟踪后端地址,以确保正确地报告工作负载的跟踪。

安装

使用这些特性为在您的环境中管理跟踪提供了新的可能性。

在本例中,我们将对所有跟踪进行采样,并添加一个名为 clusterID 的标记,使用 ISTIO_META_CLUSTER_ID 环境变量注入到您的 pod。只使用该值的前 256 个字符。

  1. $ cat <<EOF > ./tracing.yaml
  2. apiVersion: install.istio.io/v1alpha1
  3. kind: IstioOperator
  4. spec:
  5. meshConfig:
  6. enableTracing: true
  7. defaultConfig:
  8. tracing:
  9. sampling: 100.0
  10. max_path_tag_length: 256
  11. custom_tags:
  12. clusterID:
  13. environment:
  14. name: ISTIO_META_CLUSTER_ID
  15. EOF
  16. $ istioctl install -f ./tracing.yaml

使用 MeshConfig 进行跟踪设置

所有跟踪选项都可以通过 MeshConfig 全局配置。 为了简化配置,建议创建一个可以传递给 istioctl install -f 命令的 YAML 文件。

  1. cat <<'EOF' > tracing.yaml
  2. apiVersion: install.istio.io/v1alpha1
  3. kind: IstioOperator
  4. spec:
  5. meshConfig:
  6. enableTracing: true
  7. defaultConfig:
  8. tracing:
  9. sampling: 10
  10. custom_tags:
  11. my_tag_header:
  12. header:
  13. name: host
  14. EOF

使用 proxy.istio.io/config 跟踪设置的注释

您可以添加 proxy.istio.io/config 注释到您的 Pod 元数据规范,以覆盖任何网格范围的跟踪设置。 例如,要修改 Istio 附带的 sleep 部署,你需要在 samples/sleep/sleep.yaml 中添加以下内容:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: sleep
  5. spec:
  6. ...
  7. template:
  8. metadata:
  9. ...
  10. annotations:
  11. ...
  12. proxy.istio.io/config: |
  13. tracing:
  14. sampling: 10
  15. custom_tags:
  16. my_tag_header:
  17. header:
  18. name: host
  19. spec:
  20. ...

自定义跟踪采样

采样率选项可用于控制向跟踪系统报告的请求的百分比。这应该根据网格中的通信量和想要收集的跟踪数据量进行配置。默认值为 1%。

以前,推荐的方法是在网格设置期间更改 values.pilot.traceSampling 设置,或在 pilot 或 istiod 部署中更改 PILOT_TRACE_SAMPLE 环境变量。

虽然这种改变抽样的方法仍然有效,但强烈建议改用以下方法

要将默认随机抽样修改为50,请在 tracing.yaml 文件中添加以下选项。

  1. apiVersion: install.istio.io/v1alpha1
  2. kind: IstioOperator
  3. spec:
  4. meshConfig:
  5. enableTracing: true
  6. defaultConfig:
  7. tracing:
  8. sampling: 50

采样率应在 0.0 到 100.0 的范围内,精度为0.01。 例如,要跟踪每 10000 个请求中的 5 个,使用 0.05 作为这里的值。

定制跟踪标签

可以根据文字、环境变量和客户端请求标头向跨度添加自定义标记,以便在跨度中提供特定于您的环境的额外信息。

可以添加的自定义标记的数量没有限制,但是标记名称必须是唯一的。

您可以使用下面三个受支持的选项中的任何一个来定制标记。

  1. Literal 表示添加到每个 span 的静态值。

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. meshConfig:
    5. enableTracing: true
    6. defaultConfig:
    7. tracing:
    8. custom_tags:
    9. my_tag_literal:
    10. literal:
    11. value: <VALUE>
  2. 在从工作负载代理环境变量填充自定义标记的值时,可以使用环境变量。

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. meshConfig:
    5. enableTracing: true
    6. defaultConfig:
    7. tracing:
    8. custom_tags:
    9. my_tag_env:
    10. environment:
    11. name: <ENV_VARIABLE_NAME>
    12. defaultValue: <VALUE> # optional

    为了添加基于环境变量的自定义标记,您必须修改根 Istio 系统名称空间中的istio-sidecar-injector ConfigMap

  3. 客户端请求头选项可用于填充来自传入客户端请求头的标记值。

    1. apiVersion: install.istio.io/v1alpha1
    2. kind: IstioOperator
    3. spec:
    4. meshConfig:
    5. enableTracing: true
    6. defaultConfig:
    7. tracing:
    8. custom_tags:
    9. my_tag_header:
    10. header:
    11. name: <CLIENT-HEADER>
    12. defaultValue: <VALUE> # optional

自定义跟踪标签长度

默认情况下,HttpUrl span 标记中包含的请求路径的最大长度是 256。 要修改此最大长度,请将以下内容添加到您的 tracing.yaml 文件。

  1. apiVersion: install.istio.io/v1alpha1
  2. kind: IstioOperator
  3. spec:
  4. meshConfig:
  5. enableTracing: true
  6. defaultConfig:
  7. tracing:
  8. max_path_tag_length: <VALUE>