8.4. 추적
8.4.1. 요청 추적
분산 추적은 애플리케이션을 구성하는 다양한 서비스를 통해 요청 경로를 기록합니다. 이 기능은 분산 트랜잭션의 전체 이벤트 체인을 이해하기 위해 서로 다른 작업 단위에 대한 정보를 함께 연결하는 데 사용됩니다. 작업 단위는 여러 프로세스 또는 호스트에서 실행될 수 있습니다.
8.4.1.1. 분산 추적 개요
서비스 소유자로 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집할 수 있습니다. 분산 추적을 사용하여 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결할 수 있습니다.
분산 추적을 사용하면 다음 기능을 수행할 수 있습니다.
- 분산 트랜잭션 모니터링
- 성능 및 대기 시간 최적화
- 근본 원인 분석 수행
Red Hat OpenShift distributed tracing은 다음 두 가지 주요 구성 요소로 구성됩니다.
- Red Hat OpenShift distributed tracing platform - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
- Red Hat OpenShift 분산 추적 데이터 수집 - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.
이러한 두 구성 요소는 모두 벤더 중립 OpenTracing API 및 계측을 기반으로 합니다.
8.4.1.2. 추가 리소스
8.4.2. Red Hat OpenShift distributed tracing 사용
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 "분산 추적 설치" 문서에 따라 Red Hat OpenShift distributed tracing을 설치했습니다.
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
절차
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]
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개의 추적 중 1개가 샘플링됩니다.
다음
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개가 샘플링됩니다.
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 웹 콘솔의 URL을 가져옵니다.
명령 예
$ oc get route jaeger-all-in-one-inmemory -o jsonpath='{.spec.host}' -n <namespace>
이제 Jaeger 콘솔을 사용하여 추적을 검사할 수 있습니다.
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 웹 콘솔에 액세스하여 추적 데이터를 볼 수 있습니다.
다음 명령을 입력하여
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
- 콘솔을 보려면 브라우저에서 끝점 주소를 엽니다.