2012-06-19 10 views
29

Estoy buscando una manera de centralizar las preocupaciones de registro de software distribuido (escrito en Java) que sería bastante fácil, ya que el sistema en cuestión tiene un solo servidor. Pero teniendo en cuenta que es muy probable que en el futuro se ejecuten más instancias del servidor en particular (y habrá más aplicaciones que lo necesiten), tendría que haber algo así como un Servidor de registro, que se ocupa de los registros entrantes y los hace accesibles para el equipo de soporte.Centralized Java Logging

La situación ahora es que varias aplicaciones java usan log4j que escribe sus datos en archivos locales, por lo que si un cliente expira problemas el equipo de soporte tiene que solicitar los registros, lo cual no siempre es fácil y toma mucho tiempo. En el caso de una falla del servidor, el problema de diagnóstico no es tan grande, ya que de todos modos hay acceso remoto, pero aun así, monitorear todo a través de un Servidor de Registro todavía tendría mucho sentido.

Mientras que fui a través de las preguntas con respecto a "registro centralizado" He encontrado otra Question (en realidad, el único con una (en este caso) respuesta utilizable. Siendo el problema, todas las aplicaciones se ejecutan en un entorno cerrado (dentro de una red) y las directrices de seguridad no permiten que nada relacionado con el software interno salga de la red de entornos.

También encontré un maravilloso artículo acerca de cómo se podría llamar implement un Servidor de registro. Como el artículo fue escrito en 2001, Hubiera pensado que alguien ya podría haber resuelto este problema en particular. Pero mis resultados de búsqueda no tuvieron nada.

Mi pregunta: ¿Existe un marco de registro que maneja el registro en redes con un servidor centralizado al que puede acceder el equipo de soporte?

Especificación:

  • disponibilidad
  • servidor tiene que ser ejecutado por nosotros.
  • Compatibilidad con Java 1.5
  • Compatibilidad con una red heterogénea.
  • mejor de los casos: Protocolo utiliza HTTP para enviar los registros (para evitar firewall-temas)
  • mejor de los casos: utiliza log4j o logback o básicamente cualquier cosa que implementa slf4j

No es necesario, pero es agradable tienen

  • autenticación y la seguridad es por supuesto un problema, pero se pueden retrasar por lo menos durante un tiempo (si se trata de software abierto que se extendería a nuestras necesidades OT: siempre devolver a la proyectos).
  • La minería de datos y el análisis es algo que es muy útil para mejorar el software, pero podría ser una aplicación externa.

Mi peor de los casos es que no es un software como ese. Para ese caso, probablemente implementaríamos esto nosotros mismos. Pero si existe una aplicación cliente-servidor, apreciaría mucho no tener que hacer este trabajo particularmente problemático.

Gracias de antemano

Actualización: La solución tiene que ejecutarse en varias plataformas compatibles con Java. (Sobre todo Windows, Linux, algunos HP Unix)

Actualización: Después de mucha más investigación encontramos una solución que pudimos adquirir. clusterlog.net (fuera de línea desde al menos mediados de 2015) proporciona servicios de registro para software distribuido y es compatible con log4j y logback (que es compatible con slf4j). Nos permite analizar el camino de cada usuario a través de la aplicación. Por lo tanto, es muy fácil reproducir errores informados (o incluso no informados). También nos notifica eventos importantes por correo electrónico y tiene un sistema de informes donde los registros del mismo origen se vuelven a sumar en un formato de fácil acceso. Desplegaron (lo cual fue perfecto) aquí hace solo un par de días y está funcionando muy bien.

Actualización (2016): esta pregunta todavía recibe mucho tráfico, pero el sitio al que me refería ya no existe.

+0

usted no menciona qué sistema operativo se está ejecutando en, o si necesita ser multiplataforma, pero si' re on * nix, es posible que desee comprobar el apéndice syslog. Si mal no recuerdo, también hay un apilador de SMTP: ¿podría simplemente crear una cuenta de correo electrónico interna para recibir los registros por correo electrónico? – GreyBeardedGeek

+0

Supongo que ha considerado una configuración syslogd en red? – Thilo

+0

Alternativamente, puede iniciar sesión en una base de datos. http://www.tutorialspoint.com/log4j/log4j_logging_database.htm – SWoeste

Respuesta

6

Puede usar Log4j con el SocketAppender, por lo tanto, debe escribir la parte del servidor como proceso de LogEvent. ver http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SocketAppender.html

+0

Tenga en cuenta que si ambos lados usan Log4j, entonces solo tiene que escribir un poco. – Arcadien

+0

Me pregunto si puedo escribir mi propio Appender que escribe en un canal de IRC. Sin embargo, el apéndice Syslog me puede servir mejor. PD: estoy hablando de log4j2. –

3

Eche un vistazo a logFaces, parece que sus especificaciones se cumplen. http://www.moonlit-software.com/

  • disponibilidad (cheque)
  • Server tiene que ser ejecutado por nosotros. (verificar)
  • Compatibilidad con Java 1.5 (verificar)
  • Compatibilidad con una red heterogénea. (Cheque)
  • mejor de los casos: Protocolo utiliza HTTP para enviar los registros (para evitar firewall-temas) (casi TCP/UDP)
  • mejor de los casos: utiliza log4j o logback o básicamente cualquier cosa que implementa slf4j (cheque)
  • de autenticación (verificación)
  • minería y análisis (posible a través de la extensión api) de datos
+0

Es exactamente lo que necesitaba también ... se ajusta a la ley; tendremos que ver si podemos pagarlo :) –

3

hay una solución lista para el uso de Facebook - Scribe - es decir, utilizando Apache Hadoop bajo el capó. Sin embargo, la mayoría de las compañías de las que soy consciente todavía tienden a desarrollar sistemas internos para eso. Trabajé en una de esas compañías y trabajé con registros allí hace dos años. También usamos Hadoop. En nuestro caso, tuvimos la siguiente configuración:

  • Teníamos un pequeño grupo dedicado de máquinas para la agregación de registros.
  • Los trabajadores extrajeron los registros del servicio de producción y luego analizaron las líneas individuales.
  • Luego los reductores agregarían los datos necesarios y prepararían los informes.

Teníamos un número pequeño y fijo de informes que nos interesaban. En raras ocasiones, cuando queríamos realizar un tipo diferente de análisis, simplemente añadíamos un código de reductor especializado para eso y opcionalmente lo ejecutamos con anterioridad registros

Si no puede decidir con anticipación qué tipo de análisis le interesa, será mejor almacenar los datos estructurados preparados por los trabajadores en HBase o en alguna otra base de datos NoSQL (here, for example, people use Mongo DB). De esta forma, no necesitará volver a agregar datos de los registros sin procesar y podrá consultar el almacén de datos en su lugar.

Hay una serie de buenos artículos sobre tales soluciones de agregación de registros, por ejemplo, using Pig to query the aggregated data. Pig le permite consultar grandes conjuntos de datos basados ​​en Hadoop con consultas similares a SQL.

+1

Scribe parece estar abandonado ... – Tomasz