Executando verificação de segurança...
6

Logs API, quais salvar?

Pessoal, estou desenvolvendo uma API para Emissão de Notas Fiscais do meu sistema.

A API está sendo desenvolvida com Node.js e Next.js, banco de dados postgresql para o banco e mongodb para os logs.

Atualmente eu estou salvando os logs num json com alguns dados como rota, data/hora, tipo, um breve texto sobre o log. São salvos logs relacionados a erros, avisos e algumas informações como requisição concluida com sucesso.

Creio que estes logs já ajudariam a analisar algum erro caso aconteça, mas fico na dúvida se preciso de mais dados, mais informações e se é de fato necessário ou não.

Estava pensando em salvar o json da requisição além da simples informação de que foi requisitado com sucesso ou não, talvez salvar o json de retorno também.

Não tenho muita experiência em desenvolver API´s/SaaS, a minha equipe está desenvolvendo agora esta API, sou programador Delphi e nos logs que salvo das minhas aplicações Delphi, coloco o máximo de informação possível.

Outra dúvida querida comunidade, a minha ideia é salvar os logs no mongdb e não em arquivo txt, nisto com o tempo vai só aumentar o tamanho do banco. Eu devo apagar os logs com qual frequência? Ou ao invés de apagar, eu simplesmente copiar os registros mais antigos para uma outra base e apagar da base principal?

Carregando publicação patrocinada...
3

Já ouviu falar em observabilidade? É um termo mais falado em grandes empresas que precisam monitorar ativamente seus sistemas, trabalhei em um projeto implantando a stack da Elastic (Elasticsearch, Kibana e Logstash) junto com vários outros beats e features da stack da Elastic. É possível subir tudo via Docker e é um sistema bem parrudo, recomendo fortemente testar e ver se é viável pois tem uma curva de aprendizado considerável, existem outras alternativas como New Relic, Datadog, Grafana e Prometheus, enfim, tem muita coisa mas eu não posso dar opinião do que não usei, segue algumas dicas:

  • Utilize agentes de APM (Application Performance Management), usei Elastic APM mas tem diversos, eles coletam informações das requisiçÕes HTTP, tempo de resposta e uso de recursos e pode até ler as chamadas para banco de dados e outros serviços.
  • Algumas aplicações geram muitos (muitos) logs, que acabam perdendo "valor" com o tempo, você pode fazer um tratamento nos dados para manter um certo histórico ou média passada para fins de comparação, mas cá entre nós, não precisa salvar os dados de requisição 200 do fulano de 3 meses atrás..
  • Cuidado ao salvar os dados, principalmente envolvendo requisições, podem haver mais dados sensíveis em bancos de logs do que no próprio banco de dados.
1
3

Segue:

  1. Salva os logs no mongodb, não salve os mesmos em arquivo txt;
  2. Memória é barata, não vejo problemas tu salvar esses logs ad eternum;
  3. Adiciona mais informações, como um timestamp de quando o log foi criado e atualizado (createdAt e updatedAt); Essa info pode ser útil também se tu adotar alguma política de deletar logs antigos;
  4. Salva o que for necessário, não tem como tu antecipar todo tipo de erro, a maioria das API's sequer tem logs.

Tudo é política, e política tu cria do zero e depois evolui, com o tempo tu vai adotando políticas X e Y para os teus log's e isso tb serve para as demais informações...

1

Idealmente um log não deveria ser atualizado. Um log é um registro de algo em um ponto determinado do tempo. Existe algum caso onde faz sentido atualizar um log?

-2

sim, se tu armazenar um log como uma tabela hash onde o id do mesmo é um determinado recurso, faz sentido tu atualizar esse log se algo ocorrer novamente com esse recurso. Quando o usuário receber o log, irá receber o log a partir dos respectivos recursos que deram erro ao invés de um amontoado de logs desconexos.

1

Consegue dar um exemplo mais específico desse caso de uso? Eu tô pensando em log como uma linha num banco de dados que existe como um registro de algo que aconteceu em alguma parte do sistema. Se algo ocorre com esse recurso, não seria melhor gerar um novo log com informações sobre essa alteração?

1

Olha, eu não sou especialista em log's, mas em software não existe nada gravado em pedra. Eu entendo que geralmente os log's são arquivos a parte e independentes um do outro que são gerados quando ocorre um erro no sistema. Dito isso, pode haver casos que tu precise gerar log's por recursos, contextos, etc.

-2

E outro ponto, log é apenas um registro, e como qualquer registro, ele pode tanto ser criado como pode ser atualizado, não existe nenhuma regra de ouro que diga que um log não possa ser atualizado somente porque aquilo é um log, antes dele ser log, ele é um registro.

1