앱 요청의 지연 시간 확인
애플리케이션에서 지연 시간 데이터를 수집하고 보는 방법을 알아봅니다.
Google Cloud CLI를 사용하여 Google Kubernetes Engine(GKE) 클러스터를 만듭니다.
샘플 애플리케이션을 다운로드하고 클러스터에 배포합니다.
샘플 애플리케이션에 HTTP 요청을 보내 trace를 만듭니다.
만든 trace의 지연 시간 정보를 확인합니다.
삭제
Google Cloud 콘솔에서 이 태스크에 대한 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.
시작하기 전에
-
조직에서 정의한 보안 제약조건으로 인해 다음 단계를 완료하지 못할 수 있습니다. 문제 해결 정보는 제한된 Google Cloud 환경에서 애플리케이션 개발을 참조하세요.
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Google Kubernetes Engine and Cloud Trace APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Google Kubernetes Engine and Cloud Trace APIs.
GKE 클러스터 만들기
툴바에서 terminal
Cloud Shell 활성화 를 클릭한 후 Cloud Shell에서 다음 단계를 수행합니다.클러스터 만들기:
gcloud container clusters create cloud-trace-demo --zone us-central1-c
완료하는 데 몇 분 정도 걸리는 이전 명령어는
us-central1-c
영역에cloud-trace-demo
라는 이름의 표준 클러스터를 만듭니다.Google Cloud CLI와 동일한 ID를 사용하기 위해 사용자 인증 정보를 자동으로 새로고침하도록
kubectl
을 구성합니다.gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
클러스터에 대한 액세스 권한을 확인합니다.
kubectl get nodes
이 명령어의 샘플 출력은 다음과 같습니다.
NAME STATUS ROLES AGE VERSION gke-cloud-trace-demo-default-pool-063c0416-113s Ready <none> 78s v1.22.12-gke.2300 gke-cloud-trace-demo-default-pool-063c0416-1n27 Ready <none> 79s v1.22.12-gke.2300 gke-cloud-trace-demo-default-pool-063c0416-frkd Ready <none> 78s v1.22.12-gke.2300
애플리케이션 다운로드 및 배포
Flask 프레임워크 및 OpenTelemetry 패키지를 사용하는 Python 애플리케이션을 다운로드하고 배포합니다. 이 애플리케이션에 대해서는 이 페이지의 앱 정보 섹션에서 설명합니다.
Cloud Shell에서 다음을 수행합니다.
GitHub에서 Python 앱을 클론합니다.
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
다음 명령어를 실행하여 샘플 애플리케이션을 배포합니다.
cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
setup.sh
스크립트가 완료되는 데 몇 분 정도 걸립니다.이 스크립트는 사전 빌드된 이미지를 사용하여 3개의 서비스를 구성하고 모든 리소스가 프로비저닝될 때까지 기다립니다. 워크로드 이름은
cloud-trace-demo-a
,cloud-trace-demo-b
,cloud-trace-demo-c
로 지정됩니다.이 명령어의 샘플 출력은 다음과 같습니다.
deployment.apps/cloud-trace-demo-a is created service/cloud-trace-demo-a is created deployment.apps/cloud-trace-demo-b is created service/cloud-trace-demo-b is created deployment.apps/cloud-trace-demo-c is created service/cloud-trace-demo-c is created Wait for load balancer initialization complete...... Completed.
trace 데이터 만들기
trace는 애플리케이션이 단일 작업을 완료하는 데 걸리는 시간을 설명합니다.
trace를 만들려면 Cloud Shell에서 다음 명령어를 실행하세요.
curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')
이전 명령어의 응답은 다음과 비슷합니다.
Hello, I am service A
And I am service B
Hello, I am service C
curl
명령어를 여러 번 실행하여 여러 trace를 생성할 수 있습니다.
지연 시간 데이터 보기
-
Google Cloud 콘솔에서 Trace 탐색기 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾을 수도 있습니다.
각 trace는 그래프에서는 점으로, 테이블에서는 행으로 표시됩니다.
다음 스크린샷에서 여러 trace를 표시합니다.
trace를 자세히 보려면 그래프에서 점을 선택하거나 표에서 행을 선택합니다.
분산형 차트가 새로고침되고 선택한 점 주위에 원이 그려져 강조표시됩니다. 다른 trace를 나타내는 다른 점은 모두 흐리게 표시됩니다.
Gantt 차트에는 선택한 trace에 대한 정보가 표시됩니다. Gantt 차트의 첫 번째 행은 trace이며, trace의 각 스팬에 대해 하나의 행이 있습니다. 스팬은 완전한 하위 작업을 수행하는 데 걸리는 시간을 설명합니다.
스팬에 대한 자세한 내용을 보려면 Gantt 차트에서 스팬을 선택합니다.
애플리케이션 정보
이 빠른 시작에서 사용되는 샘플 애플리케이션은 GitHub 저장소에서 제공됩니다. 이 저장소에는 Cloud Shell 이외의 환경에서 애플리케이션을 사용하는 방법에 대한 정보가 포함되어 있습니다. 샘플 애플리케이션은 Python으로 작성되고 Flask 프레임워크 및 OpenTelemetry 패키지를 사용하며 GKE 클러스터에서 실행됩니다.
계측
GitHub 저장소의 app.py
파일에는 trace 데이터를 캡처하고 Google Cloud 프로젝트로 전송하는 데 필요한 계측이 포함되어 있습니다.
이 애플리케이션이 몇 가지 OpenTelemetry 패키지를 가져옵니다.
애플리케이션은 trace 컨텍스트를 사용하여 웹 요청을 계측하고 Flask 핸들러와 요청을 다른 서비스에 대한 요청을 자동으로 추적합니다.
애플리케이션은 Cloud Trace 내보내기 도구를 trace 제공자로 구성하여 Cloud Trace 형식으로 trace 컨텍스트를 전파합니다.
다음 코드 스니펫은 Python에서 요청을 보내는 방법을 보여줍니다. OpenTelemetry는 발신 요청으로 trace 컨텍스트를 암시적으로 전파합니다.
애플리케이션 작동 방식
명확하게 알아두어야 할 사실은 이 섹션에서는 서비스 이름에서 cloud-trace-demo
가 생략된다는 점입니다. 예를 들어 cloud-trace-demo-c
서비스는 c
로 참조됩니다.
이 애플리케이션은 a
, b
, c
라는 세 가지 서비스를 만들며, a
서비스는 b
서비스를 호출하도록 구성되고 b
서비스는 c
서비스를 호출하도록 구성됩니다.
서비스 구성에 대한 자세한 내용은 GitHub 저장소의 YAML 파일을 참조하세요.
이 빠른 시작에서 a
서비스로 HTTP 요청을 보낼 때 다음 curl
명령어를 사용했습니다.
curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')
curl
명령어는 다음과 같이 작동합니다.
kubectl
은cloud-trace-demo-a
라는 서비스의 IP 주소를 가져옵니다.- 그런 다음
curl
명령어는 서비스a
에 HTTP 요청을 보냅니다. a
서비스는 HTTP 요청을 수신하고b
서비스에 요청을 보냅니다.b
서비스는 HTTP 요청을 수신하고c
서비스에 요청을 보냅니다.c
서비스는b
서비스에서 HTTP 요청을 수신하고Hello, I am service C
문자열을b
서비스에 반환합니다.b
서비스는c
서비스에서 응답을 수신하고 이를And I am service B
문자열에 추가하고 결과를a
서비스에 반환합니다.a
서비스는b
서비스에서 응답을 수신하고 이를Hello, I am service A
문자열에 추가합니다.a
서비스의 응답이 Cloud Shell에 출력됩니다.
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
새 프로젝트를 만들었지만 더 이상 필요하지 않은 경우 프로젝트를 삭제하세요.
기존 프로젝트를 사용한 경우 다음을 수행합니다.
클러스터를 삭제하려면 Cloud Shell에서 다음 명령어를 실행합니다.
gcloud container clusters delete cloud-trace-demo --zone us-central1-c
다음 단계
- 지원되는 언어 및 플랫폼에 대한 자세한 내용은 Cloud Trace 개요를 참조하기
애플리케이션을 계측하는 방법은 다음을 참조하세요.
trace 탐색기 창에 대한 자세한 내용은 추적 찾기 및 보기를 참조하세요.
GKE 클러스터 관리에 대한 자세한 내용은 kubectl을 참조하세요.