

La AWS SDK para .NET V3 ha entrado en modo de mantenimiento.

Le recomendamos que migre a la [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obtener información y detalles adicionales sobre cómo migrar, consulta nuestro [anuncio sobre el modo de mantenimiento](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Observabilidad
<a name="observability"></a>

La observabilidad es la medida en que se puede deducir el estado actual de un sistema a partir de los datos que emite. Los datos emitidos se denominan comúnmente “telemetría”.

 AWS SDK para .NET Pueden proporcionar dos señales telemétricas comunes, métricas y trazas, así como registros. Puedes configurar un cable [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TTelemetryProvider.html)para enviar datos de telemetría a un backend de observabilidad (como [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)) y luego actuar en consecuencia.

De forma predeterminada, las señales de telemetría están deshabilitadas en el SDK. En este tema se explica cómo habilitar y configurar la salida de telemetría.

## Recursos adicionales
<a name="observability-resources"></a>

Para obtener más información sobre la habilitación y el uso de la observabilidad, consulte los siguientes recursos:
+ [OpenTelemetry](https://opentelemetry.io/)
+ La entrada del blog [Enhancing Observability](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/) in the with. AWS SDK para .NET OpenTelemetry
+ La entrada del blog [que anuncia la disponibilidad general de las AWS OpenTelemetry bibliotecas.NET](https://aws.amazon.com/blogs/dotnet/announcing-the-general-availability-of-aws-net-opentelemetry-libraries/).
+ [Exportadores para OpenTelemetry](https://opentelemetry.io/docs/languages/net/exporters/)
+ Para ver ejemplos de observabilidad en el Herramientas de AWS para PowerShell, consulte [Observabilidad](https://docs.aws.amazon.com/powershell/latest/userguide/observability.html) en la Guía del [ PowerShell usuario de Tools for User](https://docs.aws.amazon.com/powershell/latest/userguide/).

## Configuración de un `TelemetryProvider`
<a name="observability-conf-telemetry-provider"></a>

Puede configurar un `TelemetryProvider` en su aplicación de forma global para todos los clientes del servicio o para clientes individuales, como se muestra en los siguientes ejemplos. La sección [Proveedores de telemetría](observability-telemetry-providers.md) contiene información sobre las implementaciones de telemetría, incluida información sobre las implementaciones que se proporcionan con el SDK.

### Configuración del proveedor de telemetría global predeterminado
<a name="observability-conf-telemetry-provider-global"></a>

De forma predeterminada, todos los clientes del servicio intentan utilizar el proveedor de telemetría disponible en todo el mundo. De esta forma, puede configurar el proveedor una vez y todos los clientes lo utilizarán. Esto debe hacerse solo una vez, antes de crear cualquier cliente de servicio.

En el siguiente fragmento de código se muestra cómo configurar el proveedor de telemetría global. A continuación, se crea un cliente de servicio de Amazon S3 y se intenta realizar una operación que no funciona. El código añade tanto el rastreo como las métricas a la aplicación. Este código usa los siguientes NuGet paquetes: `OpenTelemetry.Exporter.Console` y. `OpenTelemetry.Instrumentation.AWS`

**nota**  
Si lo utilizas AWS IAM Identity Center para la autenticación, asegúrate de añadir también `AWSSDK.SSO` y`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();
```

### Configuración de un proveedor de telemetría para un cliente de servicio específico
<a name="observability-conf-telemetry-provider-client"></a>

Puede configurar un cliente de servicio individual con un proveedor de telemetría específico (distinto del global). Para ello, utilice la clase `TelemetryProvider` del objeto Config del constructor de un cliente de servicio. Por ejemplo, consulte [AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) y busque la propiedad `TelemetryProvider`. Consulte [Proveedores de telemetría](observability-telemetry-providers.md) para obtener información sobre las implementaciones de telemetría personalizadas.

**Topics**
+ [Recursos adicionales](#observability-resources)
+ [Configuración de un `TelemetryProvider`](#observability-conf-telemetry-provider)
+ [Métricas](observability-metrics.md)
+ [Proveedores de telemetría](observability-telemetry-providers.md)

# Métricas
<a name="observability-metrics"></a>

En la siguiente tabla, se enumeran las métricas de telemetría que el SDK emite. [Configure un proveedor de telemetría](observability.md#observability-conf-telemetry-provider) para que las métricas sean observables.


**¿Qué métricas se emiten?**  

| Nombre de métrica | Unidades | Tipo | Atributos | Descripción | 
| --- | --- | --- | --- | --- | 
| client.call.duration | s | Histograma | rpc.service, rpc.method | Duración total de la llamada (incluidos los reintentos y el tiempo de envío o recepción de la solicitud y el cuerpo de la respuesta) | 
| client.uptime | s | Histograma | rpc.service | Tiempo transcurrido desde que se creó un cliente | 
| client.call.attempts | \$1attempt\$1 | MonotonicCounter | rpc.service, rpc.method | Número de intentos para una operación individual | 
| client.call.errors | \$1error\$1 | MonotonicCounter | rpc.service, rpc.method, exception.type | Número de errores de una operación | 
| client.call.attempt\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que tarda en conectarse al servicio, enviar la solicitud y recuperar el código de estado HTTP y los encabezados (incluido el tiempo en cola esperando para ser enviados) | 
| client.call.resolve\$1endpoint\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que se tarda en resolver un punto de conexión (el solucionador de puntos de conexión, no el DNS) de la solicitud | 
| client.call.serialization\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que se tarda en serializar el cuerpo de un mensaje | 
| client.call.deserialization\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que se tarda en deserializar el cuerpo de un mensaje | 
| client.call.auth.signing\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que lleva firmar la solicitud HTTP | 
| client.call.auth.resolve\$1identity\$1duration | s | Histograma | rpc.service, rpc.method | Tiempo que se tarda en adquirir una identidad (por ejemplo, las credenciales de AWS o un token portador) de un proveedor de identidades | 
| client.http.bytes\$1sent | Mediante | MonotonicCounter | server.address | Número total de bytes enviados por el cliente HTTP | 
| client.http.bytes\$1received | Mediante | MonotonicCounter | server.address | Número total de bytes recibidos por el cliente HTTP | 

A continuación, se muestran las descripciones de las columnas:
+ **Nombre de métrica**: el nombre de la métrica.
+ **Unidades**: la unidad de medida de la métrica. Las unidades se indican en la notación [UCUM](https://unitsofmeasure.org/ucum) que distingue entre mayúsculas y minúsculas.
+ **Tipo**: el tipo de instrumento utilizado para capturar la métrica.
+ **Atributos**: el conjunto de atributos (dimensiones) emitidos con la métrica.
+ **Descripción**: una descripción de lo que mide la métrica.

# Proveedores de telemetría
<a name="observability-telemetry-providers"></a>

El SDK proporciona una implementación de [OpenTelemetry](https://opentelemetry.io/) como proveedor de telemetría, que se describe en la [siguiente sección](observability-telemetry-providers-otel.md).

Si tiene requisitos específicos de telemetría, ya tiene en mente una solución de telemetría o necesita un control detallado sobre cómo se capturan y procesan los datos de telemetría, también puede implementar su propio proveedor de telemetría.

Registre su propia implementación de telemetría con la clase [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TTelemetryProvider.html). A continuación puede ver un sencillo ejemplo de cómo registrar su propio `TracerProvider` y `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)

# Configurar el proveedor de telemetría OpenTelemetry basado
<a name="observability-telemetry-providers-otel"></a>

 AWS SDK para .NET Incluye una implementación de un proveedor de OpenTelemetry telemetría basado. Para obtener más información sobre cómo configurar este proveedor como proveedor de telemetría global, consulte [Configuración de un `TelemetryProvider`](observability.md#observability-conf-telemetry-provider). Para utilizar este proveedor de telemetría, necesita los siguientes recursos en su proyecto:
+ El paquete [OpenTelemetry.Instrumentation.aws.](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.AWS) NuGet 
+ Un exportador de telemetría, como OTLP o Console. [Para obtener más información, consulte Exportadores en la documentación.](https://opentelemetry.io/docs/languages/net/exporters/) OpenTelemetry

La OpenTelemetry implementación incluida en el SDK se puede configurar para reducir la cantidad de seguimiento de las solicitudes, las credenciales y la compresión HTTPS. Para ello, defina la opción `SuppressDownstreamInstrumentation` en `true`, de forma similar a la siguiente:

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

Para obtener más información sobre este proveedor, consulta la entrada del blog [Enhancing Observability in the AWS SDK para .NET with](https://aws.amazon.com/blogs/developer/enhancing-observability-in-the-aws-sdk-for-net-with-opentelemetry/). OpenTelemetry