Después de leer an article about the subject from O'Reilly, quería preguntarle a Stack Overflow por sus opiniones sobre el asunto.¿Es una buena idea escribir archivos de registro del servidor en una base de datos?
Respuesta
Escriba localmente en el disco, luego inserte por lotes periódicamente en la base de datos (por ejemplo, en el tiempo de volcado del registro). Haz eso en un proceso separado y de baja prioridad. Más eficiente y más robusto ...
(Asegúrese de que la tabla de registro de base de datos contiene una columna para "máquina de la que el evento del registro vino de" por cierto - muy práctico)
Me gusta esa idea mejor. Y, si necesitara los datos en la base de datos más rápido, podría hacerlo todas las noches, si sus rotaciones de registros no son todas las noches para comenzar. –
¿No significaría eso que la información de registro en la base de datos siempre está desactualizada, y por lo tanto, serviría principalmente como un archivo en lugar de algo que usaría para diagnosticar problemas recientes? – MusiGenesis
En términos de diagnóstico de los problemas actuales, se enfrentará a un desafío como ese, sin importar cómo maneje los registros actuales (tail/grep/etc o alternativas de Windows para no interferir con el registro). Incluso para un problema como ese, es posible que desee consultar los datos históricos para ver si sucedieron antes. –
Yo diría que no, dado que un porcentaje bastante grande de errores del servidor implica problemas de comunicación con las bases de datos. Si la base de datos estuviera en otra máquina, la conectividad de red sería otra fuente de errores que no podrían registrarse.
Si tuviera que registrar los errores del servidor en una base de datos, sería crítico tener un registrador de copia de seguridad que escribiera localmente (en un registro de eventos o archivo o algo) en caso de que no se pueda acceder a la base de datos.
Ese es un buen punto. Claro, puedes verificar si todo está bien antes de iniciar sesión, pero ¿qué ocurre si algo sucede después del control? ¿O qué haces con los datos para iniciar sesión después del cheque? Dos cosas no tratadas en el artículo, al menos por lo que vi. –
Probablemente no es una mala idea si quieres los registros en una base de datos, pero yo diría que no sigas el consejo del artículo si tienes muchas entradas en el archivo de registro. El problema principal es que he visto que los sistemas de archivos tienen problemas para mantenerse al día con los registros provenientes de un sitio ocupado y mucho menos de una base de datos. Si realmente quiere hacer esto, me gustaría cargar los archivos de registro en la base de datos después de que se escriben por primera vez en el disco.
¿Piensa en una base de datos correctamente configurada que utiliza RAM para lecturas y escrituras? Esto es mucho más rápido que escribir en un disco y no presentaría el cuello de botella de IO que ve cuando atiende a un gran número de clientes que ocurre cuando los hilos comienzan a bloquearse debido a que el sistema operativo les pide que esperen ejecutando hilos que usan todos los IO disponibles. maneja.
No tengo ningún punto de referencia para probar esta información, aunque mi última aplicación está avanzando con el registro de la base de datos. Esto tendrá un failsafe como se menciona en una de estas respuestas. Si no se puede crear la conexión a la base de datos, cree una base de datos local (h2 ¿quizás?) Y escriba eso. Entonces podemos tener una verificación periódica de la conectividad de la base de datos que restablecerá la conexión, volcará la base de datos local y la enviará a la base de datos remota.
Esto podría hacerse fuera de horario si no tiene un sitio H-A.
En algún momento en el futuro espero desarrollar puntos de referencia para demostrar mi punto.
¡Buena suerte!
Acceder a DB si se puede y no ralentizar el DB :)
Es la forma más rápida manera de la manera de encontrar nada en el PP después en los archivos de registro. Especialmente si piensas más adelante lo que necesitarás. Inicio de sesión en db dejó usted tabla de registro de consulta como esta:
select * from logs
where log_name = 'wcf' and log_level = 'error'
a continuación, después usted encuentra error se puede ver todo el camino que conduce a este error
select * from logs
where contextId = 'what you get from previous select' order by timestamp
¿Cómo va a obtener esta información si inicia sesión en archivos de texto?
Editar: Como JonSkeet sugirió que esta respuesta sería mejor si he dicho que uno debe considerar la posibilidad de ingresar a db asíncrona. Así que lo digo :) Simplemente no lo necesitaba.Por ejemplo, cómo hacerlo, puede consultar "Ultra Fast ASP.NET" de Richard Kiessig.
Si la base de datos es de producción, esta es una idea horrible. Usted tendrá problemas con las copias de seguridad, la replicación, la recuperación. Me gusta más almacenamiento para DB, réplicas, si hay alguna, y copias de seguridad. Más tiempo para configurar y restaurar la replicación, más tiempo para verificar las copias de seguridad, más tiempo para recuperar la base de datos de las copias de seguridad.
- 1. sqlite e hibernate - es una buena idea?
- 2. Servidor SQL: ¿Cómo saber si una base de datos es una base de datos del sistema?
- 3. ¿Campos multivalorados una buena idea?
- 4. ¿Es una buena idea usar una columna entera para almacenar códigos postales de EE. UU. En una base de datos?
- 5. ¿Es una buena idea poner db/schema.rb en .gitignore list ??
- 6. ¿Es una buena idea una clase de "preferencias maestras"?
- 7. El almacenamiento en caché de los datos JSON descargados a la base de datos SQLite: ¿es una buena idea?
- 8. ¿Es una mala idea tener una tabla de propiedades en una base de datos?
- 9. ¿Cuál es la diferencia entre una base de datos basada en archivos y una base de datos basada en servidor?
- 10. Cookies de sesión firmadas. ¿Una buena idea?
- 11. Base de datos con "Esquema abierto" - ¿Buena o mala idea?
- 12. ¿Es una buena idea peinar la etiqueta del cuerpo?
- 13. ¿Es una buena idea devolver "const char *" de una función?
- 14. ¿Crees que es una buena idea guardar miles de millones de imágenes en la base de datos?
- 15. ¿Es una buena idea iniciar sesión en una cola de mensajes?
- 16. ¿Es buena idea escribir un daemon en Python?
- 17. Django: ¿Es una buena idea generar JS dinámicamente?
- 18. ¿Cuál es una buena forma de desnormalizar una base de datos mysql?
- 19. ¿Es una mala idea almacenar javascript y css en una base de datos?
- 20. ¿Qué es una buena biblioteca de registro activo de PHP?
- 21. ¿Es una buena idea aprender primero LINQ, luego SQL?
- 22. activerecord como modelo, ¿es esta una buena idea?
- 23. Es una buena idea guardar gráficos en MySQL?
- 24. ¿Es una buena idea purgar los viejos archivos de migración de Rails?
- 25. Bloquear para manejar concurrencia-- una buena idea?
- 26. Implementar una clase "LazyProperty": ¿es esta una buena idea?
- 27. ¿Es una buena idea usar una función CreateUUID() como sal?
- 28. ¿Es una buena idea hornear procesos en PHP/Apache?
- 29. ¿Es correcto (VERDADERO) una buena idea en C?
- 30. ¿Es una buena idea usar rowguid como clave única en el diseño de la base de datos?
Consulte esta pregunta: –