Skip to main content

Open Telemetry Configuração | Observabilidade | CSharp

  • Open Telemetry Configuração | Observabilidade | CSharp

    var serviceName = builder.Configuration["OpenTelemetry:ServiceName"] ?? "OrangeFinanceApi";

var resourceBuilder = ResourceBuilder.CreateDefault().AddService(serviceName);

builder.Logging.AddOpenTelemetry(x =>
{
x.IncludeScopes = true;
x.IncludeFormattedMessage = true;
});

builder.Services.AddOpenTelemetry()
.WithMetrics(opts =>
{
opts.AddMeter("Microsoft.AspNetCore.Hosting")
.AddMeter("Microsoft.AspNetCore.Server.Kestrel")
.AddMeter("Microsoft.AspNetCore.Http.Connections")
.AddMeter("Microsoft.AspNetCore.Routing")
.AddMeter("Microsoft.AspNetCore.Diagnostics")
.AddMeter("Microsoft.AspNetCore.RateLimiting")
.AddRuntimeInstrumentation()
.SetResourceBuilder(resourceBuilder)
.AddMeter(serviceName);
})
.WithTracing(opts =>
{
opts.SetResourceBuilder(resourceBuilder)
.AddAspNetCoreInstrumentation(options =>
{
options.Filter = httpContext => true;
options.EnrichWithHttpRequest = (activity, httpRequest) =>
{
foreach (var (key, value) in httpRequest.Query)
{
activity.SetTag($"http.request.query.{key}", value.ToString());
}

if (httpRequest.Headers.TryGetValue("User-Agent", out var userAgent))
{
activity.SetTag("http.request.header.user_agent", userAgent.ToString());
}

if (httpRequest.Headers.TryGetValue("Custom-Header", out var customHeader))
{
activity.SetTag("http.request.header.custom_header", customHeader.ToString());
}
};
}
)
.AddHttpClientInstrumentation()
.AddOtlpExporter(opts =>
{
opts.Endpoint = new Uri("http://localhost:4317");
});
});

}

WithMetrics e With Tracing

No OpenTelemetry para .NET, os métodos WithMetrics e WithTracing são usados para configurar e habilitar a coleta de métricas e rastreamento (tracing) em uma aplicação. Vamos detalhar cada um deles:

1. WithMetrics

O WithMetrics configura o sistema de métricas do OpenTelemetry, que é responsável por coletar, processar e exportar dados quantitativos sobre a aplicação, como contadores, medidores e observações.

Principais Funcionalidades de WithMetrics

  • Adicionar Instrumentações de Métricas: Permite registrar "meters" ou instrumentos específicos (contadores, medidores, etc.) para coletar métricas de várias partes da aplicação.

    .WithMetrics(opts => opts.AddMeter("MyApp.Metrics"))
  • Instrumentação de Runtime: Coleta métricas automáticas do runtime do .NET (como uso de memória e coleta de lixo) ao adicionar .AddRuntimeInstrumentation().

  • Instrumentação ASP.NET Core: Coleta automaticamente métricas de desempenho relacionadas ao ASP.NET Core, como o tempo de resposta e o número de requisições, com .AddAspNetCoreInstrumentation().

  • Exportação de Métricas: Permite configurar o exportador de métricas, que define para onde as métricas serão enviadas (por exemplo, para o Prometheus ou OTLP).

Exemplo de Uso de WithMetrics

builder.Services.AddOpenTelemetry()
.WithMetrics(opts =>
{
opts.AddMeter("MyApp.Metrics")
.AddAspNetCoreInstrumentation()
.AddRuntimeInstrumentation()
.AddPrometheusExporter(); // Exemplo de exportador para Prometheus
});

Quando Usar WithMetrics

Use WithMetrics quando você precisa monitorar o desempenho e a saúde da sua aplicação de maneira quantitativa, como:

  • Medir a latência e o tempo de resposta de requisições HTTP.
  • Monitorar o consumo de recursos, como uso de CPU e memória.
  • Acompanhar contadores de eventos, como o número de requisições recebidas.

2. WithTracing

O WithTracing configura o sistema de rastreamento (tracing) do OpenTelemetry, que é responsável por coletar informações detalhadas sobre o fluxo de execução na aplicação, útil para identificar gargalos, falhas e compreender como as requisições se propagam pela aplicação.

Principais Funcionalidades de WithTracing

  • Adicionar Instrumentações de Rastreamento: Configura a coleta automática de rastreamentos de várias partes da aplicação, como:

    • .AddAspNetCoreInstrumentation() para rastrear requisições no ASP.NET Core.
    • .AddHttpClientInstrumentation() para rastrear chamadas feitas por HttpClient.
  • Configuração de Recursos: Define informações do serviço (nome, versão, etc.) usando .SetResourceBuilder() para que o rastreamento possa identificar a origem dos dados.

  • Exportação de Rastreios: Define o exportador de rastreamento, como o OTLP, para enviar os dados para um sistema de observabilidade (como Jaeger, Zipkin ou outro sistema compatível com OpenTelemetry).

Exemplo de Uso de WithTracing

builder.Services.AddOpenTelemetry()
.WithTracing(opts =>
{
opts.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("MyApp"))
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter(opt => opt.Endpoint = new Uri("http://localhost:4317"));
});

Quando Usar WithTracing

Use WithTracing quando você quer:

  • Rastrear o fluxo de uma requisição através de diferentes partes da aplicação.
  • Identificar onde a aplicação está gastando mais tempo e quais operações estão sendo executadas.
  • Diagnosticar problemas de desempenho em chamadas de rede, chamadas de API e tempo de resposta entre serviços.

Resumo das Diferenças

ConfiguraçãoWithMetricsWithTracing
ColetaDados quantitativos de desempenhoDados detalhados sobre o fluxo de execução
InstrumentaçãoMeters para métricas de sistema e desempenhoSpans para rastreamento de operações
ObjetivoMonitorar a saúde e o uso de recursosDiagnosticar falhas e entender a propagação de requisições
ExportadoresPrometheus, OTLP (para métricas)OTLP, Jaeger, Zipkin (para rastreamento)

Essas configurações ajudam a capturar tanto o desempenho (métricas) quanto a propagação de requisições e operações (rastreamento), oferecendo uma visão completa da aplicação.