Monitoramento de aplicações C#: métricas e alertas do A ao Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que o monitoramento é crítico para aplicações C#

\n\n

No desenvolvimento moderno de software, escrever código é apenas metade do trabalho. Para que uma aplicação funcione de forma estável, rápida e previsível, é necessário um monitoramento constante. Para aplicações C# (.NET), frequentemente usadas em sistemas corporativos de alta carga, setor bancário, e-commerce e serviços em nuvem, o monitoramento se torna não apenas uma opção, mas um requisito obrigatório.

\n\n

Sem monitoramento, você trabalha no escuro: vazamentos de memória passam despercebidos até a queda do servidor, requisições lentas se acumulam e os usuários migram para a concorrência. Neste artigo, abordaremos o ciclo completo de configuração de observabilidade para aplicações C#: desde a coleta de métricas básicas até a configuração de alertas inteligentes em tempo real.

\n\n

1. Fundamentos do monitoramento: quais métricas coletar no .NET

\n\n

Antes de configurar as ferramentas, é importante entender quais métricas são realmente importantes para aplicações C#. Vamos dividi-las em três grupos:

\n\n

1.1. Métricas do sistema (nível de infraestrutura)

\n
    \n
  • CPU e Memória — carga da CPU e consumo de RAM pelo processo dotnet.
  • \n
  • GC (Garbage Collection) — frequência e duração das coletas de lixo, tamanho dos heaps (Gen0, Gen1, Gen2, LOH).
  • \n
  • Thread Pool — número de threads ativas, livres e em espera.
  • \n
  • Disk I/O e Rede — leitura/gravação em disco, conexões de rede.
  • \n
\n\n

1.2. Métricas de negócio (nível de aplicação)

\n
    \n
  • Request Rate — número de requisições por segundo (RPS).
  • \n
  • Latência — tempo de resposta (percentis p50, p95, p99).
  • \n
  • Taxa de Erro — porcentagem de erros 4xx e 5xx.
  • \n
  • Usuários Ativos — número de usuários simultâneos.
  • \n
\n\n

1.3. Métricas do .NET Runtime

\n
    \n
  • Compilação JIT — tempo de compilação dos métodos.
  • \n
  • Carregamento de Assemblies — número de assemblies carregados.
  • \n
  • Exceções — número de exceções lançadas por segundo.
  • \n
\n\n

Para coletar essas métricas no .NET, utiliza-se uma ferramenta poderosa: System.Diagnostics.Metrics (API nativa desde .NET 6+) e a biblioteca OpenTelemetry.

\n\n

2. Configuração da coleta de métricas com OpenTelemetry e Prometheus

\n\n

A melhor forma de organizar o monitoramento de uma aplicação C# é usar a combinação OpenTelemetry (coleta de métricas) + Prometheus (armazenamento) + Grafana (visualização). Vamos ver a configuração passo a passo.

\n\n

2.1. Instalação dos pacotes NuGet

\n

Adicione os seguintes pacotes ao projeto:

\n
dotnet add package OpenTelemetry.Extensions.Hosting\ndotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.AspNetCore\ndotnet add package OpenTelemetry.Instrumentation.Runtime
\n\n

2.2. Configuração no Program.cs

\n

Configure o OpenTelemetry para coleta automática de métricas do ASP.NET Core e do .NET Runtime:

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation() // métricas de requisições HTTP\n        .AddRuntimeInstrumentation()    // métricas de GC, JIT, ThreadPool\n        .AddPrometheusExporter());      // exportação para Prometheus\n\nvar app = builder.Build();\n\napp.UseOpenTelemetryPrometheusScrapingEndpoint(); // endpoint /metrics\n\napp.Run();
\n\n

Agora, no endereço http://localhost:5000/metrics, estará disponível um endpoint com métricas no formato Prometheus.

\n\n

2.3. Criando métricas personalizadas

\n

Vamos adicionar uma métrica de negócio — um contador de pedidos processados:

\n
public class OrderMetrics\                

Blogs

Book Recommendations