Fazendo login em arquivo de texto ou banco de dados?


25

Quando devo usar o banco de dados para registrar e quando arquivos de texto?
Vejo que servidores e estruturas da Web (que seu aplicativo usa internamente) geralmente (sempre?) Registram solicitações e erros em arquivos de texto por padrão. Mas vejo que as pessoas que desenvolvem seu aplicativo em torno desses servidores e estruturas às vezes efetuam login no banco de dados (mesmo o banco de dados principal do aplicativo, e não o externo).
Talvez também haja uma diferença entre logs de depuração e logs de auditoria - eu li essa classificação em algum lugar deste site.





Embora você não deva registrar informações confidenciais, alguns sistemas podem exigir isso, e esse é um bom caso para efetuar logon no banco de dados. Às vezes, os desenvolvedores inadvertidamente registram informações confidenciais. Para evitar esse acidente, muitos desenvolvedores de aplicativos efetuam logon somente em um banco de dados, para que coisas como números de segurança social em mensagens de log não estejam em um arquivo de texto em texto sem formatação em 13 servidores diferentes.
Greg Burghardt 23/03

Respostas:


16

Em termos muito gerais, o registro em um arquivo de texto é muito mais rápido do que o registro em um banco de dados. Esse é o principal aspecto do registro que você precisa considerar.

É mais provável que você faça logon em um banco de dados porque deseja consultar os resultados - pesquisar informações de log específicas é mais fácil em um banco de dados, principalmente se você registrar informações contextuais que podem ser usadas para agrupar entradas de log. Também é geralmente mais fácil acessar um banco de dados central do que um arquivo de log em um servidor que pode estar protegido e não acessível.

O ideal seria registrar localmente em um arquivo e migrar esses dados para um banco de dados para inspeção, se necessário posteriormente.

Agora, a auditoria é um animal completamente diferente. Embora tenha conceito semelhante ao log, geralmente é necessário manter a auditoria por um longo tempo (diferentemente dos arquivos de log usados ​​para depuração ou rastreamento que podem ser excluídos por um capricho). As auditorias existem para mostrar informações importantes. Você registra muito menos informações de auditoria e com menos frequência do que o log normal, portanto, o desempenho não é uma preocupação. É por esse motivo que são vistas as vantagens de gravar essas informações de auditoria em um banco de dados central.


11
Outro arranjo que eu vi é que os logs sejam gravados localmente inicialmente e depois enviados ao DB por algum tipo de trabalho em segundo plano.
Robbie Dee

@RobbieDee Eu gosto dessa idéia. Eu tenho um tipo de pergunta duplicada: é comum ter arquivos de log de duração limitada (por exemplo, apenas nos últimos 30 dias), mas como os logs são enviados para o banco de dados (por exemplo, semanalmente), todos os logs são armazenados no banco de dados => os arquivos de log atuam como apenas um buffer e todas as operações de leitura são feitas no banco de dados? Como a gravação no banco de dados está atrasada, não há preocupação com o desempenho, não é?
Al-un

9

Não existe um tamanho único para todas as abordagens e, para resiliência, às vezes você deseja usar várias abordagens. Tomando seu exemplo, você pode ocultar os logs de depuração em um arquivo e armazenar os logs de auditoria em um banco de dados.

Migalhas de pão de aplicativo

Prós: Fácil de implementar e visível para o usuário imediatamente

Contras: as informações persistem apenas enquanto o aplicativo está ativo

Arquivo de texto

Prós: Fácil de implementar

Contras: É necessário garantir que o bloqueio de arquivos não ocorra. O que fazer quando o espaço em disco acabar na unidade de log?

Log de eventos

Prós: Fácil de implementar

Contras: O log de eventos pode ficar cheio se não for configurado corretamente ou os logs antigos poderão ser perdidos devido à política de retenção / limpeza.

Base de dados

Prós: Fácil de implementar

Contras: mais tráfego de banco de dados. Como registrar uma perda de DB ou outro problema de DB?

Sistema de Mensagens (MQ)

Prós: despedir e esquecer

Contras: Outra camada para dar errado. Requer configuração


Você também pode incluir daemon syslog e destinos de log SNMP.
precisa

@gbjbaanb Bem, de fato - alguns sistemas operacionais têm essa funcionalidade incorporada - essa certamente não é uma lista exaustiva. Os sistemas de alta disponibilidade também podem enviar SMSs quando desativados.
Robbie Dee

2

Os logs de auditoria devem garantir a rastreabilidade total das operações ao longo do tempo para fins de auditoria, com o objetivo de justificar completamente o conteúdo do seu banco de dados.

Em alguns casos (por exemplo, aplicativos financeiros), esses registros podem ter que garantir a conformidade com requisitos legais, como retenção (em alguns países por 10 anos) ou inalterabilidade. Como esses logs precisam justificar o conteúdo do banco de dados no nível do aplicativo, é prática comum armazená-los no banco de dados, onde o acesso pode ser controlado para evitar alterações não autorizadas.

Outros logs , como logs de monitoramento ou logs de segurança, frequentemente precisam lidar com restrições de desempenho e volume. Geralmente, eles são gravados em um arquivo, porque é mais rápido gravar (sem sobrecarga de gerenciamento de transações) mais fácil arquivar offline e mais fácil integrar-se às ferramentas SIEM de monitoramento externo .

Deve-se observar que, embora esse tipo de registro possa ser usado para demonstrar a confiabilidade dos registros de auditoria (por exemplo, sem acesso não autorizado), eles geralmente apresentam restrições de retenção mais curtas (por exemplo, entre 6 meses e 2 anos para fins de aplicação da lei nos registros de telecomunicações) se houver alguma restrição.


1

Um dos muitos motivos para usar o db no log de depuração é quando você não tem acesso ao aplicativo ou servidor da web para visualizar o visualizador de eventos ou arquivos de texto

Os logs de auditoria são diferentes dos logs de depuração no contexto do aplicativo Web, pois em alguns aplicativos você pode precisar mostrá-los ao usuário final para que eles entrem no banco de dados para facilitar a recuperação.

Você pode usar o DB Tools para filtragem e visualização fácil também.


Gravar arquivos de log do servidor não é a única opção para sistemas de alta simultaneidade. Esses logs geralmente são gravados no dispositivo cliente e, em seguida, são enviados para suporte no caso de um problema. Alta simultaneidade também pode tornar isso inadequado para gravação em um único banco de dados.
Robbie Dee

@RobbieDee Esse também é o caso de servidores e aplicativos da web? como é o que o OP está pedindo, acredito
Muhammad Raja
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.