第 3 章 分布式追踪和 Service Mesh


3.1. 使用 Service Mesh 配置 Red Hat OpenShift distributed tracing 平台

将 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 数据收集

3.1.1. 使用 Service Mesh 配置 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

  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 中定义的 tracer:

    Istio Telemetry 资源示例

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

    注意

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

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

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

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

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

      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 命名空间中部署 info 应用程序:

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

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

    $ 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 自定义资源。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.