이 문서에서는 OpenTelemetry를 사용하여 클라이언트 측 및 엔드 투 엔드 trace를 설정하는 방법을 설명합니다. 엔드 투 엔드 trace를 선택하려면 먼저 클라이언트 측 trace를 설정해야 합니다. 자세한 내용은 Trace 컬렉션 개요를 참조하세요.
시작하기 전에
-
애플리케이션에서 사용하는 서비스 계정에 trace 수집을 설정하는 데 필요한 권한이 있는지 확인하려면 관리자에게 애플리케이션에서 사용하는 서비스 계정에 프로젝트에 대한 Cloud Trace 에이전트(
roles/cloudtrace.agent
) IAM 역할을 부여해 달라고 요청하세요.
클라이언트 측 trace 구성
클라이언트 측 trace를 구성하려면 trace를 내보내야 합니다. 수집기로 내보내거나 관측 가능성 백엔드로 trace를 직접 내보낼 수 있습니다. OpenTelemetry API를 사용하여 trace를 구성할 수 있습니다.
OpenTelemetry API를 사용하여 수집기로 trace 내보내기
OpenTelemetry API를 사용하여 수집기로 trace를 내보내려면 OpenTelemetry SDK 및 OLTP 내보내기 도구를 구성합니다.
다음 코드를 사용하여 애플리케이션에 필요한 종속 항목을 추가합니다.
자바
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0
OpenTelemetry 객체를 구성하고 trace를 사용 설정합니다.
자바
Go
OpenTelemetry API를 사용하여 관측 가능성 백엔드로 직접 내보내기
Cloud Trace 또는 다른 관측 가능성 서비스 제공업체 백엔드로 trace 스팬을 직접 내보내도록 Spanner 클라이언트 라이브러리를 구성하려면 다음 단계를 따르세요.
다음 코드를 사용하여 애플리케이션에 필요한 종속 항목을 추가합니다.
자바
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-spanner</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-api</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-common</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-sdk-trace</artifactId> </dependency> <dependency> <groupId>com.google.cloud.opentelemetry</groupId> <artifactId>exporter-trace</artifactId> <version>0.30.0</version> </dependency>
Go
go.opentelemetry.io/otel v1.28.0 go.opentelemetry.io/otel/sdk v1.28.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.24.1
OpenTelemetry 객체를 구성하고 trace를 사용 설정합니다.
자바
Go
엔드 투 엔드 trace 구성
이 섹션에서는 Spanner 클라이언트 라이브러리에서 엔드 투 엔드 trace(미리보기)를 구성하는 방법을 안내합니다.
다음 코드를 사용하여 애플리케이션에 필요한 종속 항목을 추가합니다.
자바
기존 클라이언트 측 trace 종속 항목은 엔드 투 엔드 trace를 구성하는 데 충분합니다. 추가 종속 항목은 필요하지 않습니다.
Go
클라이언트 측 trace에 필요한 종속 항목 외에도 다음 종속 항목도 필요합니다.
go.opentelemetry.io/otel/propagation v1.28.0
엔드 투 엔드 trace를 선택합니다.
자바
SpannerOptions options = SpannerOptions.newBuilder() .setOpenTelemetry(openTelemetry) .setEnableEndToEndTracing(/* enableEndtoEndTracing= */ true) .build();
Go
클라이언트 구성에서
EnableEndToEndTracing
옵션을 사용하여 선택합니다.client, _ := spanner.NewClientWithConfig(ctx, "projects/test-project/instances/test-instance/databases/test-db", spanner.ClientConfig{ SessionPoolConfig: spanner.DefaultSessionPoolConfig, EnableEndToEndTracing: true, }, clientOptions...)
OpenTelemetry에서 trace 컨텍스트 전파를 설정합니다.
자바
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider(sdkTracerProvider) .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())) .buildAndRegisterGlobal();
Go
// Register the TraceContext propagator globally. otel.SetTextMapPropagator(propagation.TraceContext{})
엔드 투 엔드 trace 속성
엔드 투 엔드 trace에는 다음 정보가 포함될 수 있습니다.
속성 이름 | 설명 |
---|---|
service.name | 속성 값은 항상 spanner_api_frontend 입니다. |
cloud.region | 애플리케이션 요청을 처리하는 Spanner API 프런트엔드의 Google Cloud 리전입니다. |
gcp.spanner.query.fingerprint | 속성 값은 쿼리 지문입니다. 이 쿼리를 추가로 디버그하려면 쿼리 통계 표에서 TEXT_FINGERPRINT 열을 참조하세요. |
gcp.spanner.participants.count | 트랜잭션과 관련된 참여자 수입니다. 자세한 내용은 Spanner 읽기 및 쓰기 수명을 참조하세요. |
샘플 trace
엔드 투 엔드 trace를 사용하면 다음 세부정보를 확인할 수 있습니다.
- 애플리케이션과 Spanner 간의 지연 시간입니다. 네트워크 지연 시간을 계산하여 네트워크 문제가 있는지 확인할 수 있습니다.
- 애플리케이션 요청이 처리되는 Spanner API 프런트엔드 클라우드 리전입니다. 이를 사용하여 애플리케이션과 Spanner 간의 리전 간 호출을 확인할 수 있습니다.
다음 예시에서 애플리케이션 요청은 us-west1
리전의 Spanner API 프런트엔드에서 처리되고 있으며 네트워크 지연 시간은 8.542밀리초(55.47밀리초 - 46.928밀리초)입니다.
다음 단계
- OpenTelemetry에 대한 자세한 내용은 OpenTelemetry 문서 참고하기