第 3 章 分布式追踪和 Service Mesh
将 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 数据收集。
您可以将 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 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 Red Hat OpenShift Service Mesh 以启用追踪,并在
meshConfig
中定义分布式追踪数据收集追踪供应商:启用追踪和定义追踪供应商示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
service
字段是istio-system
命名空间中的OpenTelemetry
收集器服务。
创建一个 Istio Telemetry 资源来启用
spec.values.meshConfig.ExtensionProviders
中定义的 tracer:Istio Telemetry 资源示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意验证您可以看到 trace 后,请降低
randomSamplingPercentage
值或将其设置为default
以减少请求数量。运行以下命令来创建
info
命名空间:oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您使用的更新策略,运行适当的命令在命名空间中启用 sidecar 注入:
如果您使用
InPlace
更新策略,请运行以下命令:oc label namespace curl istio-injection=enabled
$ oc label namespace curl istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用
RevisionBased
update 策略,请运行以下命令:运行以下命令来显示修订名称:
oc get istiorevisions.sailoperator.io
$ oc get istiorevisions.sailoperator.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
NAME TYPE READY STATUS IN USE VERSION AGE default Local True Healthy True v1.24.3 3m33s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用修订名称标记命名空间以启用 sidecar 注入:
oc label namespace curl istio.io/rev=default
$ oc label namespace curl istio.io/rev=default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,在
bookinfo
命名空间中部署info
应用程序:oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成到
productpage
pod 的流量来生成 trace:oc exec -it -n info deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
$ oc exec -it -n info deployments/productpage-v1 -c istio-proxy -- curl localhost:9080/productpage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在 UI 中看到 trace 来验证集成:
oc get routes -n tempo tempo-sample-query-frontend
$ oc get routes -n tempo tempo-sample-query-frontend
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Jaeger UI 的 OpenShift 路由必须在 Tempo 命名空间中创建。您可以为
tempo-sample-query-frontend
服务手动创建它,或使用.spec.template.queryFrontend.jaegerQuery.ingress.type: route
来更新Tempo
自定义资源。