使用 Service Mesh 配置分布式追踪平台(已弃用)

弃用通知

本文档中介绍的 Alauda build of Jaeger(Jaeger 1.60.0)和 Alauda Build of OpenTelemetry 集成已弃用,并将在 ACP 4.4 中移除。对于所有新部署,请使用使用 Service Mesh 配置分布式追踪平台中记录的新 Alauda 分布式追踪 集成。

若要将现有安装迁移到新技术栈,请按照迁移到 Jaeger v2中的说明操作。

Alauda Service Mesh 支持通过与以下组件集成来实现分布式追踪:

  • Alauda Build of Jaeger:基于开源 Jaeger 项目的定制发行版。它可以端到端地查看复杂分布式系统中的请求。

  • Alauda Build of OpenTelemetry:基于 OpenTelemetry 项目,通过管理 OpenTelemetry Collector 和工作负载插桩,简化指标、日志和追踪数据的收集。

OpenTelemetry Collector 充当遥测信号的中间件。它支持多种数据格式,并提供标准化管道,用于处理遥测数据并将其导出到 Jaeger 等后端。

使用 Service Mesh 配置分布式追踪数据收集

您可以将 Alauda Service Mesh 与 OpenTelemetry 集成,以插桩、生成、收集和导出 OpenTelemetry 追踪、指标和日志,从而分析和了解软件的性能与行为。

前提条件

操作步骤

istio-system 命名空间添加项目标签:

kubectl label namespace istio-system cpaas.io/project=cpaas-system --overwrite

istio-system 命名空间中安装 Jaeger 实例。

请参阅 部署 Jaeger 实例 中的安装脚本,并使用以下示例命令部署专用于 Istio 的 Jaeger

INFO

--jaeger-es-index-prefix 参数设置 Elasticsearch 中用于存储追踪数据的索引前缀。

  • 对于单集群服务网格,建议以前缀以集群名称结尾,例如 istio-tracing-cluster-1
  • 对于多集群服务网格,所有集群的追踪数据必须存储在同一索引中;建议以前缀以 meshID 结尾,例如 istio-tracing-mesh-1
./install-jaeger.sh \
  --es-url='https://xxx' \
  --es-user-base64='xxx' \
  --es-pass-base64='xxx' \
  --target-namespace='istio-system' \
  --jaeger-basepath-suffix='/istio/jaeger' \
  --jaeger-es-index-prefix='istio-tracing-xxx'

安装成功完成后,您可以访问 Jaeger UI,在 <platform-url>/clusters/<cluster>/istio/jaeger 查询追踪数据。

在 OperatorHub 中导航到 Alauda Build of OpenTelemetry,并在 istio-system 命名空间中创建 OpenTelemetryCollector

istio-system 命名空间中的 OpenTelemetry Collector 示例

apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
  name: otel
  namespace: istio-system
spec:
  observability:
    metrics: {}
  deploymentUpdateStrategy: {}
  config:
    processors:
      batch: {}
    exporters:
      debug: {}
      otlp:
        endpoint: 'dns:///jaeger-prod-collector-headless.istio-system:4317'
        balancer_name: round_robin
        tls:
          insecure: true
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: '0.0.0.0:4317'
    service:
      pipelines:
        traces:
          exporters:
            - debug
            - otlp
          processors:
            - batch
          receivers:
            - otlp
  1. endpoint 字段是 istio-system 命名空间中的 Jaeger Collector 服务。

更新 Istio 资源以启用追踪并定义 OpenTelemetry 追踪提供程序:

示例:通过 meshConfig 启用追踪

apiVersion: sailoperator.io/v1
kind: Istio
metadata:
  name: default
  # ...
spec:
  namespace: istio-system
  # ...
  values:
    meshConfig:
      enableTracing: true
      extensionProviders:
      - name: otel
        opentelemetry:
          port: 4317
          service: otel-collector.istio-system.svc.cluster.local
  1. service 字段是 istio-system 命名空间中的 OpenTelemetry Collector 服务。

更新 Telemetry 资源,以启用 meshConfig 中定义的追踪提供程序:

Istio Telemetry 资源示例

apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
  name: asm-default
  namespace: istio-system
  # ...
spec:
  # ...
  tracing:
    - providers:
        - name: otel
      randomSamplingPercentage: 100
NOTE

确认可以看到追踪数据后,请降低 randomSamplingPercentage 值,以减少请求数量。

卸载分布式追踪

如果不再需要 Alauda Build of OpenTelemetryAlauda build of Jaeger 与 Service Mesh 的集成,请按照以下步骤将其移除。

WARNING

卸载后,存储在 Elasticsearch 中的历史追踪记录将无法再从 Jaeger UI 访问。

移除 Service Mesh 追踪配置

在删除底层组件之前,请移除 mesh 侧的追踪配置,以便 Istio 停止向旧版 Collector 发送 span。

  1. 编辑 Telemetry 资源,并移除引用 otel provider 的 tracing providers 条目:

    kubectl -n istio-system edit telemetry asm-default

    或者,使用 kubectl patch 以非交互方式移除 tracing 配置:

    kubectl -n istio-system patch telemetry asm-default --type=json -p='[{"op": "remove", "path": "/spec/tracing"}]'
  2. 编辑 Istio 资源,并移除名为 otelmeshConfig.extensionProviders 条目,或将 meshConfig.enableTracing 设置为 false

    kubectl edit istio default

    或者,使用 kubectl patch 以非交互方式将 meshConfig.enableTracing 设置为 false

    kubectl patch istio default --type=merge -p='{"spec":{"values":{"meshConfig":{"enableTracing":false}}}}'

删除 OpenTelemetry Collector 实例

登录安装了该集成的集群,然后删除 OpenTelemetryCollector 实例:

kubectl -n istio-system delete opentelemetrycollector otel

卸载 Alauda Build of OpenTelemetry Operator

如果集群中的其他工作负载仍依赖 Alauda Build of OpenTelemetry Operator,请跳过此步骤。

您可以在 Web Console 的管理员视图中卸载 Operator。

操作步骤

  • MarketplaceOperatorHub 中,使用搜索框搜索 Alauda build of OpenTelemetry
  • 单击 Alauda build of OpenTelemetry 标题进入其详细信息页面。
  • Alauda build of OpenTelemetry 详细信息页面中,单击右上角的 Uninstall 按钮。
  • Uninstall "opentelemetry-operator"? 窗口中,单击 Uninstall

删除 Jaeger 实例

登录安装了该集成的集群,然后删除 Jaeger 实例及其支持资源。以下资源名称与 install-jaeger.sh 配合 --target-namespace='istio-system' 生成的默认名称一致;如果安装期间使用了不同的 --jaeger-instance-name,请相应调整这些名称。

kubectl -n istio-system delete ingress      jaeger-prod-query         --ignore-not-found
kubectl -n istio-system delete podmonitor   jaeger-prod-monitor       --ignore-not-found
kubectl -n istio-system delete jaeger       jaeger-prod               --ignore-not-found
kubectl -n istio-system delete rolebinding  jaeger-prod-rb            --ignore-not-found
kubectl -n istio-system delete role         jaeger-prod-role          --ignore-not-found
kubectl -n istio-system delete sa           jaeger-prod-sa            --ignore-not-found
kubectl -n istio-system delete secret       jaeger-prod-oauth2-proxy  --ignore-not-found
kubectl -n istio-system delete secret       jaeger-prod-es-basic-auth --ignore-not-found
kubectl -n istio-system delete configmap    jaeger-prod-oauth2-proxy  --ignore-not-found

卸载 Alauda build of Jaeger Operator

如果集群中的其他工作负载仍依赖 Alauda build of Jaeger Operator,请跳过此步骤。

您可以在 Web Console 的管理员视图中卸载 Operator。

操作步骤

  • MarketplaceOperatorHub 中,使用搜索框搜索 Alauda build of Jaeger
  • 单击 Alauda build of Jaeger 标题进入其详细信息页面。
  • Alauda build of Jaeger 详细信息页面中,单击右上角的 Uninstall 按钮。
  • Uninstall "jaeger-operator"? 窗口中,单击 Uninstall