CodeGym /Cursos /C# SELF /Coleta de logs: Seq...

Coleta de logs: Seq e Application Insights

C# SELF
Nível 64 , Lição 2
Disponível

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.

  1. Baixe o Seq e instale.
  2. Depois da instalação abra a interface web (normalmente http://localhost:5341).
  3. 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.

2
Tarefa
C# SELF, nível 64, lição 2
Bloqueado
Integração do Application Insights para coleta de telemetria
Integração do Application Insights para coleta de telemetria
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION