퀵스타트

이 빠른 시작에서는 Cloud Shell을 사용하여 샘플 애플리케이션을 Google Kubernetes Engine(GKE) 클러스터에 배포합니다. 애플리케이션은 Python으로 작성됩니다. 배포 후 curl을 사용하여 HTTP 요청을 실행합니다. 이 작업을 수행하면 trace가 캡처되어 Google Cloud 프로젝트로 전송됩니다. 마지막으로 Cloud Trace 인터페이스를 사용하여, 생성한 trace의 지연 시간 정보를 확인합니다.

시작하기 전에

  1. Google 계정으로 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Cloud Console의 프로젝트 선택기 페이지에서 Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기 페이지로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

애플리케이션 다운로드 및 배포

애플리케이션을 다운로드하고 배포하려면 다음 단계를 따르세요.

  1. Cloud Shell을 열려면 Google Cloud Console 툴바에서 Cloud Shell 활성화를 클릭합니다.

    Cloud Shell 활성화

    잠시 후 Google Cloud Console에서 Cloud Shell 세션이 열립니다.

    Cloud Shell 세션

  2. GitHub에서 소스 코드를 다운로드하려면 다음 명령어를 실행합니다.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Google Kubernetes Engine API를 사용 설정하려면 Cloud Shell에서 다음 명령어를 실행합니다.

    gcloud services enable container.googleapis.com
    
  4. demo라는 GKE 클러스터를 만들려면 Cloud Shell에서 다음 명령어를 실행합니다.

    gcloud container clusters create demo --zone us-west1-b
    

    이 명령어를 완료하는 데 3~5분이 소요됩니다. 성공적으로 완료되면 Google Cloud 프로젝트에 demo라는 GKE 클러스터가 포함됩니다. Google Cloud 프로젝트에 외부 액세스 권한이 있는 클러스터를 만들 권한이 있어야 합니다. Google Cloud가 조직이나 폴더에 있으면 프로젝트 소유자인 경우에도 이러한 권한이 없을 수 있습니다. 이 명령어가 실패하면 시스템 관리자에게 문의하세요.

  5. 성공적으로 생성되었는지 확인하려면 다음 kubectl 명령어를 실행합니다.

    kubectl get nodes
    

    이 명령어의 샘플 출력은 다음과 같습니다.

    NAME                                  STATUS   ROLES    AGE   VERSION
    gke-demo-default-pool-24680f3d-bzvg   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-hfnq   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-qnh6   Ready    <none>   26m   v1.14.10-gke.27
    
  6. 다음 명령어를 실행하여 샘플 애플리케이션을 배포합니다.

    cd python-docs-samples/trace/cloud-trace-demo-app && ./setup.sh
    

    이 프로젝트의 일부인 setup.sh 스크립트는 cloud-trace-demo-a, cloud-trace-demo-b, cloud-trace-demo-c로 라벨이 지정되어 세 가지 다른 서비스를 구성합니다. 설정 스크립트는 한 번에 하나의 서비스를 구성하므로 구성을 완료하는 데 몇 분 정도 걸립니다. 다음은 스크립트가 실행되는 동안 Cloud Shell에 출력되는 내용의 예시입니다.

     Creating service a
     deployment.apps/cloud-trace-demo-a unchanged
     service/cloud-trace-demo-a unchanged
     Fetching the external IP of service a
     Passing external IP for the first service 34.82.132.95 to the second service template
     deployment.apps/cloud-trace-demo-b created
     service/cloud-trace-demo-b created
     Fetching the external IP of service b
     Passing external IP for the service b 35.230.0.131 to the service c
     deployment.apps/cloud-trace-demo-c created
     service/cloud-trace-demo-c created
     

trace 만들기

trace는 애플리케이션이 단일 작업을 완료하는 데 걸리는 시간을 설명합니다. 각 trace는 하나 이상의 스팬으로 구성됩니다. 스팬은 완전한 하위 작업을 수행하는 데 걸리는 시간을 설명합니다. 예를 들어 trace는 사용자의 수신 요청을 처리하고 응답을 반환하는 데 걸리는 시간을 설명합니다. 스팬은 특정 RPC 호출에 필요한 시간을 설명할 수 있습니다. 자세한 내용은 Cloud Trace의 데이터 모델을 참조하세요.

trace를 만들려면 다음 명령어를 실행합니다.

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

curl 명령어는 HTTP GET 요청을 생성하고 cloud-trace-demo-c라는 서비스에 요청을 전송합니다. 이 요청이 완료되면 Helloworld!가 셸에 출력됩니다.

curl 명령어를 여러 번 실행하여 여러 trace를 생성할 수 있습니다.

