第 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 跟踪、指标和日志,以分析和了解软件的性能和行为。
先决条件
- 已安装 Tempo Operator。请参阅: 安装 Tempo Operator。
- 安装了 Red Hat OpenShift distributed tracing 数据收集 Operator。请参阅: 安装 OpenTelemetry 的 Red Hat build
-
TempoStack 在
tempo
命名空间中安装和配置。请参阅: 安装 TempoStack 实例。 - 已创建一个 Istio 实例。
- 已创建一个 Istio CNI 实例。
流程
进入到 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
配置 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
收集器服务。
创建一个 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
以减少请求数量。运行以下命令来创建
info
命名空间:$ oc create ns info
根据您使用的更新策略,运行适当的命令在命名空间中启用 sidecar 注入:
如果您使用
InPlace
更新策略,请运行以下命令:$ oc label namespace curl istio-injection=enabled
如果使用
RevisionBased
update 策略,请运行以下命令:运行以下命令来显示修订名称:
$ 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
运行以下命令,使用修订名称标记命名空间以启用 sidecar 注入:
$ oc label namespace curl istio.io/rev=default-v1-23-0
运行以下命令,在
bookinfo
命名空间中部署info
应用程序:$ oc apply -f https://raw.githubusercontent.com/istio/istio/release-1.23/samples/info/platform/kube/bookinfo.yaml -n bookinfo
生成到
productpage
pod 的流量来生成 trace:$ oc exec -it -n info deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
运行以下命令,在 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
自定义资源。