×

集成 Red Hat OpenShift 分布式追踪平台与 Red Hat OpenShift Service Mesh 包含两个部分:Red Hat OpenShift 分布式追踪平台 (Tempo) 和 Red Hat OpenShift 分布式追踪数据收集。

Red Hat OpenShift 分布式追踪平台 (Tempo)

提供分布式追踪功能,用于监控和排查复杂分布式系统中的事务。Tempo 基于开源 Grafana Tempo 项目。

有关分布式追踪平台 (Tempo)、其特性、安装和配置的更多信息,请参阅:Red Hat OpenShift 分布式追踪平台 (Tempo)

Red Hat OpenShift 分布式追踪数据收集

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

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

有关分布式追踪数据收集、其特性、安装和配置的更多信息,请参阅:Red Hat OpenShift 分布式追踪数据收集

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

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

先决条件
步骤
  1. 导航到 Red Hat OpenShift 分布式追踪数据收集 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
  2. 配置 Red Hat OpenShift Service Mesh 以启用追踪,并在您的 meshConfig 中定义分布式追踪数据收集追踪提供程序。

    启用追踪和定义追踪提供程序的示例
    apiVersion: sailoperator.io/v1alpha1
    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)
    1 service 字段是 istio-system 命名空间中的 OpenTelemetry 收集器服务。
  3. 创建 Istio Telemetry 资源以启用在 spec.values.meshConfig.ExtensionProviders 中定义的追踪器。

    Istio Telemetry 资源示例
    apiVersion: telemetry.istio.io/v1
    kind: Telemetry
    metadata:
      name: otel-demo
      namespace: istio-system
    spec:
      tracing:
        - providers:
            - name: otel
          randomSamplingPercentage: 100

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

  4. 运行以下命令创建 bookinfo 命名空间

    $ oc create ns bookinfo
  5. 根据您使用的更新策略,运行相应的命令以在命名空间中启用 sidecar 注射。

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

      $ oc label namespace curl istio-injection=enabled
    2. 如果您使用的是 RevisionBased 更新策略,请运行以下命令

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

        $ oc get istiorevisions.sailoperator.io
        示例输出
        NAME              TYPE    READY   STATUS    IN USE   VERSION   AGE
        default-v1-23-0   Local   True    Healthy   True     v1.23.0   3m33s
      2. 使用修订版名称标记命名空间以启用 sidecar 注射,请运行以下命令

        $ oc label namespace curl istio.io/rev=default-v1-23-0
  6. bookinfo 命名空间中部署 bookinfo 应用程序,请运行以下命令

    $ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
  7. 生成到 productpage pod 的流量以生成追踪

    $ oc exec -it -n bookinfo deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
  8. 运行以下命令以在 UI 中查看追踪,验证集成。

    $ oc get routes -n tempo tempo-sample-query-frontend

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