trace 데이터 보기

Cloud Trace 인터페이스를 열려면 Google Cloud Console에서 탐색 메뉴를 클릭하고 Trace를 선택하거나 다음 버튼을 클릭합니다.

Trace로 이동

개요 창

개요 창은 Trace의 기본 뷰입니다. 이 창에는 분석 보고서를 포함한 지연 시간 데이터와 요약 정보가 표시됩니다. 새 프로젝트를 만든 경우 개요 창의 가장 흥미로운 창은 최근 trace라는 라벨이 지정된 창입니다.

가장 최근의 trace 및 지연 시간을 표시하는 최근 trace 창

이 창에는 가장 최근의 trace와 지연 시간이 나열됩니다. trace의 세부정보를 보려면 trace의 링크를 클릭합니다.

Trace 목록 창

Trace 탐색 창에서 Trace list를 클릭합니다.

빠른 시작을 위한 Trace 목록 창

이 창에는 그래프와 표가 표시됩니다. 그래프의 각 점은 trace를 나타냅니다. 또한 각 점은 표의 행에 해당합니다. 이전 스크린샷에는 curl 명령어가 여러 번 실행되었음을 나타내는 여러 trace가 나열되어 있습니다.

trace를 자세히 보려면 그래프에서 점을 선택하거나 표에서 행을 선택합니다. 이 작업을 수행하면 선택한 trace의 세부정보를 표시하는 두 개의 창이 열립니다.

빠른 시작을 위한 폭포식 구조 표시

하나의 창은 폭포식 그래프에 trace를 표시하고 다른 창은 세부정보를 표시합니다. 폭포식 그래프의 각 행은 스팬에 해당합니다. trace 라벨, 메서드, 명령어 지연 시간에 대한 요약 정보 등 스팬의 세부정보가 세부정보 표에 표시됩니다. 스팬에 대한 세부정보를 보려면 폭포식 그래프에서 해당 행을 클릭합니다. 스팬은 세 가지 서비스의 IP 주소에 해당하는 세 가지 다른 IP 주소에 대한 것입니다. 이 trace에서 서비스 이름 cloud-trace-demo-c로 수신된 HTTP 요청이 서비스 cloud-trace-demo-b로 전달된 다음 cloud-trace-demo-a로 전달된 것을 확인할 수 있습니다.

세부정보 표에는 Cloud Logging으로 전송된 데이터의 링크가 포함될 수 있습니다. Cloud Logging 인터페이스에서 정보를 보려면 보기를 클릭합니다. 다음 스크린샷은 trace 데이터로 생성된 로그의 예시를 보여줍니다.

빠른 시작에서 trace의 LogEntry

폭포식 뷰에 표시된 IP 주소는 cloud-trace-demo-acloud-trace-demo-b라는 서비스의 IP 주소에 해당합니다.

분석 보고서 창

보고서를 보거나 만들려면 Trace 탐색창에서 분석 보고서를 클릭합니다. Trace는 일일 보고서를 자동으로 생성합니다. 이 프로젝트의 경우 새 보고서를 만들 데이터가 충분하지 않습니다.

애플리케이션 정보

이 빠른 시작에서 사용되는 샘플 애플리케이션은 GitHub 저장소에서 제공됩니다. 이 저장소에는 Cloud Shell 이외의 환경에서 애플리케이션을 사용하는 방법에 대한 정보가 포함되어 있습니다. 샘플 애플리케이션은 Python으로 작성되고 Flask 프레임워크 및 OpenCensus 패키지를 사용하며 Google Kubernetes Engine 클러스터에서 실행됩니다.

애플리케이션 게시자는 애플리케이션 개발을 간소화하고 OpenCensus Flask 미들웨어를 사용하기를 위해 Flask 프레임워크의 사용을 선택했습니다. Python을 사용하는 경우 Flask 프레임워크를 사용할 필요가 없습니다.

계측

