

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 追蹤和指標
<a name="configure-observability"></a>

 經過 適用於 Go 的 AWS SDK 檢測，可記錄 SDK 操作的追蹤範圍和用戶端指標。根據預設，用戶端會針對追蹤和指標使用無操作實作，這表示除非您設定提供者，否則不會收集任何資料。

 服務用戶端有兩個可觀測性的組態選項：
+  [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`。開發套件提供轉接器模組，可將具體的 OTel 開發套件實作連接到開發套件的提供者界面。

## 追蹤
<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 操作使用跨階層進行檢測，涵蓋操作生命週期的高階元件，例如請求序列化、簽署和重試迴圈。

## 指標
<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 | 直方圖 | 整體通話持續時間，包括重試次數以及傳送或接收請求和回應內文的時間。 | 
| client.call.attempts | \$1attempt\$1 | MonotonicCounter | 個別操作的嘗試次數。 | 
| client.call.errors | \$1error\$1 | MonotonicCounter | 操作的錯誤數目。 | 
| client.call.attempt\$1duration | s | 直方圖 | 連線到服務、傳送請求，以及取回 HTTP 狀態碼和標頭 （包括排入佇列等待傳送的時間） 的時間。 | 
| client.call.resolve\$1endpoint\$1duration | s | 直方圖 | 為請求解析端點 （端點解析程式，而非 DNS) 的時間。 | 
| client.call.deserialization\$1duration | s | 直方圖 | 還原序列化訊息內文的時間。 | 
| client.call.auth.signing\$1duration | s | 直方圖 | 簽署請求的時間。 | 
| client.call.auth.resolve\$1identity\$1duration | s | 直方圖 | 從身分提供者取得身分 (AWS 憑證、承載字符等） 的時間。 | 

 適用時，每個指標都會包含下列屬性 （維度）：
+ `rpc.service` – 服務名稱。
+ `rpc.method` – 操作名稱。
+ `exception.type` – 錯誤類型 （隨附於 `client.call.errors`)。
+ `auth.scheme_id` – 身分驗證機制 （包含在身分驗證相關指標中）。

### HTTP 用戶端指標
<a name="http-client-metrics"></a>

 軟體開發套件的 HTTP 用戶端會收集與基礎 HTTP 連線生命週期相關的下列其他指標：


| 指標名稱 | 單位 | Type | 說明 | 
| --- | --- | --- | --- | 
| client.http.connections.acquire\$1duration | s | 直方圖 | 請求取得連線所需的時間。 | 
| client.http.connections.dns\$1lookup\$1duration | s | 直方圖 | 執行 DNS 查詢所需的時間。 | 
| client.http.connections.tls\$1handshake\$1duration | s | 直方圖 | 執行 TLS 交握所需的時間。 | 
| client.http.connections.usage | \$1connection\$1 | UpDownCounter | 集區中連線的目前狀態。使用值為 idle或 的state維度acquired。 | 
| client.http.do\$1request\$1duration | s | 直方圖 | 執行 HTTP 請求所花費的總時間。 | 
| client.http.time\$1to\$1first\$1byte | s | 直方圖 | 從傳送請求到接收第一個回應位元組的時間。 | 