使用 Telemetry API 配置链路追踪

Istio 提供了配置高级链路追踪选项的功能,例如采样率和向已采集的 span 中添加自定义标签。 本任务将向您展示如何使用 Telemetry API 自定义链路追踪选项。

开始之前

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

  2. 请根据您首选的追踪后端,根据集成追踪安装指南安装适当的插件, 并配置您的 Istio 代理将链路追踪信息发送到链路追踪部署服务端。

安装

在此示例中,我们将发送跟踪信息到链路追踪系统 zipkin, 请确保已安装它:

  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: {} # 禁用 MeshConfig 链路追踪选项
  9. extensionProviders:
  10. # 添加 zipkin 提供商
  11. - name: zipkin
  12. zipkin:
  13. service: zipkin.istio-system.svc.cluster.local
  14. port: 9411
  15. EOF
  16. $ istioctl install -f ./tracing.yaml --skip-confirmation

启用服务网格的链路追踪

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

  1. $ kubectl apply -f - <<EOF
  2. apiVersion: telemetry.istio.io/v1
  3. kind: Telemetry
  4. metadata:
  5. name: mesh-default
  6. namespace: istio-system
  7. spec:
  8. tracing:
  9. - providers:
  10. - name: "zipkin"
  11. EOF

自定义链路追踪采样率

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

  1. $ kubectl apply -f - <<EOF
  2. apiVersion: telemetry.istio.io/v1
  3. kind: Telemetry
  4. metadata:
  5. name: mesh-default
  6. namespace: istio-system
  7. spec:
  8. tracing:
  9. - providers:
  10. - name: "zipkin"
  11. randomSamplingPercentage: 100.00
  12. EOF

自定义链路追踪标签

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

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

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

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

    1. apiVersion: telemetry.istio.io/v1
    2. kind: Telemetry
    3. metadata:
    4. name: mesh-default
    5. namespace: istio-system
    6. spec:
    7. tracing:
    8. - providers:
    9. - name: "zipkin"
    10. randomSamplingPercentage: 100.00
    11. customTags:
    12. "provider":
    13. literal:
    14. value: "zipkin"
  2. 环境变量可以用于从工作负载代理环境中自定义标签。

    1. apiVersion: telemetry.istio.io/v1
    2. kind: Telemetry
    3. metadata:
    4. name: mesh-default
    5. namespace: istio-system
    6. spec:
    7. tracing:
    8. - providers:
    9. - name: "zipkin"
    10. randomSamplingPercentage: 100.00
    11. customTags:
    12. "cluster_id":
    13. environment:
    14. name: ISTIO_META_CLUSTER_ID
    15. defaultValue: Kubernetes # 可选

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

  3. 客户端请求头选项可用于从传入的客户端请求头中添加标签。

    1. apiVersion: telemetry.istio.io/v1
    2. kind: Telemetry
    3. metadata:
    4. name: mesh-default
    5. namespace: istio-system
    6. spec:
    7. tracing:
    8. - providers:
    9. - name: "zipkin"
    10. randomSamplingPercentage: 100.00
    11. customTags:
    12. my_tag_header:
    13. header:
    14. name: <CLIENT-HEADER>
    15. defaultValue: <VALUE> # 可选

自定义链路追踪标签长度

默认情况下,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: {} # 通过 MeshConfig 禁用链路追踪选项
  8. extensionProviders:
  9. # 添加 zipkin 提供商
  10. - name: zipkin
  11. zipkin:
  12. service: zipkin.istio-system.svc.cluster.local
  13. port: 9411
  14. maxTagLength: <VALUE>

验证结果

您可以使用 Zipkin 界面来验证结果。