

¡Se AWS SDK para .NET ha publicado la versión 4 (V4) del\$1

Para obtener información sobre los cambios más importantes y la migración de sus aplicaciones, consulte el [tema sobre migración](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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/v4/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/v4/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 emite el SDK. [Configura 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 | 
| --- | --- | --- | --- | --- | 
| duración de la llamada del cliente | s | Histograma | rpc.service, rpc.método | 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) | 
| tiempo de actividad del cliente | s | Histograma | rpc.service | El tiempo transcurrido desde que se creó un cliente | 
| client.call.attempts | \$1intento\$1 | MonotonicCounter | rpc.service, rpc.método | El número de intentos de una operación individual | 
| client.call.errors | \$1error\$1 | MonotonicCounter | rpc.service, rpc.método, exception.type | El número de errores de una operación | 
| client.call.attempt t\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en conectarse al servicio, enviar la solicitud y recuperar los encabezados y el código de estado HTTP (incluido el tiempo de espera para ser enviado) | 
| client.call.resolve\$1endpoint\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en resolver un punto final (el solucionador de puntos finales, no el DNS) de la solicitud | 
| client.call.serialization\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en serializar el cuerpo de un mensaje | 
| client.call.deserialization\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en deserializar el cuerpo de un mensaje | 
| client.call.auth.signing\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en firmar una solicitud | 
| client.call.auth.resolve\$1identity\$1duration | s | Histograma | rpc.service, rpc.método | El tiempo que se tarda en adquirir una identidad (por ejemplo, AWS credenciales o un token portador) de un proveedor de identidades | 
| client.http.bytes\$1sent | Mediante | MonotonicCounter | dirección del servidor | El número total de bytes enviados por el cliente HTTP | 
| client.http.bytes\$1received | Mediante | MonotonicCounter | dirección del servidor | El número total de bytes recibidos por el cliente HTTP | 

A continuación se muestran las descripciones de las columnas:
+ **Nombre de la métrica**: el nombre de la métrica emitida.
+ **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 («c/s»).
+ **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 [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 de telemetría específicos, ya tiene en mente una solución de telemetría o necesita un control detallado sobre la forma en que se capturan y procesan los datos de telemetría, también puede implementar su propio proveedor de telemetría.

Registre [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TTelemetryProvider.html)su propia implementación en la clase. El siguiente es un ejemplo sencillo de cómo registrar su propia `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