

A versão 4 (V4) do AWS SDK para .NET foi lançada\$1

Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o [tópico de migração](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)

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

Observabilidade é a medida em que o estado atual de um sistema pode ser identificado com base nos dados que ele emite. Os dados emitidos são chamados, com frequência, de telemetria.

Eles AWS SDK para .NET podem fornecer dois sinais, métricas e rastreamentos de telemetria comuns, além de registros. Você pode conectar um [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TTelemetryProvider.html)para enviar dados de telemetria para um back-end de observabilidade (como a [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)) e, em seguida, agir de acordo com eles.

Por padrão, os sinais de telemetria permanecem desabilitados no SDK. Este tópico explica como habilitar e configurar a saída de telemetria.

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

Para acessar mais informações sobre como habilitar e usar a observabilidade, consulte os seguintes recursos:
+ [OpenTelemetry](https://opentelemetry.io/)
+ A postagem do 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
+ A postagem do blog [anunciando a disponibilidade geral das 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 exemplos de observabilidade no Ferramentas da AWS para PowerShell, consulte [Observabilidade no Guia de](https://docs.aws.amazon.com/powershell/latest/userguide/observability.html) [Ferramentas do PowerShell Usuário](https://docs.aws.amazon.com/powershell/latest/userguide/).

## Configurar um `TelemetryProvider`
<a name="observability-conf-telemetry-provider"></a>

Você pode configurar um `TelemetryProvider` em sua aplicação globalmente para todos os clientes de serviço ou para clientes individuais, conforme mostrado nos exemplos a seguir. A seção [Provedores de telemetria](observability-telemetry-providers.md) contém informações sobre implementações de telemetria, incluindo informações sobre implementações fornecidas com o SDK.

### Configurar o provedor de telemetria global padrão
<a name="observability-conf-telemetry-provider-global"></a>

Por padrão, todo cliente de serviço tenta usar o provedor de telemetria disponível globalmente. Dessa forma, é possível definir o provedor uma vez e todos os clientes o usarão. Isso deve ser feito apenas uma vez, antes de criar qualquer cliente de serviço.

O trecho de código a seguir mostra como definir o provedor de telemetria global. Depois, ele cria um cliente de serviço Amazon S3 e tenta realizar uma operação que falha. O código adiciona rastreamento e métricas à aplicação. Esse código usa os seguintes NuGet pacotes: `OpenTelemetry.Exporter.Console` `OpenTelemetry.Instrumentation.AWS` e.

**nota**  
Se você estiver usando Centro de Identidade do AWS IAM para autenticação, não se esqueça de também adicionar `AWSSDK.SSO` `AWSSDK.SSOOIDC` e.

```
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();
```

### Configurar um provedor de telemetria para um cliente de serviço específico
<a name="observability-conf-telemetry-provider-client"></a>

É possível configurar um cliente de serviço individual com um provedor de telemetria específico (diferente do global). Para isso, use a classe `TelemetryProvider` do objeto Config de um construtor de cliente de serviço. Por exemplo, consulte [AmazonS3Config](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/S3/TS3Config.html) e procure a propriedade `TelemetryProvider`. Consulte [Provedores de telemetria](observability-telemetry-providers.md) para acessar informações sobre implementações personalizadas de telemetria.

**Topics**
+ [Recursos adicionais do](#observability-resources)
+ [Configurar um `TelemetryProvider`](#observability-conf-telemetry-provider)
+ [Métricas](observability-metrics.md)
+ [Provedores de telemetria](observability-telemetry-providers.md)

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

A tabela a seguir lista as métricas de telemetria que o SDK emite. [Configure um provedor de telemetria](observability.md#observability-conf-telemetry-provider) para tornar as métricas observáveis.


**Quais métricas são emitidas?**  

| Nome da métrica | Unidades | Tipo | Atributos | Descrição | 
| --- | --- | --- | --- | --- | 
| client.call.duration | s | Histograma | rpc.service, rpc.method | Duração geral da chamada (incluindo novas tentativas e tempo para enviar ou receber a solicitação e o corpo da resposta) | 
| client.uptime | s | Histograma | rpc.service | A quantidade de tempo desde que um cliente foi criado | 
| client.call.attempts | \$1tentativa\$1 | MonotonicCounter | rpc.service, rpc.method | O número de tentativas para uma operação individual | 
| client.call.errors | \$1erro\$1 | MonotonicCounter | rpc.service, rpc.method, exceção.type | O número de erros de uma operação | 
| client.call.attempt duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para se conectar ao serviço, enviar a solicitação e recuperar o código de status e os cabeçalhos HTTP (incluindo o tempo de espera para envio) | 
| client.call.resolve\$1endpoint\$1duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para resolver um endpoint (resolvedor de endpoint, não DNS) para a solicitação | 
| client.call.serialization\$1duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para serializar o corpo da mensagem | 
| client.call.desserialization\$1duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para desserializar o corpo da mensagem | 
| client.call.auth.signing\$1duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para assinar uma solicitação | 
| client.call.auth.resolve\$1identity\$1duration | s | Histograma | rpc.service, rpc.method | O tempo necessário para adquirir uma identidade (como AWS credenciais ou um token de portador) de um provedor de identidade | 
| client.http.bytes\$1sent | Por | MonotonicCounter | endereço do servidor | O número total de bytes enviados pelo cliente HTTP | 
| client.http.bytes\$1recebido | Por | MonotonicCounter | endereço do servidor | O número total de bytes recebidos pelo cliente HTTP | 

A seguir estão as descrições das colunas:
+ **Nome da métrica** — O nome da métrica emitida.
+ **Unidades** — A unidade de medida da métrica. As unidades são fornecidas na notação [UCUM](https://unitsofmeasure.org/ucum) com distinção entre maiúsculas e minúsculas (“c/s”).
+ **Tipo** — O tipo de instrumento usado para capturar a métrica.
+ **Atributos** — O conjunto de atributos (dimensões) emitidos com a métrica.
+ **Descrição** — Uma descrição do que a métrica está medindo.

# Provedores de telemetria
<a name="observability-telemetry-providers"></a>

[O SDK fornece uma implementação de [OpenTelemetry](https://opentelemetry.io/)como provedor de telemetria, descrita na próxima seção.](observability-telemetry-providers-otel.md)

Se você tem requisitos específicos de telemetria, já tem uma solução de telemetria em mente ou precisa de um controle refinado sobre como os dados de telemetria são capturados e processados, você também pode implementar seu próprio provedor de telemetria.

Registre sua própria implementação com a [TelemetryProvider](https://docs.aws.amazon.com/sdkfornet/v4/apidocs/items/Runtime/TTelemetryProvider.html)turma. A seguir está um exemplo simples de como registrar seu próprio `TracerProvider` `MeterProvider` e.

```
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 o provedor OpenTelemetry de telemetria baseado
<a name="observability-telemetry-providers-otel"></a>

 AWS SDK para .NET Isso inclui a implementação de um provedor de telemetria OpenTelemetry baseado. Para acessar detalhes sobre como definir esse provedor como o provedor global de telemetria, consulte [Configurar um `TelemetryProvider`](observability.md#observability-conf-telemetry-provider). Para usar esse provedor de telemetria, você precisa dos seguintes recursos em seu projeto:
+ O pacote [OpenTelemetry NuGet .Instrumentation.aws](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.AWS).
+ Um exportador de telemetria, como OTLP ou Console. Para obter mais informações, consulte [Exportadores](https://opentelemetry.io/docs/languages/net/exporters/) na OpenTelemetry documentação.

A OpenTelemetry implementação incluída no SDK pode ser configurada para reduzir a quantidade de rastreamento de solicitações, credenciais e compactação HTTPS. Para fazer isso, defina a opção `SuppressDownstreamInstrumentation` como `true`, semelhante à seguinte:

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

Para obter informações adicionais sobre esse provedor, consulte a postagem do 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