使用 Telemetry API 配置链路追踪

Istio 提供了配置链路追踪选项的功能,例如采样率和向报告的 Span 添加自定义标签。 此任务向您展示如何使用 Telemetry API 自定义链路追踪选项。

开始之前

  1. 请确保您的应用程序按照这里所描述的方式配置链路追踪的标头。

  2. 根据您首选的链路追踪后端, 按照位于集成下的链路追踪安装指南安装适当的软件并配置扩展提供程序。

安装

在此示例中,我们将链路发送到 Zipkin。 继续操作之前,请先安装 Zipkin。

配置扩展提供程序

使用引用 Zipkin 服务的扩展提供程序安装 Istio:

$ cat <<EOF > ./tracing.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing: {} # 禁用旧版 MeshConfig 链路追踪选项
    extensionProviders:
    # 添加 zipkin 提供商
    - name: "zipkin"
      zipkin:
        service: zipkin.istio-system.svc.cluster.local
        port: 9411
EOF
$ istioctl install -f ./tracing.yaml --skip-confirmation

启用链路追踪

通过以下配置启用链路追踪:

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: "zipkin"
EOF

验证结果

您可以通过访问 Zipkin UI来验证结果。

自定义

自定义链路采样

采样率选项可用于控制向链路追踪系统报告的请求百分比, 应根据服务网格中的流量和您想要收集的链路追踪数据量来配置此选项, 默认采样率为 1%。

$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: mesh-default
  namespace: istio-system
spec:
  tracing:
  - providers:
    - name: "zipkin"
    randomSamplingPercentage: 100.00
EOF

自定义链路追踪标签

可以基于文本、环境变量和客户端请求标头向 span 中添加自定义标签,以在与环境相关的 span 中提供额外的信息。

您可以使用以下三种方式来添加自定义标签。

  1. literal 选项可以将一个静态的值添加到每个 span 中。

    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
      - providers:
        - name: "zipkin"
        randomSamplingPercentage: 100.00
        customTags:
          "provider":
            literal:
              value: "zipkin"
  2. 环境变量可以用于从工作负载代理环境中自定义标签。

    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
        - providers:
          - name: "zipkin"
          randomSamplingPercentage: 100.00
          customTags:
            "cluster_id":
              environment:
                name: ISTIO_META_CLUSTER_ID
                defaultValue: Kubernetes # 可选
  3. 客户端请求头选项可用于从传入的客户端请求头中添加标签。

    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
        - providers:
          - name: "zipkin"
          randomSamplingPercentage: 100.00
          customTags:
            my_tag_header:
              header:
                name: <CLIENT-HEADER>
                defaultValue: <VALUE>      # 可选

自定义链路追踪标签长度

默认情况下,HttpUrl 的 span 标签的请求最大长度为 256。要修改此最大长度, 请将以下内容添加到您的 tracing.yaml 配置文件中。

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing: {} # 通过 MeshConfig 禁用旧版链路追踪选项
    extensionProviders:
    - name: "zipkin"
      zipkin:
        service: zipkin.istio-system.svc.cluster.local
        port: 9411
        maxTagLength: <VALUE>
这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!