8.4. Tracing
8.4.1. 跟踪请求
分布式追踪记录了一个请求在组成一个应用程序的多个微服务间的路径。它被用来将不同工作单元的信息串联在一起,理解分布式事务中整个事件链。工作单元可能会在不同进程或主机中执行。
8.4.1.1. 分布式追踪概述
作为服务所有者,您可以使用分布式追踪来检测您的服务,以收集与服务架构相关的信息。您可以使用分布式追踪来监控、网络性能分析,并对现代、云原生的基于微服务的应用中组件之间的交互进行故障排除。
通过分布式追踪,您可以执行以下功能:
- 监控分布式事务
- 优化性能和延迟时间
- 执行根原因分析
Red Hat OpenShift distributed tracing 包括两个主要组件:
- Red Hat OpenShift distributed tracing Platform - 此组件基于开源 Jaeger 项目。
- Red Hat OpenShift distributed tracing 数据收集 - 此组件基于开源 OpenTelemetry 项目。
这两个组件都基于厂商中立的 OpenTracing API 和工具。
8.4.1.2. 其他资源
8.4.2. 使用 Red Hat OpenShift distributed tracing
您可以使用 Red Hat OpenShift Serverless 的 Red Hat OpenShift distributed tracing 监控无服务器应用程序并进行故障排除。
8.4.2.1. 使用 Red Hat OpenShift distributed tracing 启用分布式追踪
Red Hat OpenShift distributed tracing 由几个组件组成,它们一起收集、存储和显示追踪数据。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 还没有安装 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。这些需要在 Red Hat OpenShift distributed tracing 安装后安装。
- 您已按照 OpenShift Container Platform "Installing distributed tracing" 文档 安装了 Red Hat OpenShift distributed tracing。
-
已安装 OpenShift CLI(
oc
)。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建
OpenTelemetryCollector
自定义资源 (CR) :OpenTelemetryCollector CR 示例
apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: cluster-collector namespace: <namespace> spec: mode: deployment config: | receivers: zipkin: processors: exporters: jaeger: endpoint: jaeger-all-in-one-inmemory-collector-headless.tracing-system.svc:14250 tls: ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt" logging: service: pipelines: traces: receivers: [zipkin] processors: [] exporters: [jaeger, logging]
验证有两个 pod 在安装了 Red Hat OpenShift distributed tracing 的命名空间中运行:
$ oc get pods -n <namespace>
输出示例
NAME READY STATUS RESTARTS AGE cluster-collector-collector-85c766b5c-b5g99 1/1 Running 0 5m56s jaeger-all-in-one-inmemory-ccbc9df4b-ndkl5 2/2 Running 0 15m
验证是否已创建以下无头服务:
$ oc get svc -n <namespace> | grep headless
输出示例
cluster-collector-collector-headless ClusterIP None <none> 9411/TCP 7m28s jaeger-all-in-one-inmemory-collector-headless ClusterIP None <none> 9411/TCP,14250/TCP,14267/TCP,14268/TCP 16m
这些服务用于配置 Jaeger、Knative Serving 和 Knative Eventing。Jaeger 服务的名称可能会有所不同。
- 按照"安装 OpenShift Serverless Operator"文档安装 OpenShift Serverless Operator。
通过创建以下
KnativeServing
CR 来安装 Knative Serving:KnativeServing CR 示例
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: config: tracing: backend: "zipkin" zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans" debug: "false" sample-rate: "0.1" 1
- 1
sample-rate
定义抽样概率。sample-rate: "0.1"
表示在 10 个 trace 中会抽样 1 个。
通过创建以下 KnativeEventing CR 来安装
Knative Eventing
:Example KnativeEventing CR
apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: tracing: backend: "zipkin" zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans" debug: "false" sample-rate: "0.1" 1
- 1
sample-rate
定义抽样概率。sample-rate: "0.1"
表示在 10 个 trace 中会抽样 1 个。
创建 Knative 服务:
服务示例
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: metadata: labels: app: helloworld-go annotations: autoscaling.knative.dev/minScale: "1" autoscaling.knative.dev/target: "1" spec: containers: - image: quay.io/openshift-knative/helloworld:v1.2 imagePullPolicy: Always resources: requests: cpu: "200m" env: - name: TARGET value: "Go Sample v1"
向服务发出一些请求:
HTTPS 请求示例
$ curl https://helloworld-go.example.com
获取 Jaeger web 控制台的 URL:
示例命令
$ oc get route jaeger-all-in-one-inmemory -o jsonpath='{.spec.host}' -n <namespace>
现在,您可以使用 Jaeger 控制台检查 trace。
8.4.3. 使用 Jaeger 分布式追踪
如果您不想安装 Red Hat OpenShift distributed tracing 的所有组件,您仍可使用带有 OpenShift Serverless 的 OpenShift Container Platform 上的分布式追踪。
8.4.3.1. 配置 Jaeger 以启用分布式追踪
要使用 Jaeger 启用分布式追踪,您必须安装并配置 Jaeger 作为独立集成。
先决条件
- 您可以访问具有集群管理员权限的 OpenShift Container Platform 帐户。
- 已安装 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 已安装 Red Hat OpenShift distributed tracing platform Operator。
-
已安装 OpenShift CLI(
oc
)。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建并应用包含以下内容的
Jaeger
自定义资源(CR):Jaeger CR
apiVersion: jaegertracing.io/v1 kind: Jaeger metadata: name: jaeger namespace: default
通过编辑
KnativeServing
CR 并添加用于追踪的 YAML 配置来启用 Knative Serving 的追踪:Serving 的追踪 YAML 示例
apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: config: tracing: sample-rate: "0.1" 1 backend: zipkin 2 zipkin-endpoint: "http://jaeger-collector.default.svc.cluster.local:9411/api/v2/spans" 3 debug: "false" 4
通过编辑 KnativeEventing CR 来启用
Knative Eventing
的追踪:Eventing 的追踪 YAML 示例
apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: tracing: sample-rate: "0.1" 1 backend: zipkin 2 zipkin-endpoint: "http://jaeger-collector.default.svc.cluster.local:9411/api/v2/spans" 3 debug: "false" 4
验证
您可以使用 jaeger
路由来访问 Jaeger web 控制台以查看追踪数据。
输入以下命令来获取
jaeger
路由的主机名:$ oc get route jaeger -n default
输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD jaeger jaeger-default.apps.example.com jaeger-query <all> reencrypt None
- 在浏览器中使用端点地址来查看控制台。