Pular para conteúdo

Integração: Seq

Visão Geral

Seq é a plataforma de centralização de logs utilizada pelo CIBA. Integra nativamente com Serilog e oferece query poderosa, filtros e UI amigável.

Responsabilidades: - Centralização de logs da aplicação - Busca e filtro por propriedades estruturadas - Visualização em tempo real - Queries salvas (Signals)

Acesso

Ambiente Dashboard Ingestion
Desenvolvimento http://localhost:8082 http://localhost:5341
Produção Via SSH tunnel (porta 8082) http://ciba-seq:5341 (interno)

Configuração

Docker Compose

Desenvolvimento (docker-compose.dev.yaml):

seq:
  image: datalust/seq:latest
  container_name: ciba-seq
  restart: unless-stopped
  mem_limit: 512m
  cpus: 0.5
  environment:
    - ACCEPT_EULA=Y
    - SEQ_FIRSTRUN_NOAUTHENTICATION=true
  ports:
    - "5341:5341"  # Ingestion API
    - "8082:80"    # Web UI
  volumes:
    - seq_data:/data

Produção (deploy/docker-compose.services.yml):

ciba-seq:
  image: datalust/seq:latest
  container_name: ciba-seq
  restart: unless-stopped
  mem_limit: 512m
  cpus: 0.5
  environment:
    - ACCEPT_EULA=Y
    - SEQ_FIRSTRUN_NOAUTHENTICATION=true
  volumes:
    - ciba_seq_data:/data
  networks:
    - proxy-net
  ports:
    - "127.0.0.1:8082:80"  # Só localhost - use SSH tunnel para acesso remoto

Serilog

Desenvolvimento (appsettings.Development.json):

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:5341"
        }
      }
    ]
  }
}

Produção (appsettings.json):

{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://ciba-seq:5341"
        }
      }
    ]
  }
}

Pacote NuGet

<PackageReference Include="Serilog.Sinks.Seq" Version="8.*" />

Propriedades Disponíveis

O CIBA envia logs estruturados com as seguintes propriedades:

Propriedade Descrição Exemplo
Application Nome da aplicação Ciba
RequestMethod Método HTTP POST
RequestPath Caminho da requisição /api/messages
StatusCode Código de resposta 200
Elapsed Tempo de execução (ms) 45.32
RequestName Nome do comando MediatR SendMessageCommand
ElapsedMs Tempo do handler (ms) 120
SourceContext Classe de origem do log Ciba.Api.Handlers.MessageHandler
TraceId ID de rastreamento abc123def456

Queries Úteis

Erros e Exceções

@Level = 'Error'

Requisições Lentas (> 500ms)

Elapsed > 500

Logs de um Handler Específico

RequestName = 'SendMessageCommand'

Filtrar por Nível

@Level in ['Warning', 'Error']

Buscar por Texto

@Message like '%falha%'

Combinações

@Level = 'Error' and RequestPath like '/api/webhook%'

Fluxo de Logs

Aplicação (.NET)
Serilog
Sink Seq (HTTP POST para localhost:5341)
Seq Server
Dashboard (localhost:8082)

Boas Práticas

Logs Estruturados

Correto:

_logger.LogInformation("Mensagem processada {@Context}", new {
    TenantId = tenant.Id,
    ConversationId = conversation.Id,
    ProcessingTime = elapsed.TotalMilliseconds
});

Evitar:

_logger.LogInformation($"Mensagem do tenant {tenant.Id} processada em {elapsed.TotalMilliseconds}ms");

Níveis de Log

Nível Uso
Debug Informações detalhadas para debugging
Information Eventos normais da aplicação
Warning Situações inesperadas mas não críticas
Error Erros que impactam funcionalidade
Fatal Erros que impedem a aplicação de funcionar

Troubleshooting

Logs não aparecem no Seq

  1. Verificar se o container está rodando:

    docker ps | grep seq
    

  2. Verificar se a porta está acessível:

    curl http://localhost:5341/api/events/raw
    

  3. Verificar configuração do Serilog em appsettings.Development.json

Container não inicia

Verificar se a porta 8082 ou 5341 está em uso:

netstat -an | findstr "8082"
netstat -an | findstr "5341"


Acesso em Produção

O dashboard do Seq em produção está acessível apenas via localhost (127.0.0.1). Para acessar remotamente:

Via SSH Tunnel:

ssh -L 8082:127.0.0.1:8082 user@servidor
# Acessar http://localhost:8082 no navegador local


Considerações de Produção

Item Status Recomendação
Autenticação Não configurada Considerar habilitar para ambientes com múltiplos usuários
Retenção Padrão Seq Configurar política de retenção conforme necessidade
Backup Volume Docker Incluir ciba_seq_data no backup de volumes