5.5. 从分布式追踪平台(Jaeger)迁移到分布式追踪数据收集

如果您已将 Red Hat OpenShift distributed tracing 平台(Jaeger)用于应用程序,您可以迁移到 Red Hat OpenShift distributed tracing 数据收集,该集合基于 OpenTelemetry 开源项目。

分布式追踪数据收集提供一组 API、库、代理和工具,以便在分布式系统中实现可观察性。分布式追踪数据收集中的 OpenTelemetry Collector 可以影响 Jaeger 协议,因此您不需要在应用程序中更改 SDK。

从分布式追踪平台(Jaeger)迁移到分布式追踪数据收集需要配置 OpenTelemetry Collector 和应用程序来无缝报告 trace。您可以迁移 sidecar 和 sidecar 部署。

5.5.1. 使用 sidecar 从分布式追踪平台(Jaeger)迁移到分布式追踪数据收集

分布式追踪数据收集 Operator 支持 sidecar 注入部署工作负载,以便您可以从分布式追踪平台(Jaeger) sidecar 迁移到分布式追踪数据收集 sidecar。

先决条件

  • 在集群中使用 Red Hat OpenShift distributed tracing Platform (Jaeger)。
  • 已安装 Red Hat OpenShift distributed tracing 数据收集。

流程

  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
    此端点指向使用 Tempo Operator 部署的 <example> 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. 使用为应用程序部署创建的服务帐户,以允许处理器获取正确的信息并将其添加到您的追踪中。

5.5.2. 从分布式追踪平台(Jaeger)迁移到没有 sidecar 的分布式追踪数据收集

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

先决条件

  • 在集群中使用 Red Hat OpenShift distributed tracing Platform (Jaeger)。
  • 已安装 Red Hat OpenShift distributed tracing 数据收集。

流程

  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 实例。

    注意

    此收集器会将 trace 导出至 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. 如果您要将 trace 直接从应用程序导出到 Jaeger,请将 API 端点从 Jaeger 端点改为 OpenTelemetry Collector 端点。

    使用带有 Golang 的 jaegerexporter 导出 trace 的示例

    exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) 1

    1
    URL 指向 OpenTelemetry Collector API 端点。