

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 추적 및 지표
<a name="configure-observability"></a>

 AWS SDK for Go 는 SDK 작업에 대한 추적 범위 및 클라이언트 측 지표를 기록하기 위해 계측됩니다. 기본적으로 클라이언트는 추적 및 지표 모두에 대해 no-op 구현을 사용합니다. 즉, 공급자를 구성하지 않는 한 데이터가 수집되지 않습니다.

 서비스 클라이언트에는 관찰성을 위한 두 가지 구성 옵션이 있습니다.
+  [TracerProvider](https://pkg.go.dev/github.com/aws/smithy-go/tracing#TracerProvider) - 추적기를 생성하고 클라이언트 추적 범위를 기록하기 위한 진입점입니다.
+  [MeterProvider](https://pkg.go.dev/github.com/aws/smithy-go/metrics#MeterProvider) - 미터를 생성하고 클라이언트 측 지표를 기록하기 위한 진입점입니다.

 OpenTelemetry(OTel) 사양에서 영감을 받았지만 이러한 APIs는에서 독립적으로 정의됩니다`smithy-go`. SDK는 구체적인 OTel SDK 구현을 SDK의 공급자 인터페이스에 연결하는 어댑터 모듈을 제공합니다.

## 추적
<a name="configure-tracing"></a>

 [smithyoteltracing](https://pkg.go.dev/github.com/aws/smithy-go/tracing/smithyoteltracing) 어댑터 모듈을 사용하여 OTel을 서비스 클라이언트`trace.TracerProvider`에 연결합니다.

 다음 예제에서는 Amazon S3 클라이언트에 대한 추적을 구성하는 방법을 보여줍니다.

```
import (
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/smithy-go/tracing/smithyoteltracing"
    "go.opentelemetry.io/otel/trace"
)

// provider is an OTel trace.TracerProvider that you have configured.
var provider trace.TracerProvider

svc := s3.NewFromConfig(cfg, func(o *s3.Options) {
    o.TracerProvider = smithyoteltracing.Adapt(provider)
})
```

 SDK 작업은 요청 직렬화, 서명 및 재시도 루프와 같은 작업 수명 주기의 상위 수준 구성 요소를 포함하는 스팬 계층 구조로 계측됩니다.

## Metrics
<a name="configure-metrics"></a>

 [smithyotelmetrics](https://pkg.go.dev/github.com/aws/smithy-go/metrics/smithyotelmetrics) 어댑터 모듈을 사용하여 OTel을 서비스 클라이언트`metric.MeterProvider`에 연결합니다.

 다음 예제에서는 Amazon S3 클라이언트에 대한 지표를 구성하는 방법을 보여줍니다.

```
import (
    "github.com/aws/aws-sdk-go-v2/service/s3"
    "github.com/aws/smithy-go/metrics/smithyotelmetrics"
    "go.opentelemetry.io/otel/metric"
)

// provider is an OTel metric.MeterProvider that you have configured.
var provider metric.MeterProvider

svc := s3.NewFromConfig(cfg, func(o *s3.Options) {
    o.MeterProvider = smithyotelmetrics.Adapt(provider)
})
```

### 지원되는 지표
<a name="supported-metrics"></a>

 SDK 클라이언트는 다음 지표를 수집합니다.


| 지표 이름 | 단위 | Type | 설명 | 
| --- | --- | --- | --- | 
| client.call.duration | s | 히스토그램(Histogram) | 재시도, 요청 및 응답 본문을 보내거나 받는 데 걸리는 시간을 포함한 전체 통화 기간입니다. | 
| client.call.attempts | \$1attempt\$1 | MonotonicCounter | 개별 작업에 대한 시도 횟수입니다. | 
| client.call.errors | \$1error\$1 | MonotonicCounter | 작업의 오류 수입니다. | 
| client.call.attempt\$1duration | s | 히스토그램(Histogram) | 서비스에 연결하고, 요청을 보내고, HTTP 상태 코드와 헤더(전송 대기 시간 포함)를 다시 가져오는 시간입니다. | 
| client.call.resolve\$1endpoint\$1duration | s | 히스토그램(Histogram) | 요청에 대한 엔드포인트(DNS가 아닌 엔드포인트 해석기)를 해결하는 시간입니다. | 
| client.call.deserialization\$1duration | s | 히스토그램(Histogram) | 메시지 본문을 역직렬화하는 시간입니다. | 
| client.call.auth.signing\$1duration | s | 히스토그램(Histogram) | 요청에 서명하는 시간입니다. | 
| client.call.auth.resolve\$1identity\$1duration | s | 히스토그램(Histogram) | 자격 증명 공급자로부터 자격 증명(AWS 자격 증명, 보유자 토큰 등)을 획득하는 시간입니다. | 

 해당하는 경우 다음 속성(차원)이 각 지표에 포함됩니다.
+ `rpc.service` - 서비스 이름입니다.
+ `rpc.method` - 작업 이름입니다.
+ `exception.type` - 오류 유형(에 포함됨`client.call.errors`).
+ `auth.scheme_id` - 인증 체계(인증 관련 지표에 포함됨).

### HTTP 클라이언트 지표
<a name="http-client-metrics"></a>

 SDK의 HTTP 클라이언트는 기본 HTTP 연결 수명 주기와 관련된 다음과 같은 추가 지표를 수집합니다.


| 지표 이름 | 단위 | Type | 설명 | 
| --- | --- | --- | --- | 
| client.http.connections.acquire\$1duration | s | 히스토그램(Histogram) | 요청을 통해 연결을 획득하는 데 걸리는 시간입니다. | 
| client.http.connections.dns\$1lookup\$1duration | s | 히스토그램(Histogram) | DNS 조회를 수행하는 데 걸리는 시간입니다. | 
| client.http.connections.tls\$1handshake\$1duration | s | 히스토그램(Histogram) | TLS 핸드셰이크를 수행하는 데 걸리는 시간입니다. | 
| client.http.connections.usage | \$1연결\$1 | UpDownCounter | 풀의 현재 연결 상태입니다. 값이 idle 또는 인 state차원을 사용합니다acquired. | 
| client.http.do\$1request\$1duration | s | 히스토그램(Histogram) | HTTP 요청을 수행하는 데 소요된 총 시간입니다. | 
| client.http.time\$1to\$1first\$1byte | s | 히스토그램(Histogram) | 요청 전송부터 첫 번째 응답 바이트 수신까지의 시간입니다. | 