Monitoramento de aplicações C#: métricas, alertas e práticas avançadas

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 monitorar aplicações C# é uma arte

No desenvolvimento moderno de C# (.NET), o monitoramento deixou de ser apenas uma opção. É um elemento obrigatório em ambientes de produção, que permite não apenas registrar falhas, mas também prevê-las. Em um nível avançado, o monitoramento se transforma em um sistema de alerta precoce: você não apenas observa dashboards, mas configura alertas com base em métricas complexas.

Neste artigo, vamos explorar como ir além dos contadores padrão de CPU e memória. Você aprenderá a coletar métricas de negócio personalizadas, configurar alertas com Prometheus e Alertmanager, e usar OpenTelemetry para rastreamento. Todos os exemplos serão em C#.



1. Instrumentação avançada: App Metrics e Prometheus

1.1. Conectando Prometheus ao ASP.NET Core

O monitoramento básico no .NET geralmente se limita ao PerformanceCounter embutido. No entanto, para arquiteturas de microsserviços, o padrão é o Prometheus. Instale o pacote:

dotnet add package prometheus-net.AspNetCore

Em seguida, adicione o middleware no Program.cs:

using Prometheus;

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();

// Habilita o endpoint de métricasapp.UseHttpMetrics();app.UseRouting();app.MapMetrics(); // /metrics

app.Run();

Isso fornecerá métricas básicas: número de requisições, duração, erros. Mas para um nível avançado, isso não é suficiente.



1.2. Métricas de negócio personalizadas

Suponha que você queira monitorar o número de pedidos criados ou o tempo de execução de uma operação crítica de negócio. Use Counter e Histogram:

using Prometheus;

public class OrderMetrics{ private static readonly Counter OrdersCreated = Metrics .CreateCounter("orders_created_total", "Total number of created orders");

private static readonly Histogram OrderProcessingTime = Metrics .CreateHistogram("order_processing_seconds", "Histogram of order processing time");

public void RecordOrderCreation(double elapsedSeconds) { OrdersCreated.Inc(); OrderProcessingTime.Observe(elapsedSeconds); }}

Agora, em qualquer serviço, você pode injetar OrderMetrics e registrar os dados. Isso permitirá criar dashboards no Grafana com precisão de segundos.



2. Alertas: de gatilhos simples a regras orientadas por SLO

2.1. Configurando Alertmanager para métricas C#

Coletar métricas é metade do trabalho. A outra metade são os alertas. Crie uma regra para o Prometheus (alerts.yml):

groups:  - name: csharp_app_alerts    rules:      - alert: HighErrorRate        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05        for: 2m        labels:          severity: critical        annotations:          summary: "High error rate in C# app"          description: "Error rate is {{ $value }} for the last 5 minutes"

Este é um exemplo básico. Em nível avançado, vale a pena adicionar alertas SLO. Por exemplo, se 99% das requisições não forem concluídas em 200 ms — é motivo para pânico.



2.2. Alertas baseados em métricas de negócio

Use os contadores personalizados da seção anterior. Se o número de pedidos cair drasticamente — algo está quebrado:

      - alert: OrdersStopped        expr: rate(orders_created_total[10m]) == 0        for: 5m        labels:          severity: warning        annotations:          summary: "No orders created in last 10 minutes"

Esse alerta não pode ser obtido a partir de métricas padrão do sistema operacional — ele exige um profundo entendimento da lógica de negócio.



3. OpenTelemetry: rastreamento distribuído em C#

3.1. Integração do OpenTelemetry SDK

Quando você tem 10 microsserviços em C#, métricas individuais não ajudam. É necessário rastreamento. Inst

Blogs

Book Recommendations