Cloud Trace로 인바운드 트래픽 추적

이 문서에서는 Cloud Trace를 사용하여 애플리케이션 부하 분산기에 분산 추적을 구성하는 방법을 설명합니다. 부하 분산기의 전달 규칙을 타겟팅하는 텔레메트리 정책을 만든 다음 Cloud Trace에서 결과 trace를 확인합니다.

이 문서의 예시에서는 다음 아키텍처가 있는 이커머스 애플리케이션을 사용합니다.

  • 웹 스토어프런트의 고객 트래픽을 수신하는 전역 외부 애플리케이션 부하 분산기
  • 스토어프런트에서 내부 장바구니, 인벤토리, 결제 서비스로 결제 요청을 라우팅하는 리전 내부 애플리케이션 부하 분산기

샘플링 모드 및 trace 컨텍스트 헤더 처리를 포함하여 분산 추적이 작동하는 방식에 대한 자세한 내용은 분산 추적 개요를 참조하세요.

시작하기 전에

  1. 프로젝트에서 Cloud Trace API 및 Network Services API를 사용 설정합니다.

    gcloud services enable \
        cloudtrace.googleapis.com \
        networkservices.googleapis.com
    
  2. 지원되는 부하 분산기가 배포되어 있는지 확인합니다. 자세한 내용은 다음을 참조하세요.

  3. 부하 분산기의 전달 규칙 이름과 범위를 기록해 둡니다. 전달 규칙 범위는 부하 분산기 유형에 따라 달라집니다.

    • 전역 전달 규칙: 전역 외부 애플리케이션 부하 분산기 및 리전 간 내부 애플리케이션 부하 분산기에서 사용됩니다.
    • 리전 전달 규칙: 리전 외부 애플리케이션 부하 분산기와 리전 내부 애플리케이션 부하 분산기에서 사용됩니다.

    프로젝트의 전달 규칙을 나열하려면 gcloud compute forwarding-rules list 명령어를 사용합니다.

    gcloud compute forwarding-rules list
    

필요한 역할

텔레메트리 정책을 구성하고 trace를 보는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 Identity and Access Management (IAM) 역할을 부여해 달라고 요청하세요.

부하 분산기가 Cloud Trace에 trace 스팬을 작성하도록 하려면 프로젝트의 Cloud Trace 에이전트 역할(roles/cloudtrace.agent)을 다음 서비스 계정에 부여합니다.

  • Compute Engine 서비스 에이전트: service-PROJECT_NUMBER@compute-system.
  • 네트워크 보안 서비스 에이전트: service-PROJECT_NUMBER@gcp-sa-networksecurity.
  • 백엔드가 자체 스팬을 Cloud Trace로 내보내는 경우 백엔드 워크로드의 서비스 계정 이 역할이 없으면 Cloud Trace에 부하 분산기 스팬만 표시되고 trace에 백엔드 스팬이 포함되지 않습니다.

여기에서 PROJECT_NUMBER를Google Cloud 프로젝트 번호로 바꿉니다.

역할 부여에 대한 상세 설명은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

원격 분석 정책 구성

다음 형식을 사용하는 YAML 파일에서 텔레메트리 정책을 정의합니다.

name: "projects/PROJECT_ID/locations/LOCATION/telemetryPolicies/POLICY_NAME"
displayName: "DISPLAY_NAME"
telemetryTarget:
  resources:
  - "FORWARDING_RULE_URI"
tracingConfiguration:
  samplingRate: SAMPLING_RATE
  parentBasedSampling:
    enabled: ENABLE_PARENT_BASED_SAMPLING
    samplingRate: PARENT_BASED_SAMPLING_RATE

다음 표에서는 텔레메트리 정책의 필드를 설명합니다.

필드 설명
name

텔레메트리 정책의 리소스 이름입니다. 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
  • LOCATION: 텔레메트리 정책의 위치로, 정책이 타겟팅하는 전달 규칙의 범위와 일치해야 합니다. 전역 전달 규칙의 경우 global을 사용합니다. 리전 전달 규칙의 경우 전달 규칙의 리전(예: us-central1)을 사용합니다.
  • POLICY_NAME: 텔레메트리 정책의 이름입니다. 이름은 4~63자(영문 기준)여야 하고, 소문자로 시작하고, 소문자, 숫자, 하이픈만 포함해야 하며, 소문자 또는 숫자로 끝나야 합니다.
displayName (선택사항) 텔레메트리 정책의 인간이 읽을 수 있는 이름(DISPLAY_NAME)입니다.
telemetryTarget.resources

정책이 적용되는 전달 규칙의 전체 리소스 이름(FORWARDING_RULE_URI) 목록입니다. 리소스를 최대 50개까지 지정할 수 있습니다. 다음 형식 중 하나를 사용합니다.

  • 전역 전달 규칙: //compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME
  • 리전 전달 규칙: //compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME
다음을 바꿉니다.
  • FORWARDING_RULE_NAME: 전달 규칙의 이름입니다.
  • REGION: 전달 규칙의 리전(예: us-central1)
tracingConfiguration.samplingRate 추적할 요청의 비율(SAMPLING_RATE)이며 0.0 (0%)에서 1.0 (100%) 사이의 값으로 지정됩니다. 예를 들어 0.01는 요청의 1% 를 샘플링합니다. 기본값은 0.0입니다.
tracingConfiguration.parentBasedSampling.enabled (선택사항) 부하 분산기가 수신 W3C traceparent 헤더(ENABLE_PARENT_BASED_SAMPLING)에서 샘플링된 플래그를 적용하는지 여부는 true 또는 false입니다. 기본값은 false입니다. 내부 애플리케이션 부하 분산기에서만 지원됩니다.
tracingConfiguration.parentBasedSampling.samplingRate (선택사항) 추적할 업스트림 샘플링 요청의 비율(PARENT_BASED_SAMPLING_RATE)이며 0.0에서 1.0 사이의 값으로 지정됩니다. 예를 들어 1.0은 업스트림 클라이언트 또는 서비스가 이미 샘플링한 모든 요청을 추적합니다.

외부 부하 분산기의 추적 구성

이 예시에서는 전자상거래 매장의 전역 외부 애플리케이션 부하 분산기의 전달 규칙에 확률적 샘플링을 구성합니다. 샘플링 레이트가 0.01이면 요청의 1% 를 추적하여 트래픽이 많을 때 Cloud Trace 수집 비용을 예측 가능하게 유지하면서 에지 지연 시간과 오류를 캡처합니다.

  1. storefront-tracing-policy.yaml이라는 YAML 파일을 만듭니다.

    cat <<EOF > storefront-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/global/telemetryPolicies/storefront-tracing-policy"
    displayName: "Tracing policy for the storefront load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
    EOF
    

    다음을 바꿉니다.

    • PROJECT_ID:Google Cloud 프로젝트 ID
    • FORWARDING_RULE_NAME: 부하 분산기의 전역 전달 규칙 이름

    리전 외부 애플리케이션 부하 분산기의 경우 정책 이름의 global를 전달 규칙의 리전으로 바꾸고 리전 전달 규칙 형식을 사용합니다.

  2. gcloud beta network-services telemetry-policies import 명령어를 사용하여 텔레메트리 정책을 가져옵니다.

    gcloud beta network-services telemetry-policies import storefront-tracing-policy \
        --source=storefront-tracing-policy.yaml \
        --location=global
    

내부 부하 분산기의 추적 구성

이 예시에서는 내부 결제 및 결제 서비스를 위한 리전 내부 애플리케이션 부하 분산기를 구성합니다. 정책은 다음 샘플링 설정을 사용합니다.

  • 업스트림 샘플링 결정을 전달하지 않는 요청의 경우 기준 samplingRate은 0.01 (1%)입니다.
  • samplingRate이 1.0 (100%)인 상위 기반 샘플링을 사용하므로 매장 또는 업스트림 서비스에서 이미 샘플링된 모든 결제 요청이 내부 부하 분산기에서 추적됩니다.

정책을 구성하려면 다음 단계를 따르세요.

  1. checkout-tracing-policy.yaml이라는 YAML 파일을 만듭니다.

    cat <<EOF > checkout-tracing-policy.yaml
    name: "projects/PROJECT_ID/locations/REGION/telemetryPolicies/checkout-tracing-policy"
    displayName: "Tracing policy for the internal checkout load balancer"
    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME"
    tracingConfiguration:
      samplingRate: 0.01
      parentBasedSampling:
        enabled: true
        samplingRate: 1.0
    EOF
    

    다음을 바꿉니다.

    • PROJECT_ID:Google Cloud 프로젝트 ID
    • REGION: 전달 규칙의 리전(예: us-central1)
    • FORWARDING_RULE_NAME: 부하 분산기의 리전 전달 규칙 이름

    교차 리전 내부 애플리케이션 부하 분산기의 경우 정책 이름의 위치로 global를 사용하고 전역 전달 규칙 형식을 사용합니다.

  2. 텔레메트리 정책을 가져옵니다.

    gcloud beta network-services telemetry-policies import checkout-tracing-policy \
        --source=checkout-tracing-policy.yaml \
        --location=REGION
    

