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 数据收集。
流程
将 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 实例的网关。
创建用于运行应用程序的服务帐户。
apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector-sidecar
为某些处理器所需的权限创建集群角色。
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
需要基础架构和基础架构/状态的权限。
创建
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
- 将 OpenTelemetry Collector 部署为 sidecar。
-
通过从
Deployment
对象中删除"sidecar.jaegertracing.io/inject": "true"
注解,从应用程序中删除注入的 Jaeger Agent。 -
通过将
sidecar.opentelemetry.io/inject: "true"
注解添加到Deployment
对象的.spec.template.metadata.annotations
字段来启用 OpenTelemetry sidecar 自动注入。 - 使用为应用程序部署创建的服务帐户,以允许处理器获取正确的信息并将其添加到您的追踪中。
5.5.2. 从分布式追踪平台(Jaeger)迁移到没有 sidecar 的分布式追踪数据收集
您可以从分布式追踪平台(Jaeger)迁移到分布式追踪平台(Jaeger),而无需 sidecar 部署。
先决条件
- 在集群中使用 Red Hat OpenShift distributed tracing Platform (Jaeger)。
- 已安装 Red Hat OpenShift distributed tracing 数据收集。
流程
- 配置 OpenTelemetry Collector 部署。
创建部署 OpenTelemetry Collector 的项目。
apiVersion: project.openshift.io/v1 kind: Project metadata: name: observability
创建用于运行 OpenTelemetry Collector 实例的服务帐户。
apiVersion: v1 kind: ServiceAccount metadata: name: otel-collector-deployment namespace: observability
创建集群角色,以设置处理器所需的权限。
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"]
创建 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
创建 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]
- 将追踪端点指向 OpenTelemetry Operator。
如果您要将 trace 直接从应用程序导出到 Jaeger,请将 API 端点从 Jaeger 端点改为 OpenTelemetry Collector 端点。
使用带有 Golang 的
jaegerexporter
导出 trace 的示例exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) 1
- 1
- URL 指向 OpenTelemetry Collector API 端点。