

 AWS SDK for .NET V3 がメンテナンスモードになりました。

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) に移行することをお勧めします。移行方法の詳細と情報については、[メンテナンスモードのお知らせ](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# オブザーバビリティ
<a name="observability"></a>

オブザーバビリティとは、システムが出力するデータから、そのシステムの現在の状態をどの程度推測できるかという指標のことです。出力されるデータは、一般的にテレメトリと呼ばれます。

は、2 つの一般的なテレメトリシグナル、メトリクスとトレース、およびログ記録を提供 AWS SDK for .NET できます。[TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TTelemetryProvider.html) をワイヤアップして、テレメトリデータをオブザーバビリティバックエンド ([AWS X-Ray](https://docs.aws.amazon.com/xray/?icmpid=docs_homepage_devtools) や [Amazon CloudWatch](https://docs.aws.amazon.com/cloudwatch/?icmpid=docs_homepage_mgmtgov) など) に送信し、それに対応できます。

デフォルトでは、テレメトリ信号は SDK で無効になっています。このトピックでは、テレメトリ出力を有効にして設定する方法について説明します。

## その他のリソース
<a name="observability-resources"></a>

オブザーバビリティの有効化と使用の詳細については、以下のリソースを参照してください。
+ [OpenTelemetry](https://opentelemetry.io/)
+ ブログ記事[OpenTelemetry AWS SDK for .NET を使用した のオブザーバビリティの強化](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/)」。
+ このブログ記事では[、 AWS .NET OpenTelemetry ライブラリの一般提供を発表しています](https://aws.amazon.com/blogs/dotnet/announcing-the-general-availability-of-aws-net-opentelemetry-libraries/)。
+ [OpenTelemetry のエクスポーター](https://opentelemetry.io/docs/languages/net/exporters/)
+ のオブザーバビリティの例については AWS Tools for PowerShell、[「Tools for PowerShell ユーザーガイド](https://docs.aws.amazon.com/powershell/latest/userguide/)」の[「オブザーバビリティ](https://docs.aws.amazon.com/powershell/latest/userguide/observability.html)」を参照してください。

## `TelemetryProvider` の設定
<a name="observability-conf-telemetry-provider"></a>

次の例に示すように、すべてのサービスクライアントまたは個々のクライアントについて、アプリケーションで `TelemetryProvider` をグローバルに設定できます。[テレメトリプロバイダー](observability-telemetry-providers.md) セクションには、SDK で提供される実装に関する情報など、テレメトリの実装に関する情報が含まれています。

### デフォルトのグローバルテレメトリプロバイダーを設定する
<a name="observability-conf-telemetry-provider-global"></a>

デフォルトでは、すべてのサービスクライアントはグローバルに利用可能なテレメトリプロバイダーの使用を試みます。これにより、プロバイダーを 1 回設定でき、すべてのクライアントがそれを使用します。これは、サービスクライアントを作成する前に 1 回だけ行う必要があります。

次のコードスニペットは、グローバルテレメトリプロバイダーを設定する方法を示しています。次に、Amazon S3 サービスクライアントを作成し、オペレーションの実行を試みますが、失敗します。このコードは、トレースとメトリクスの両方をアプリケーションに追加します。このコードは、`OpenTelemetry.Exporter.Console` および `OpenTelemetry.Instrumentation.AWS` の NuGet パッケージを使用します。

**注記**  
認証 AWS IAM アイデンティティセンター に を使用している場合は、必ず `AWSSDK.SSO`と も追加してください`AWSSDK.SSOOIDC`。

```
using Amazon.S3;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;

Sdk.CreateTracerProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation()
    .AddConsoleExporter()
    .Build();

Sdk.CreateMeterProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation()
    .AddConsoleExporter()
    .Build();

var s3Client = new AmazonS3Client();

try
{
    var listBucketsResponse = await s3Client.ListBucketsAsync();
    // Attempt to delete a bucket that doesn't exist.
    var deleteBucketResponse = await s3Client.DeleteBucketAsync("amzn-s3-demo-bucket");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Console.Read();
```

### 特定のサービスクライアントのテレメトリプロバイダーを設定する
<a name="observability-conf-telemetry-provider-client"></a>

個々のサービスクライアントは、特定のテレメトリプロバイダー (グローバルプロバイダーを除く) で設定できます。これを行うには、サービスクライアントコンストラクタの Config オブジェクトの `TelemetryProvider` クラスを使用します。例えば、[AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) を参照して、`TelemetryProvider` プロパティを探します。カスタムテレメトリの実装については、「[テレメトリプロバイダー](observability-telemetry-providers.md)」を参照してください。

**Topics**
+ [その他のリソース](#observability-resources)
+ [`TelemetryProvider` の設定](#observability-conf-telemetry-provider)
+ [メトリクス](observability-metrics.md)
+ [テレメトリプロバイダー](observability-telemetry-providers.md)

# メトリクス
<a name="observability-metrics"></a>

次の表に、SDK が出力するテレメトリメトリクスを示します。[テレメトリプロバイダーを設定して](observability.md#observability-conf-telemetry-provider)、メトリクスを観測可能にします。


**どのようなメトリクスが出力されますか?**  

| メトリクス名 | 単位 | タイプ | 属性 | 説明 | 
| --- | --- | --- | --- | --- | 
| client.call.duration | s | ヒストグラム | rpc.service、rpc.method | 全体的な通話時間 (再試行とリクエストとレスポンス本文の送受信時間を含む) | 
| client.uptime | s | ヒストグラム | rpc.service | クライアントが作成されてからの時間 | 
| client.call.attempts | \$1attempt\$1 | MonotonicCounter | rpc.service、rpc.method | 個々のオペレーションの試行回数 | 
| client.call.errors | \$1error\$1 | MonotonicCounter | rpc.service、rpc.method、 exception.type | オペレーションのエラーの数 | 
| client.call.attempt\$1duration | s | ヒストグラム | rpc.service、rpc.method | サービスへの接続、リクエストの送信、HTTP ステータスコードとヘッダーの取得にかかる時間 (キューに入れられた送信待機時間を含む) | 
| client.call.resolve\$1endpoint\$1duration | s | ヒストグラム | rpc.service、rpc.method | リクエストのエンドポイント (DNS ではなくエンドポイントリゾルバー) の解決にかかる時間 | 
| client.call.serialization\$1duration | s | ヒストグラム | rpc.service、rpc.method | メッセージ本文のシリアル化にかかる時間 | 
| client.call.deserialization\$1duration | s | ヒストグラム | rpc.service、rpc.method | メッセージ本文の逆シリアル化にかかる時間 | 
| client.call.auth.signing\$1duration | s | ヒストグラム | rpc.service、rpc.method | リクエストへの署名にかかる時間 | 
| client.call.auth.resolve\$1identity\$1duration | s | ヒストグラム | rpc.service、rpc.method | ID プロバイダーから ID (AWS認証情報やベアラートークンなど) の取得にかかる時間 | 
| client.http.bytes\$1sent | 方法 | MonotonicCounter | server.address | HTTP クライアントによって送信された総バイト数 | 
| client.http.bytes\$1received | 方法 | MonotonicCounter | server.address | HTTP クライアントによって受信された合計バイト数 | 

以下に示しているのは列の説明です。
+ **メトリクス名** – 発行されたメトリクスの名前。
+ **単位** – メトリクスの測定単位。単位は、[UCUM](https://unitsofmeasure.org/ucum) の大文字と小文字を区別する (「c/s」) 表記で指定されます。
+ **タイプ** – メトリクスのキャプチャに使用される計測器のタイプ。
+ **属性** – メトリクスで出力される属性 (ディメンション) のセット。
+ **説明** – メトリクスが測定している対象の説明。

# テレメトリプロバイダー
<a name="observability-telemetry-providers"></a>

SDK は、[OpenTelemetry](https://opentelemetry.io/) の実装をテレメトリプロバイダーとして提供します。これについては、[次のセクション](observability-telemetry-providers-otel.md)で説明します。

特定のテレメトリ要件があり、テレメトリソリューションがすでに考慮されている場合、またはテレメトリデータのキャプチャと処理の方法をきめ細かく制御する必要がある場合は、独自のテレメトリプロバイダーを実装することもできます。

[TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TTelemetryProvider.html) クラスに独自の実装を登録します。以下は、独自の `TracerProvider` と `MeterProvider` を登録する方法の簡単な例です。

```
using Amazon;
using Amazon.Runtime.Telemetry;
using Amazon.Runtime.Telemetry.Metrics;
using Amazon.Runtime.Telemetry.Tracing;

public class CustomTracerProvider : TracerProvider
{
    // Implement custom tracing logic here
}
public class CustomMeterProvider : MeterProvider
{
    // Implement custom metrics logic here
}

// Register custom implementations
AWSConfigs.TelemetryProvider.RegisterTracerProvider(new CustomTracerProvider());
AWSConfigs.TelemetryProvider.RegisterMeterProvider(new CustomMeterProvider());
```

**Topics**
+ [OpenTelemetry](observability-telemetry-providers-otel.md)

# OpenTelemetry ベースのテレメトリプロバイダーを設定する
<a name="observability-telemetry-providers-otel"></a>

には、OpenTelemetry ベースのテレメトリプロバイダーの実装 AWS SDK for .NET が含まれています。このプロバイダーをグローバルテレメトリプロバイダーとして設定する方法の詳細については、「[`TelemetryProvider` の設定](observability.md#observability-conf-telemetry-provider)」を参照してください。このテレメトリプロバイダーを使用するには、プロジェクトに次のリソースが必要です。
+ [OpenTelemetry.Instrumentation.AWS](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.AWS) NuGet パッケージ。
+ OTLP やコンソールなどのテレメトリエクスポーター。詳細については、OpenTelemetry ドキュメントの「[エクスポーター](https://opentelemetry.io/docs/languages/net/exporters/)」を参照してください。

SDK に含まれる OpenTelemetry 実装は、HTTPS リクエスト、認証情報、および圧縮のトレース量を減らすように設定できます。これを行うには、次のように、`SuppressDownstreamInstrumentation` オプションを `true` に設定します。

```
Sdk.CreateTracerProviderBuilder()
    .ConfigureResource(e => e.AddService("DemoOtel"))
    .AddAWSInstrumentation(options => options.SuppressDownstreamInstrumentation = true)
    .AddConsoleExporter()
    .Build();
```

このプロバイダーの詳細については、[OpenTelemetry AWS SDK for .NET を使用した のブログ記事「Enhancing Observability](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/)」を参照してください。