

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 跟踪和指标
<a name="configure-observability"></a>

 用于记录 S 适用于 Go 的 AWS SDK DK 操作的跟踪跨度和客户端指标。默认情况下，客户端对跟踪和指标都使用无操作实现，这意味着除非您配置提供程序，否则不会收集任何数据。

 服务客户端有两个可观察性配置选项：
+  [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>

 使用 s [mithyoteltr](https://pkg.go.dev/github.com/aws/smithy-go/tracing/smithyoteltracing) acing 适配器模块将 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>

 使用 s [mithyotelmetrics](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>

 SDK 的 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 | \$1连接\$1 | UpDownCounter | 池中连接的当前状态。使用值为idle或的state维度acquired。 | 
| client.http.do\$1request\$1duration | s | 直方图 | 执行 HTTP 请求所花费的总时间。 | 
| client.http.time\$1to\$1first\$1byte | s | 直方图 | 从发送请求到收到第一个响应字节的时间。 | 