第 3 章 分布式追踪和 Service Mesh


将 Red Hat OpenShift distributed tracing 平台与 Red Hat OpenShift Service Mesh 集成由两个部分组成:Red Hat OpenShift distributed tracing platform (Tempo)和 Red Hat OpenShift distributed tracing 数据收集。

Red Hat OpenShift distributed tracing Platform (Tempo)

提供分布式追踪来监控复杂分布式系统中的事务并进行故障排除。Tempo 基于开源 Grafana Tempo 项目。

如需有关分布式追踪平台(Tempo)、其功能、安装和配置的更多信息,请参阅: Red Hat OpenShift distributed tracing Platform (Tempo)

Red Hat OpenShift distributed tracing 数据收集

基于开源 OpenTelemetry 项目,旨在为云原生软件提供统一、标准化和供应商中立遥测数据收集。Red Hat OpenShift distributed tracing 数据收集产品支持部署和管理 OpenTelemetry Collector,并简化工作负载检测。

OpenTelemetry Collector 可以接收、处理和转发多种格式的遥测数据,使其成为遥测系统之间的遥测处理和互操作性的理想组件。Collector 提供了一个统一解决方案,用于收集和处理指标、追踪和日志。

如需有关分布式追踪数据收集、其功能、安装和配置的更多信息,请参阅: Red Hat OpenShift distributed tracing 数据收集

您可以将 Red Hat OpenShift Service Mesh 与 Red Hat OpenShift distributed tracing 数据收集集成,以检测、生成、收集和导出 OpenTelemetry 跟踪、指标和日志,以分析和了解软件的性能和行为。

先决条件

流程

  1. 进入到 Red Hat OpenShift distributed tracing 数据收集 Operator,并在 istio-system 命名空间中安装 OpenTelemetryCollector 资源:

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

    kind: OpenTelemetryCollector
    apiVersion: opentelemetry.io/v1beta1
    metadata:
      name: otel
      namespace: istio-system
    spec:
      observability:
        metrics: {}
      deploymentUpdateStrategy: {}
      config:
        exporters:
          otlp:
            endpoint: 'tempo-sample-distributor.tempo.svc.cluster.local:4317'
            tls:
              insecure: true
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: '0.0.0.0:4317'
              http: {}
        service:
          pipelines:
            traces:
              exporters:
                - otlp
              receivers:
                - otlp
    Copy to Clipboard Toggle word wrap

  2. 配置 Red Hat OpenShift Service Mesh 以启用追踪,并在 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
    Copy to Clipboard Toggle word wrap

    1
    service 字段是 istio-system 命名空间中的 OpenTelemetry 收集器服务。
  3. 创建一个 Istio Telemetry 资源来启用 spec.values.meshConfig.ExtensionProviders 中定义的 tracer:

    Istio Telemetry 资源示例

    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: otel-demo
      namespace: istio-system
    spec:
      tracing:
        - providers:
            - name: otel
          randomSamplingPercentage: 100
    Copy to Clipboard Toggle word wrap

    注意

    验证您可以看到 trace 后,请降低 randomSamplingPercentage 值或将其设置为 default 以减少请求数量。

  4. 运行以下命令来创建 info 命名空间:

    $ oc create ns info
    Copy to Clipboard Toggle word wrap
  5. 根据您使用的更新策略,运行适当的命令在命名空间中启用 sidecar 注入:

    1. 如果您使用 InPlace 更新策略,请运行以下命令:

      $ oc label namespace curl istio-injection=enabled
      Copy to Clipboard Toggle word wrap
    2. 如果使用 RevisionBased update 策略,请运行以下命令:

      1. 运行以下命令来显示修订名称:

        $ oc get istiorevisions.sailoperator.io
        Copy to Clipboard Toggle word wrap

        输出示例

        NAME      TYPE    READY   STATUS    IN USE   VERSION   AGE
        default   Local   True    Healthy   True     v1.24.3   3m33s
        Copy to Clipboard Toggle word wrap

      2. 运行以下命令,使用修订名称标记命名空间以启用 sidecar 注入:

        $ oc label namespace curl istio.io/rev=default
        Copy to Clipboard Toggle word wrap
  6. 运行以下命令,在 bookinfo 命名空间中部署 info 应用程序:

    $ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
    Copy to Clipboard Toggle word wrap
  7. 生成到 productpage pod 的流量来生成 trace:

    $ oc exec -it -n info deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
    Copy to Clipboard Toggle word wrap
  8. 运行以下命令,在 UI 中看到 trace 来验证集成:

    $ oc get routes -n tempo tempo-sample-query-frontend
    Copy to Clipboard Toggle word wrap
    注意

    Jaeger UI 的 OpenShift 路由必须在 Tempo 命名空间中创建。您可以为 tempo-sample-query-frontend 服务手动创建它,或使用 .spec.template.queryFrontend.jaegerQuery.ingress.type: route 来更新 Tempo 自定义资源。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat