Monitoramento de aplicações C#: métricas e alertas de nível avançado

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

Monitoramento de aplicações C#: métricas e alertas em nível avançado

\n\n

No desenvolvimento moderno em C# (.NET), uma aplicação simplesmente "funcionando" deixou de ser um critério de qualidade suficiente. Sistemas de produção exigem monitoramento constante: é preciso saber quanta memória o serviço consome, quão rápido as requisições são processadas, se a fila no broker de mensagens não está crescendo. Sem um sistema de monitoramento e alertas, você corre o risco de saber do problema apenas pelos usuários. Neste artigo, abordaremos técnicas avançadas de coleta de métricas, sua visualização e configuração de alertas para aplicações C#, utilizando ferramentas modernas como Prometheus, Grafana e OpenTelemetry.

\n\n

Por que o monitoramento avançado é necessário?

\n

O monitoramento básico (CPU, RAM, disco) não fornece um quadro completo. Para aplicações C#, métricas específicas são críticas: número de coletas de lixo (GC), tempo de bloqueio de threads, tamanho do pool de conexões com o banco de dados. Alertas sobre essas métricas permitem reagir antes que ocorra uma falha. A abordagem avançada implica três níveis:

\n
    \n
  • Infrastructure level — métricas padrão do servidor.
  • \n
  • Application level — métricas da lógica de negócio (latências, erros, frequência de chamadas).
  • \n
  • Business level — métricas relacionadas ao domínio (número de pedidos, conversão).
  • \n
\n

Vamos nos concentrar no nível de aplicação, que oferece o maior benefício para desenvolvedores C#.

\n\n

Coleta de métricas com OpenTelemetry e Prometheus

\n

OpenTelemetry (OTel) é o padrão de facto para instrumentar aplicações .NET. Ele permite coletar métricas, traces e logs com uma API unificada. Vejamos um exemplo de integração com o Prometheus.

\n\n

Instale os pacotes NuGet:

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

Configuração em Program.cs:

\n
using OpenTelemetry.Metrics;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenTelemetry()\n    .WithMetrics(metrics => metrics\n        .AddAspNetCoreInstrumentation()\n        .AddRuntimeInstrumentation()\n        .AddPrometheusExporter());\n\nvar app = builder.Build();\n\napp.MapPrometheusScrapingEndpoint(); // endpoint para o Prometheus\n\napp.Run();
\n\n

Agora, no endereço /metrics, seu serviço fornecerá métricas no formato do Prometheus. Entre elas estão o número de requisições HTTP, o tempo de processamento, métricas de GC e memória.

\n\n

Métricas personalizadas

\n

Para métricas de negócio, use Meter e Counter:

\n
using System.Diagnostics.Metrics;\n\npublic class OrderMetrics\n{\n    private readonly Counter<int> _ordersCreated;\n\n    public OrderMetrics(IMeterFactory meterFactory)\n    {\n        var meter = meterFactory.Create("MyApp.Orders");\n        _ordersCreated = meter.CreateCounter<int>("orders.created.count");\n    }\n\n    public void OrderCreated() => _ordersCreated.Add(1);\n}\n\n// Registro no DI:\nbuilder.Services.AddSingleton<OrderMetrics>();
\n\n

Essas métricas serão automaticamente enviadas para o Prometheus e estarão disponíveis para a criação de dashboards no Grafana.

\n\n

Configuração de alertas: de regras simples a um sistema em vários níveis

\n

As métricas por si só são inúteis sem alertas. No Prometheus, os alertas são configurados através do Alertmanager. Vejamos um cenário avançado: um alerta para tempo de resposta anormal da API.

\n\n

Regra no Prometheus (alert.rules.yml)

\n
groups:\n  - name: csharp_app_alerts\n    rules:\n      - alert: HighRequestLatency\n        expr: |\n          histogram_quantile(0.95, \n            rate(http_server_duration_seconds_bucket[5m])\n          ) > 2\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n          summary: "Alta latência de requisições ({{ $value }}s)"\n          descr                

Blogs

Book Recommendations