GitHub 저장소app.py 파일에는 trace 데이터를 캡처하고 Google Cloud 프로젝트로 전송하는 데 필요한 계측이 포함되어 있습니다.

  • 애플리케이션 가져오기 문에는 Flask 및 여러 OpenCensus 패키지에 대한 문이 포함됩니다. StackdriverExporter는 trace 데이터를 Google Cloud 프로젝트로 전송하는 객체입니다.

    from flask import Flask
    from opencensus.ext.flask.flask_middleware import FlaskMiddleware
    from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
    from opencensus.trace import execution_context
    from opencensus.trace.propagation import google_cloud_format
    from opencensus.trace.samplers import AlwaysOnSampler
  • 애플리케이션은 Flask를 HTTP 프레임워크로 사용하는 미들웨어 구성요소를 만듭니다.

    propagator = google_cloud_format.GoogleCloudFormatPropagator()
    
    def createMiddleWare(exporter):
        # Configure a flask middleware that listens for each request and applies automatic tracing.
        # This needs to be set up before the application starts.
        middleware = FlaskMiddleware(
            app,
            exporter=exporter,
            propagator=propagator,
            sampler=AlwaysOnSampler())
        return middleware

    이 애플리케이션에서 sampler 필드는 OpenCensus 메서드 AlwaysOnSampler()에 의해 설정됩니다. 이 메서드는 모든 샘플링 결정에 대해 True를 반환하고 100%의 요청이 추적되도록 합니다. 프로덕션 환경에서는 모든 요청을 샘플링하지 않는 것이 좋습니다. 자세한 내용은 샘플링 레이트를 참조하세요.

  • 애플리케이션의 main 함수에서 StackdriverExporter()를 사용하는 Flask 미들웨어를 구성합니다.

    createMiddleWare(StackdriverExporter())
  • 애플리케이션에 필요하지 않은 수정이 하나 더 있습니다. 대신 이 수정은 표시되며, 애플리케이션에서 경로 /에 대한 응답에는 X-Cloud-Trace-Context 헤더가 포함됩니다.

    trace_context_header = propagator.to_header(execution_context.get_opencensus_tracer().span_context)
    response = requests.get(
        url,
        params=data,
        headers={
          'X-Cloud-Trace-Context' : trace_context_header}
    )

    X-Cloud-Trace-Context 헤더는 현재 trace에 대한 정보(trace 식별자 포함)가 포함된 HTTP 헤더입니다. 서로 다른 서비스가 동일한 trace에 스팬 정보를 추가할 수 있도록 하려면 이러한 서비스는 trace 식별자를 식별할 수 있어야 합니다. 기본적으로 OpenCensus 패키지는 이 컨텍스트를 응답 헤더에 자동으로 포함합니다.

애플리케이션 작동 방식

명확하게 알아두어야 할 사실은 이 섹션에서는 서비스 이름에서 cloud-trace-demo가 생략된다는 점입니다. 예를 들어 cloud-trace-demo-c 서비스는 c로 참조됩니다.

이 애플리케이션은 a, b, c라는 세 가지 서비스를 만들며, b 서비스를 호출하도록 c 서비스를 구성하고 a 서비스를 호출하도록 b 서비스를 구성합니다. 서비스 구성에 대한 자세한 내용은 GitHub 저장소의 YAML 파일을 참조하세요.

이 빠른 시작에서 c 서비스로 HTTP 요청을 보낼 때 다음 curl 명령어를 사용했습니다.

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

curl 명령어는 다음과 같이 작동합니다.

  1. kubectlcloud-trace-demo-c라는 서비스의 IP 주소를 가져옵니다.
  2. 그런 다음 curl 명령어는 서비스 c에 HTTP 요청을 보냅니다.
  3. c 서비스는 HTTP 요청을 수신하고 b 서비스에 요청을 보냅니다.
  4. b 서비스는 HTTP 요청을 수신하고 a 서비스에 요청을 보냅니다.
  5. a 서비스가 요청을 수신하고 Hello 문자열을 반환합니다. Hello 문자열은 이 서비스의 기본 인수로 전달되는 키워드입니다.
  6. b 서비스는 a 서비스로부터 응답을 받고 world 문자열을 추가한 다음 Helloworld를 반환합니다. world 문자열은 이 서비스의 기본 인수로 전달되는 키워드입니다.
  7. c 서비스는 b 서비스로부터 응답을 받고 !를 추가한 다음 Helloworld!를 반환합니다.
  8. c 서비스의 응답이 Cloud Shell에 출력됩니다.

정리

이 빠른 시작에서 사용한 리소스의 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

  • 이 빠른 시작에서 새 Google Cloud 프로젝트를 만든 경우 프로젝트를 삭제하여 요금이 청구되지 않도록 합니다. 프로젝트를 삭제하려면 다음 단계를 따르세요.

    1. Google Cloud Console에서 탐색 메뉴를 클릭하고 을 선택합니다.
    2. 프로젝트 정보 창에서 프로젝트 설정으로 이동을 클릭합니다.
    3. 설정 창에서 종료를 클릭하고 나머지 단계를 완료합니다.
  • 이 빠른 시작에서 새 Google Cloud 프로젝트를 만들지 않았다면 다음 명령어를 실행하여 demo라는 Google Kubernetes Engine 클러스터를 삭제합니다.

    gcloud container clusters delete demo --zone us-west1-b
    

다음 단계