Por que existem tantos arquivos de log em um sistema Linux típico? Por que eles não usam um arquivo db / logs consolidado e uma API?

8

Pergunto-me por que existem tantos arquivos de log em um sistema Linux típico? Não seria uma idéia melhor ter uma função de API do sistema para registro e uma tabela consolidada para salvar todas as entradas de log de todos os aplicativos?

    
por Ivan 08.10.2010 / 15:37

5 respostas

16

Faz parte da filosofia Unix . A ideia é que os arquivos de texto estejam livres de bloqueio de programa e todos possam usar qualquer técnica que preferirem. Para levar isso adiante, arquivos simples são frequentemente usados, ao contrário de linguagens de marcação como XML (embora eu tenha visto programas armazenando coisas em formato XML também).

No googling eu encontrei este artigo sobre sobre texto simples, com comentários sobre a filosofia Unix.

    
por 08.10.2010 / 16:08
15

O uso de arquivos de texto simples tem a vantagem de não precisar de nenhuma ferramenta específica do banco de dados para obter suas entradas de log.

Você pode analisá-los com o grep se quiser, pode abri-los com o seu pager favorito e pode processá-los em sua linguagem de script favorita como Perl, Python, etc., sem a necessidade de bibliotecas adicionais.

Em um sistema Unix, você já tem algum tipo de "API de log do sistema". É chamado syslog. O syslog não é realmente uma API, mas é um padrão para registrar mensagens. O nome significa protocolo de rede e a biblioteca e o daemon por trás dele.

A configuração padrão da maioria dos sistemas é um daemon syslog que escuta mensagens locais.

O daemon aceita as mensagens e faz o registro. Existem várias implementações diferentes de daemons de syslog para todos os tipos de plataformas e também é possível registrar suas mensagens em um banco de dados.

Depende de você.

    
por 08.10.2010 / 15:52
10

I just wonder why are there so many log files in a typical Linux system?

Os diferentes arquivos de log contêm informações diferentes (embora normalmente haja alguma duplicação). Eles geralmente têm características diferentes: diferentes políticas de rotação e retenção, diferentes permissões, etc. O daemon syslog cuida de escrevê-las; você pode ver suas configurações em /etc/syslog.conf ou /etc/syslog-ng.conf .

Wouldn't it be a better idea to have one system api function for logging

Este é uma boa ideia. Vamos chamá-lo de syslog . Sua tarefa é enviar as entradas de log para o daemon syslog.

and one consolidated table to save all the log entries from all the applications?

Agora, isso é uma lata inteira de worms. Você parece estar assumindo a presença de um mecanismo de banco de dados, provavelmente um banco de dados relacional, provavelmente um que você pode consultar no SQL. Mas o Unix é mais antigo que o SQL, e há boas razões porque ele não adotou o SQL como um componente padrão. No Unix, o banco de dados é o sistema de arquivos. Não é um banco de dados relacional, é um simples . Suas entradas não são linhas, mas arquivos simples , preferencialmente texto, preferencialmente com um formato simples. Por exemplo, os arquivos de log são arquivos de texto, com uma entrada por linha, contendo a data, o nome da máquina, o programa de origem e o texto da entrada. Usar um banco de dados relacional teria várias desvantagens:

  • O que você faz se o banco de dados não estiver funcionando? (O sistema de arquivos é um componente fundamental (e já mencionei que é muito mais simples que um banco de dados relacional?); O daemon syslog é um componente simples que faz um trabalho (um recurso comum no projeto Unix) e espera-se que o faça bem e de forma confiável.)
  • Como você registra as operações do banco de dados? (Ok, através do próprio banco de dados - depois que todos os logs contêm entradas do kernel e do daemon syslog - mas, novamente, um banco de dados muito mais complexo torna isso mais difícil e menos confiável).
  • Como você acessa as entradas de log? Compare a simplicidade de cat , grep , less com consultas SQL. E as permissões de arquivo contra, bem, eu não sei como você lidaria com isso em um banco de dados relacional típico.
  • Instalações multisservidor não armazenam seus registros localmente, eles usam o recurso de registro remoto que foi construído no daemon syslog desde o início do Unix. Isso é fácil de implementar com a arquitetura de registro unix; você não pode executar um banco de dados replicado com esse orçamento de complexidade.
por 11.10.2010 / 01:08
4

Se você realmente deseja armazenar seus logs do sistema em um banco de dados relacional (que pode ter muitas vantagens), verifique o rsyslog ( A próxima substituição do syslog ), que pode gravar logs do sistema em um MySQL , banco de dados Postgres ou Oracle .

    
por 11.10.2010 / 06:08
1

Isso tornaria coisas como 'tail -f /var/log/apache/access.log' impossíveis.

Por que você acha que seria melhor colocar tudo em um arquivo?

    
por 08.10.2010 / 15:51

Tags