¿Por qué hay tantos archivos de registro en un sistema Linux típico? ¿Por qué no usan un registro consolidado db / file y una api?

8

Me pregunto por qué hay tantos archivos de registro en un sistema Linux típico. ¿No sería una mejor idea tener una función de API del sistema para el registro y una tabla consolidada para guardar todas las entradas de registro de todas las aplicaciones?

Ivan
fuente
1
Apéndice Refactorizado Pregunta: Teniendo en cuenta que * nix es tan maduro, ¿por qué las convenciones de nombres + ubicaciones de log (& conf) siguen siendo tan esporádicas e inconsistentes? Si las extensiones de archivo son exclusivamente para uso humano, ¿por qué no todos los desarrolladores (y enlaces simbólicos para legacy) aceptan usar .logy .confcomo identificadores?
dhaupin

Respuestas:

16

Es parte de la filosofía de Unix . La idea es que los archivos de texto estén libres del bloqueo del programa y todos puedan usar la técnica que prefieran. Para llevar esto más lejos, a menudo se usan archivos planos, a diferencia de los lenguajes de marcado como XML (aunque también he visto programas que almacenan cosas en formato XML).

Al buscar en Google, he encontrado esta agradable reseña sobre texto sin formato, con comentarios sobre la filosofía de Unix.

phunehehe
fuente
1
También faqs.org/docs/artu/textualitychapter.html
Maciej Piechotka
15

El uso de archivos de texto simples tiene la ventaja de que no necesita herramientas específicas de la base de datos para obtener sus entradas de registro.

Puede analizarlos con grep si lo desea, puede abrirlos con su buscapersonas favorito y puede procesarlos en su lenguaje de secuencias de comandos favorito como Perl, Python, etc. sin la necesidad de bibliotecas adicionales.

En un sistema Unix ya tienes algún tipo de "API de registro del sistema". Se llama syslog. Syslog no es realmente una API, pero es un estándar para registrar mensajes. El nombre significa el protocolo de red y la biblioteca y el demonio detrás de él.

La configuración predeterminada de la mayoría de los sistemas es un demonio syslog que escucha mensajes locales.

El demonio acepta los mensajes y realiza el registro. Hay varias implementaciones diferentes de syslog daemons para todo tipo de plataformas y también es posible registrar sus mensajes en una base de datos.

Es tu decision.

echox
fuente
10

Me pregunto por qué hay tantos archivos de registro en un sistema Linux típico.

Los diferentes archivos de registro contienen información diferente (aunque generalmente hay alguna duplicación). A menudo tienen diferentes características: diferentes políticas de rotación y retención, diferentes permisos, etc. El demonio syslog se encarga de escribirlas; puede ver su configuración en /etc/syslog.confo /etc/syslog-ng.conf.

¿No sería una mejor idea tener una función de API del sistema para iniciar sesión

Esta es una buena idea. Llamémoslo syslog . Su trabajo es enviar las entradas de registro al demonio syslog.

y una tabla consolidada para guardar todas las entradas de registro de todas las aplicaciones?

Ahora que es una lata entera de gusanos. Parece estar asumiendo la presencia de un motor de base de datos, probablemente una base de datos relacional, probablemente una que puede consultar en SQL. Pero Unix es más antiguo que SQL, y hay muy buenas razones por las que no ha adoptado SQL como componente estándar. Bajo Unix, la base de datos es el sistema de archivos. No es una base de datos relacional, es simple . Sus entradas no son filas, sino archivos simples , preferiblemente texto, preferiblemente con un formato simple. Por ejemplo, los archivos de registro son archivos de texto, con una entrada por línea, que contienen la fecha, el nombre de la máquina, el programa de origen y el texto de entrada. Usar una base de datos relacional tendría varias desventajas:

  • ¿Qué haces si la base de datos no funciona? (El sistema de archivos es un componente fundamental (¿y he mencionado que es mucho más simple que una base de datos relacional?); El demonio syslog es un componente simple que hace un trabajo (una característica común en el diseño de Unix) y se espera que lo haga bien y confiablemente.)
  • ¿Cómo se registran las operaciones de la base de datos? (Ok, a través de la base de datos en sí misma, después de que todos los registros contengan entradas del núcleo y del demonio syslog, pero nuevamente una base de datos mucho más compleja hace que esto sea más difícil y menos confiable).
  • ¿Cómo se accede a las entradas de registro? Comparar la simplicidad de cat, grep, lesscontra las consultas SQL. Y los permisos de archivo contra, bueno, no sé cómo manejaría esto en una base de datos relacional típica.
  • Las instalaciones de varios servidores no almacenan sus registros localmente, sino que utilizan la función de registro remoto que se ha incorporado en el demonio syslog desde los albores de Unix. Eso es fácil de implementar con la arquitectura de registro de Unix; no puede ejecutar una base de datos replicada con ese presupuesto de complejidad.
Gilles 'SO- deja de ser malvado'
fuente
1

Esto haría que cosas como 'tail -f /var/log/apache/access.log' sean imposibles.

¿Por qué crees que sería mejor poner todo en un archivo?

Kristof Provost
fuente
1
grep '\[apache\]' | tail -f /dev/stdin- pero tener un servidor de inicio de sesión por usuario (cuando el usuario no tiene acceso al registro de otro usuario).
Maciej Piechotka
"¿Por qué crees que sería mejor poner todo en un archivo?" - Porque amo SQL ;-) Y porque no me gusta (y casi no puedo) tener muchas cosas en mente.
Ivan
11
Cuando todo lo que sabes es SQL, todo parece un problema de base de datos relacional.
David Mackintosh