×

您可以使用 Red Hat OpenShift 分布式追踪与 OpenShift Serverless 来监控和排查无服务器应用程序。

使用 Red Hat OpenShift 分布式追踪启用分布式追踪

Red Hat OpenShift 分布式追踪由多个组件构成,这些组件协同工作以收集、存储和显示追踪数据。

先决条件
  • 您可以访问具有集群管理员访问权限的 OpenShift Container Platform 帐户。

  • 您已按照 OpenShift Container Platform 的“安装分布式追踪”文档安装了 Red Hat OpenShift 分布式追踪。

  • 您已安装 OpenShift CLI (oc)。

  • 您已创建项目或已访问具有适当角色和权限以在 OpenShift Container Platform 中创建应用程序和其他工作负载的项目。

步骤
  1. 创建 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]
  2. 验证您在安装 Red Hat OpenShift 分布式追踪的命名空间中是否有两个 Pod 正在运行

    $ 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
  3. 验证是否已创建以下无头服务

    $ 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 服务的名称可能会有所不同。

  4. 按照“安装 OpenShift Serverless 运算符”文档安装 OpenShift Serverless 运算符。

  5. 通过创建以下 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 个追踪中 1 个进行采样。
  6. 通过创建以下 KnativeEventing CR 来安装 Knative Eventing

    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 个追踪中 1 个进行采样。
  7. 创建 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"
  8. 向服务发出一些请求

    HTTPS 请求示例
    $ curl https://helloworld-go.example.com
  9. 获取 Jaeger Web 控制台的 URL

    示例命令
    $ oc get route jaeger-all-in-one-inmemory  -o jsonpath='{.spec.host}' -n <namespace>

    您现在可以使用 Jaeger 控制台检查追踪。