1. Introdução
Antes de mergulhar na prática, vamos entender por que precisamos de sistemas externos para coletar logs. Imagine que sua aplicação está rodando não no PC de casa, mas em produção: centenas de servidores, microserviços, muitos usuários, alguém reclama que o "aplicativo está lento". Encontrar o evento certo nesse fluxo de logs é como procurar uma agulha num palheiro. Sem coleta centralizada de logs, depurar e manter essas aplicações é praticamente impossível. É aí que entram o Seq e o Application Insights.
Seq: UI agradável, busca rápida, tempo real
Seq é um sistema de coleta e análise centralizada de logs estruturados, focado em .NET e Serilog. Não é só um serviço para despejar arquivos de log, é uma ferramenta poderosa: em tempo real você vê streams de logs, filtra por propriedades, busca, cria alerts. O Seq pode ser rodado localmente ou na nuvem.
Por que escolher o Seq?
- Feito para .NET e Serilog, funciona "out of the box".
- Busca e filtragem incrivelmente rápidas por qualquer propriedade das mensagens.
- Interface web simples e conveniente.
- Pode rodar localmente sem burocracia, até no seu notebook.
Como fica um esquema arquitetural simples?
+--------------+ +-------------+ +-------------+
| .NET-aplic. | --(log)| Serilog | --(http)| Seq |
+--------------+ +-------------+ +-------------+
| ^
| |
(busca, filtros, <----[Web UI]
alerts, integrações)
A aplicação escreve logs estruturados via Serilog, o Serilog os envia para o Seq. Na interface web do Seq você faz o que quiser.
2. Integração do Serilog com o Seq
Instalação do Seq
O Seq pode ser testado localmente rapidamente, ideal para experimentos. Por exemplo, se você usa Windows, baixe o Seq do site oficial.
- Baixe o Seq e instale.
- Depois da instalação abra a interface web (normalmente http://localhost:5341).
- Pronto! Agora falta configurar o envio dos logs para o Seq.
Integração do Serilog com o Seq
Instalar o pacote NuGet:
dotnet add package Serilog.Sinks.Seq
Exemplo de configuração de logging em Program.cs:
using Serilog;
public class Program
{
public static void Main(string[] args)
{
// Configuração do Serilog para enviar logs para o Seq
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341") // URL do seu servidor Seq
.CreateLogger();
Log.Information("A aplicação está iniciando");
// ... Resto do código da aplicação ...
Log.CloseAndFlush();
}
}
Se tudo estiver configurado corretamente, seus logs da aplicação começarão a aparecer no Seq.
Exemplo de evento estruturado
Log.Information("O usuário {User} fez login em {Time}", userName, DateTime.UtcNow);
No Seq agora você pode buscar todas as entradas de um usuário específico:
User == 'vasya'
Filtragem e busca
O Seq consegue filtrar eventos por qualquer campo e valor. Por exemplo, quer ver todos os erros de hoje? Só coloque um filtro:
@Level = 'Error' and @Timestamp > today()
Dá pra combinar condições — é bem prático!
Alerts e integrações
O Seq permite criar alerts: se, por exemplo, a quantidade de erros ultrapassa um limite, você recebe um e-mail, é disparado um webhook, ou até enviado uma mensagem no Slack.
Quais outras funcionalidades existem?
- Integração com sistemas CI/CD para coletar logs de testes automaticamente.
- Possibilidade de Dashboards customizados (em planos pagos).
- Plugins para análise de logs, automação de ações (por exemplo, criação automática de issues quando algo cai).
- Integração com Grafana/Prometheus via plugins.
Erros comuns ao configurar o Seq
Um problema comum é esquecer de colocar a URL correta do servidor Seq no Serilog, ou o Seq estar ouvindo em outra porta.
Outro problema é não abrir a porta para conexões de entrada quando o Seq roda em Docker ou num servidor. Vale checar a disponibilidade da porta do aplicativo até o Seq.
3. Application Insights: telemetria para .NET, nuvem e mágica
Application Insights (ou "App Insights") é a plataforma na nuvem da Microsoft Azure para monitoramento e análise de aplicações. Não é só coleta de logs, tem detecção automática de anomalias, análise de uso, monitoramento de dependências, requests, APIs externas — e, claro, visualização em tempo real. O Azure Application Insights é padrão no mundo enterprise .NET.
Quais as vantagens do Application Insights?
- Não precisa instalar servidor separado: tudo na nuvem.
- Integração profunda com .NET, ASP.NET, Azure, Visual Studio.
- Coleta automática não só dos seus logs, mas de métricas, exceptions, requests, queries SQL.
- Possibilidade de criar dashboards, monitorar SLA, buscar anomalias, analisar traces distribuídos (distributed tracing).
Como funciona o Application Insights?
+--------------+ +-------------------+ +---------------------+
| .NET-aplic. | --(SDK)| AppInsights SDK | --(https)| Azure Application |
+--------------+ +-------------------+ | Insights (nuvem) |
+---------------------+
^ |
(W3C Trace +----> Analytics, busca, dashboards
Context)
A aplicação com o SDK envia telemetria para a nuvem Azure, e você analisa e visualiza via portal do Azure.
Integração do Application Insights com uma aplicação .NET
Opção 1: Rápido e simples
Se você tem uma aplicação ASP.NET Core, é bem simples:
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Em Program.cs:
builder.Services.AddApplicationInsightsTelemetry("<seu_chave_de_instrumento>");
E se for uma aplicação console ou desktop:
dotnet add package Microsoft.ApplicationInsights
Inicialização:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<seu_chave_de_instrumento>";
var telemetryClient = new TelemetryClient(telemetryConfig);
telemetryClient.TrackTrace("Olá do Application Insights!");
telemetryClient.TrackException(new Exception("OOPS, ocorreu um erro!"));
A chave do instrumento precisa ser obtida no portal do Azure depois de criar o recurso Application Insights.
Como enviar dados estruturados?
Você pode adicionar propriedades a cada trace:
telemetryClient.TrackTrace("Usuário fez login",
new Dictionary<string, string> { ["User"] = userName }
);
Exemplo: logando ações do usuário
Suponha que você queira logar o login do usuário:
var props = new Dictionary<string, string>
{
{ "User", userName },
{ "Time", DateTime.UtcNow.ToString("o") }
};
telemetryClient.TrackEvent("UserLogin", props);
Agora não só o evento, mas todas as propriedades aparecem no portal.
4. Dicas úteis
O que você vê no Application Insights?
- Overview das aplicações: entradas, errors, dependências (por exemplo, queries SQL).
- Busca nos logs: qualquer evento, filtragem por propriedades.
- Visualização: gráficos, dashboards.
- Tracing: é possível ver a cadeia de chamadas e o tempo gasto em cada operação.
- Alerting: configuração de alerts por qualquer condição.
Breve sobre a estrutura do Application Insights
| Objeto | Descrição |
|---|---|
| Trace | Mensagem de texto (log comum). |
| Event | Evento arbitrário (por exemplo, "Compra"). |
| Exception | Informação sobre erro/exceção. |
| Dependency | Chamada externa (SQL, requisição HTTP etc.). |
| Metric | Métricas numéricas (por exemplo, contagem). |
| Request | Requisição do usuário (para apps web). |
Exemplo: buscar um erro no Application Insights
No portal do Azure você pode montar uma query simples (Kusto Query Language — KQL):
exceptions
| where timestamp > ago(1d)
| where outerMessage contains "Timeout"
| project timestamp, operation_Name, user_Id, outerMessage
Isso vai mostrar todos os timeouts das últimas 24 horas, com detalhes.
Limitações/considerações do Application Insights
- É necessário ter conta no Azure. Dá pra usar grátis, mas com limites.
- Às vezes há atraso entre o envio dos logs e o aparecimento na UI — até alguns minutos.
- Para projetos "muito privados" — é nuvem, não uma instalação local.
- Se abusar de traces, você pode estourar o limite diário rapidamente.
5. Comparando Seq e Application Insights
| Seq | Application Insights | |
|---|---|---|
| Onde é armazenado | Servidor local (ou nuvem) | Nuvem Azure |
| Custo | Gratuito/pago, local | Tem plano gratuito, paga no Azure |
| Melhor uso | Aplicações .NET, CI locais | Qualquer aplicação, produção/enterprise |
| UI/Busca | Muito conveniente, filtros | Poderoso, analytics, dashboards |
| Alerting | Integrado | Condições complexas, integração com Azure |
| Integração | Serilog, outros sinks | SDKs para ASP.NET, .NET, JS etc. |
| Flexibilidade | Você controla tudo | Tudo sob o guarda-chuva da Microsoft |
Aplicando isso na prática
O conhecimento sobre Seq e Application Insights vai te servir não só em produção, mas também durante desenvolvimento e testes (por exemplo, pra analisar comportamento de testes automatizados), ao trabalhar com microserviços quando você quer ver o quadro completo. Em entrevistas frequentemente perguntam "Como você organizaria a coleta de logs para achar problemas em produção rapidamente?" — agora você tem o que responder!
Além disso, muitas empresas modernas usam esses sistemas para construir pipelines inteiros de DevOps: Continuous Delivery, criação automática de bugs a partir de alerts etc. Um sistema de coleta de logs não é só "pra onde vai aquele Console.WriteLine", é uma verdadeira "caixa preta" e o monitor da sua aplicação.
GO TO FULL VERSION