텔레메트리 정책 확인

텔레메트리 정책이 존재하고 올바른 전달 규칙을 타겟팅하는지 확인하려면 gcloud beta network-services telemetry-policies describe 명령어를 사용합니다.

gcloud beta network-services telemetry-policies describe POLICY_NAME \
    --location=LOCATION

다음을 바꿉니다.

  • POLICY_NAME: 텔레메트리 정책의 이름
  • LOCATION: global 또는 텔레메트리 정책의 리전

위치의 모든 텔레메트리 정책을 나열하려면 gcloud beta network-services telemetry-policies list 명령어를 사용합니다.

gcloud beta network-services telemetry-policies list \
    --location=LOCATION

텔레메트리 정책 업데이트

샘플링 설정을 변경하거나 동일한 정책을 추가 전달 규칙에 적용하려면 다음을 수행합니다.

  1. 정책 YAML 파일을 수정합니다. 예를 들어 storefront 정책을 여러 전역 전달 규칙에 적용하려면 각 전달 규칙을 telemetryTarget.resources 목록에 추가합니다.

    telemetryTarget:
      resources:
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/storefront-https-fr"
        - "//compute.googleapis.com/projects/PROJECT_ID/global/forwardingRules/cart-https-fr"
    
  2. 업데이트된 정책을 가져옵니다.

    gcloud beta network-services telemetry-policies import POLICY_NAME \
        --source=POLICY_FILE \
        --location=LOCATION
    

    POLICY_FILE를 정책 YAML 파일의 경로로 바꿉니다.

trace 보기

추적을 구성하고 부하 분산기를 통해 트래픽을 전송한 후 Google Cloud 콘솔에서 trace를 확인합니다.

  1. Google Cloud 콘솔에서 Trace 탐색기 페이지로 이동합니다.

    trace 탐색기로 이동

  2. Google Cloud 프로젝트를 선택합니다.

  3. 필터 필드에 필터를 입력하여 검사할 trace를 찾습니다. 예를 들어 속성 ID 또는 지연 시간 기준입니다.

  4. 원하는 경우 특정 trace를 탐색하려면 툴바로 이동하여 trace ID를 클릭하고 trace ID를 입력합니다.

  5. trace를 클릭하여 타임라인 및 그래프 뷰에서 스팬을 확인합니다.

  6. 부하 분산기 스팬을 검사하여 총 기간 및 요청을 처리한 백엔드와 같은 세부정보를 확인합니다.

Trace 탐색기 사용에 대한 자세한 내용은 trace 찾기 및 탐색을 참조하세요.

trace와 로그 및 측정항목의 상관관계 파악

부하 분산기 trace 스팬을 요청 로그 및 측정항목과 연결하여 지연 시간 또는 오류의 원인을 격리할 수 있습니다.

trace와 로그의 상관관계

백엔드 서비스에서 로깅을 사용 설정하면 부하 분산기가 샘플링된 요청의 각 요청 로그 항목에 trace 필드를 추가합니다. 이 필드는 다음 형식을 사용합니다.

projects/PROJECT_ID/traces/TRACE_ID

부하 분산기 로그 항목에서 trace 보기

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 부하 분산기 로그 항목을 펼칩니다.

  3. 로그 항목 요약에서 trace 아이콘을 클릭합니다.

    로그 탐색기의 로그 항목 요약 옆에 있는 trace 아이콘

  4. trace 세부정보 보기를 선택합니다.

Trace 탐색기 페이지에서 trace가 열립니다.

trace에서 부하 분산기 로그 보기

  1. Google Cloud 콘솔에서 Trace 탐색기 페이지로 이동합니다.

    trace 탐색기로 이동

  2. trace를 클릭하여 세부정보 창을 엽니다.

  3. 로그 보기를 클릭합니다.

요청에 대한 부하 분산기 로그 항목이 표시됩니다.

