×

Red Hat OpenShift 分布式追踪平台 (Jaeger) 已弃用。已弃用的功能仍然包含在 OpenShift Container Platform 中,并继续得到支持;但是,它将在该产品的未来版本中删除,不建议用于新的部署。

有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和已删除的功能”部分。

如果您已经在应用程序中使用 Red Hat OpenShift 分布式追踪平台 (Jaeger),您可以迁移到基于 OpenTelemetry 开源项目的 Red Hat 版本的 OpenTelemetry。

Red Hat 版本的 OpenTelemetry 提供了一套 API、库、代理和工具,以促进分布式系统的可观察性。Red Hat 版本的 OpenTelemetry 中的 OpenTelemetry Collector 可以接收 Jaeger 协议,因此您无需更改应用程序中的 SDK。

从分布式追踪平台 (Jaeger) 迁移到 Red Hat 版本的 OpenTelemetry 需要配置 OpenTelemetry Collector 和您的应用程序以无缝地报告追踪信息。您可以迁移 sidecar 部署和无 sidecar 部署。

使用 sidecar 迁移

Red Hat 版本的 OpenTelemetry Operator 支持将 sidecar 注入部署工作负载,因此您可以从分布式追踪平台 (Jaeger) sidecar 迁移到 Red Hat 版本的 OpenTelemetry sidecar。

先决条件
  • 集群上使用了 Red Hat OpenShift 分布式追踪平台 (Jaeger)。

  • 已安装 Red Hat 版本的 OpenTelemetry。

步骤
  1. 将 OpenTelemetry Collector 配置为 sidecar。

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: <otel-collector-namespace>
    spec:
      mode: sidecar
      config: |
        receivers:
          jaeger:
            protocols:
              grpc: {}
              thrift_binary: {}
              thrift_compact: {}
              thrift_http: {}
        processors:
          batch: {}
          memory_limiter:
            check_interval: 1s
            limit_percentage: 50
            spike_limit_percentage: 30
          resourcedetection:
            detectors: [openshift]
            timeout: 2s
        exporters:
          otlp:
            endpoint: "tempo-<example>-gateway:8090" (1)
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger]
              processors: [memory_limiter, resourcedetection, batch]
              exporters: [otlp]
    1 此端点指向使用 <example> Tempo Operator 部署的 TempoStack 实例的网关。
  2. 创建用于运行应用程序的服务帐户。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: otel-collector-sidecar
  3. 为某些处理器所需的权限创建集群角色。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: otel-collector-sidecar
    rules:
      (1)
    - apiGroups: ["config.openshift.io"]
      resources: ["infrastructures", "infrastructures/status"]
      verbs: ["get", "watch", "list"]
    1 resourcedetectionprocessor 需要基础设施和基础设施/状态的权限。
  4. 创建 ClusterRoleBinding 以设置服务帐户的权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: otel-collector-sidecar
    subjects:
    - kind: ServiceAccount
      name: otel-collector-deployment
      namespace: otel-collector-example
    roleRef:
      kind: ClusterRole
      name: otel-collector
      apiGroup: rbac.authorization.k8s.io
  5. 将 OpenTelemetry Collector 部署为 sidecar。

  6. 通过从您的 Deployment 对象中删除 "sidecar.jaegertracing.io/inject": "true" 注释,删除从您的应用程序中注入的 Jaeger Agent。

  7. 通过将 sidecar.opentelemetry.io/inject: "true" 注释添加到您的 Deployment 对象的 .spec.template.metadata.annotations 字段中,启用 OpenTelemetry sidecar 的自动注入。

  8. 使用为应用程序部署创建的服务帐户,以允许处理器获取正确的信息并将其添加到您的追踪信息中。

不使用 sidecar 迁移

您可以从分布式追踪平台 (Jaeger) 迁移到 Red Hat 版本的 OpenTelemetry,而无需 sidecar 部署。

先决条件
  • 集群上使用了 Red Hat OpenShift 分布式追踪平台 (Jaeger)。

  • 已安装 Red Hat 版本的 OpenTelemetry。

步骤
  1. 配置 OpenTelemetry Collector 部署。

  2. 创建将部署 OpenTelemetry Collector 的项目。

    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      name: observability
  3. 创建用于运行 OpenTelemetry Collector 实例的服务帐户。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: otel-collector-deployment
      namespace: observability
  4. 创建集群角色以设置处理器所需的权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: otel-collector
    rules:
      (1)
      (2)
    - apiGroups: ["", "config.openshift.io"]
      resources: ["pods", "namespaces", "infrastructures", "infrastructures/status"]
      verbs: ["get", "watch", "list"]
    1 k8sattributesprocessor 需要 podsnamespaces 资源的权限。
    2 resourcedetectionprocessor 需要 infrastructuresinfrastructures/status 的权限。
  5. 创建 ClusterRoleBinding 以设置服务帐户的权限。

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: otel-collector
    subjects:
    - kind: ServiceAccount
      name: otel-collector-deployment
      namespace: observability
    roleRef:
      kind: ClusterRole
      name: otel-collector
      apiGroup: rbac.authorization.k8s.io
  6. 创建 OpenTelemetry Collector 实例。

    此 Collector 将追踪信息导出到 TempoStack 实例。您必须使用 Red Hat Tempo Operator 创建您的 TempoStack 实例,并将正确的端点放在此处。

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: observability
    spec:
      mode: deployment
      serviceAccount: otel-collector-deployment
      config: |
        receivers:
          jaeger:
            protocols:
              grpc: {}
              thrift_binary: {}
              thrift_compact: {}
              thrift_http: {}
        processors:
          batch: {}
          k8sattributes:
          memory_limiter:
            check_interval: 1s
            limit_percentage: 50
            spike_limit_percentage: 30
          resourcedetection:
            detectors: [openshift]
        exporters:
          otlp:
            endpoint: "tempo-example-gateway:8090"
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [jaeger]
              processors: [memory_limiter, k8sattributes, resourcedetection, batch]
              exporters: [otlp]
  7. 将您的追踪端点指向 OpenTelemetry Operator。

  8. 如果您直接从应用程序将追踪信息导出到 Jaeger,请将 API 端点从 Jaeger 端点更改为 OpenTelemetry Collector 端点。

    使用 Golang 的 jaegerexporter 导出追踪信息的示例
    exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) (1)
    1 此 URL 指向 OpenTelemetry Collector API 端点。