8.2. Red Hat OpenShift distributed tracing을 사용하여 분산 추적 활성화

Red Hat OpenShift distributed tracing은 추적 데이터를 수집, 저장 및 표시하기 위해 함께 작동하는 여러 구성 요소로 구성됩니다. OpenShift Serverless와 함께 Red Hat OpenShift distributed tracing을 사용하여 서버리스 애플리케이션을 모니터링하고 문제를 해결할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing을 아직 설치하지 않았습니다. Red Hat OpenShift distributed tracing 설치 후 설치해야 합니다.
  • OpenShift Container Platform "분산 추적 설치" 문서에 따라 Red Hat OpenShift distributed tracing을 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

절차

  1. OpenTelemetryHeaderor CR(사용자 정의 리소스)을 만듭니다.

    OpenTelemetry#189or 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 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

  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 Operator 설치" 문서에 따라 OpenShift Serverless Operator를 설치합니다.
  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 웹 콘솔의 URL을 가져옵니다.

    명령 예

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

    이제 Jaeger 콘솔을 사용하여 추적을 검사할 수 있습니다.