trace와 측정항목의 상관관계 파악

부하 분산기 측정항목의 지연 시간 급증을 trace 스팬 분석과 비교하여 지연 시간이 부하 분산기에서 발생하는지 아니면 백엔드에서 발생하는지 확인합니다. Cloud Monitoring의 측정항목 탐색기에서 이러한 측정항목을 보고 쿼리할 수 있습니다. 다음 측정항목을 사용합니다.

  • 전역 외부 애플리케이션 부하 분산기: loadbalancing.googleapis.com/https/total_latencies 및 loadbalancing.googleapis.com/https/backend_latencies
  • 리전 외부 애플리케이션 부하 분산기: loadbalancing.googleapis.com/https/external/regional/total_latencies
  • 내부 애플리케이션 부하 분산기: loadbalancing.googleapis.com/https/internal/total_latencies

추적 사용 중지

부하 분산기의 요청 추적을 중지하려면 다음 중 하나를 수행합니다.

  • 정책의 telemetryTarget.resources 목록에서 전달 규칙을 삭제한 후 업데이트된 정책을 가져옵니다.
  • gcloud beta network-services telemetry-policies delete 명령어를 사용하여 텔레메트리 정책을 삭제합니다.

    gcloud beta network-services telemetry-policies delete POLICY_NAME \
        --location=LOCATION
    

권장사항

분산 추적을 구성할 때는 다음 권장사항을 고려하세요.

  • 트래픽 볼륨에 따른 샘플링 레이트 크기 조정: 트래픽이 많은 프로덕션 워크로드의 경우 samplingRate를 0.01 (1%) 또는 0.001(0.1%)로 사용하여 모니터링 가능성과 Cloud Trace 수집 비용의 균형을 맞춥니다.
  • 다중 계층 아키텍처에 상위 기반 샘플링 사용: 내부 애플리케이션 부하 분산기에서 상위 기반 샘플링을 사용 설정하여 업스트림에서 샘플링된 요청이 모든 내부 홉에서 추적되도록 합니다.
  • 백엔드 계측: 백엔드 서비스에서 W3C Trace Context 전파기와 함께 OpenTelemetry SDK를 사용하여 백엔드 스팬이 부하 분산기가 시작하는 trace에 참여하도록 합니다.

문제 해결

이 섹션에서는 일반적인 문제와 해결 방법을 설명합니다.

Cloud Trace에 trace가 표시되지 않음

Cloud Trace에 trace가 표시되지 않으면 다음을 수행합니다.

  1. 프로젝트에서 Cloud Trace API가 사용 설정되어 있는지 확인합니다.

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. 필수 역할에 나열된 서비스 계정에 Cloud Trace 에이전트 역할 (roles/cloudtrace.agent)이 부여되었는지 확인합니다.

  3. 텔레메트리 정책이 올바른 위치에 있고 올바른 전달 규칙을 타겟팅하는지 확인합니다. 자세한 내용은 텔레메트리 정책 확인을 참조하세요.

  4. 구성된 samplingRate를 확인합니다. 트래픽 볼륨 또는 샘플링 레이트가 낮으면 부하 분산기가 trace를 즉시 캡처하지 못할 수 있습니다. 추적이 작동하는지 확인하려면 samplingRate를 1.0로 일시적으로 설정한 후 테스트가 완료되면 프로덕션 비율을 복원합니다.

trace 스팬이 연결 해제되었거나 불완전함

부하 분산기 스팬이 애플리케이션 trace의 일부가 아닌 별도의 루트 trace로 표시되는 경우 다음을 수행합니다.

  1. 내부 애플리케이션 부하 분산기의 경우 텔레메트리 정책에서 상위 기반 샘플링이 사용 설정(parentBasedSampling.enabled: true)되었는지 확인합니다.

  2. 클라이언트 및 백엔드 워크로드의 서비스 계정에 Cloud Trace 에이전트 역할 (roles/cloudtrace.agent)이 있는지 확인하여 스팬을 Cloud Trace로 내보낼 수 있도록 합니다.

  3. 애플리케이션이 W3C Trace Context 전파가 사용 설정된 OpenTelemetry SDK를 사용하여 traceparent 헤더가 서비스 경계를 넘어 전파되는지 확인합니다. 자세한 내용은 OpenTelemetry 컨텍스트 전파 문서를 참조하세요.

다음 단계