Pregunta

Quiero encontrar o desarrollar una aplicación que puede ejecutarse como un demonio, notificar al administrador por correo electrónico o SMS cuando las aplicaciones Java que se ejecutan en un host obtener las excepciones o errores. Sé JVMTI puede lograr parte de mi objetivo , pero influirá en el rendimiento de las aplicaciones supervisadas (no sé cuánto va a ser, será aceptable si es leve), además de que parece ser un trabajo troublesom desarrollar un agente JVMTI y no estoy seguro lo que sucedería si varias aplicaciones que se ejecutan al mismo tiempo usando el mismo agente. ¿Hay alguna solución mejor? Gracias de antemano.

¿Fue útil?

Solución

Una forma sería utilizar un sistema de registro como log4j que publica todos los errores que ocurren en el sistema A a un servidor de registro en el sistema B desde donde se puede monitorear los han producido errores. Esto no es una solutation completamente genérico sin embargo, ya que sólo excepciones propagadas a log4j (o cualquier otro sistema de registro) serían manejadas -. Pero puede ser un buen comienzo

Otros consejos

La mejor solución es hacer que la aplicación Java enviar sus errores a través de correo electrónico / SMS. El problema es que los programas generarán excepciones y manejar correctamente durante el funcionamiento normal. Solo deseas particular, una excepción.

En caso contrario se podría escribir un lector de registros, que lee los registros de la aplicación. Esto es difícil de lograr, pero se puede hacer.

Una aplicación puede generar una excepción por 1000 días y todavía se comporta normalmente debido a que la aplicación sabe cómo manejar estas excepciones. p.ej. cada vez que una conexión de socket se cierra una excepción puede ser lanzado.

OMI, el mejor enfoque consiste en implementar un sistema de control externo. Esta lata:

  • monitores múltiples aplicaciones
  • monitor de servicios de infraestructura
  • disponibilidad de la red y el monitor de máquina de accesibilidad,
  • los recursos del monitor, tales como el uso del procesador y el sistema de archivos.

Aplicaciones puede monitorizarse en una variedad de maneras, incluyendo:

  • mediante el procesamiento de eventos de registro,
  • mirando para reinicia la aplicación,
  • enviando un "ping" apis web de la aplicación para comprobar liveness servicio, y
  • mediante el uso de las interfaces JMX de la aplicación.

Esta información se puede filtrar y prioridad de una manera inteligente y eventos críticos se puede informar por cualquier medio que sea más apropiado.

No quiero aplicaciones individuales envío de correos electrónicos, debido a que no tiene suficiente información para hacer un trabajo decente. Por otra parte, poner la lógica de presentación de informes en las aplicaciones individuales es probable que conduzca a la aplicación inconsistente, pobre capacidad de configuración, y así sucesivamente.

Hay una alternativa cercana a JVMTI: JPDA . Esta infraestructura le permite crear un mando a distancia "depurador" (sí, eso es lo que está planeando hacer) utilizando código Java, y se conecta a la máquina virtual utilizando la conexión local o remota.

No será, como por JVMTI, una sobrecarga para la ejecución del programa. Sin embargo, como la Trace.java El ejemplo muestra, es bastante fácil de implementar y ambos se conectan a VM de destino.

Por último, observe si desea código del instrumento de ejecución de servidor de aplicaciones (JBoss, Glassfish, Tomcat, lo que sea) hay varios otros medios disponibles.

sigo el patrón en el que todas las excepciones se registra en una tabla. A continuación, un RSS selecciona el avance de esa tabla. Suscribo a la fuente RSS en MS Outlook en el trabajo y también en mi teléfono Android con un programa llamado NewsRob. NewsRob Vamos a poner mi teléfono me avise cuando hay algo nuevo.

Blog sobre cómo hacer esto AQUÍ. es en .NET, pero se entiende la idea.

Como paso relacionado he encontrado una manera de notificar a mí mismo cuando algo no sucedió. Ese blog es AQUÍ.

Hay un montón de aplicaciones por ahí que lo que busca de una manera que no lo hace impacto en el rendimiento. ¿Ha tenido un vistazo a Kibana / Elasticsearch o Splunk o Logscape para soluciones empresariales (ambos también tienen versiones gratuitas).

Me voy a repetir lo que ya se ha dicho, y lo más destacado de Java ya se ofrece y lo que puede hacer con un sistema de monitoreo externo. Java ya ofrece:

  • log4j - errores de registro, ADVERTENCIAS fatal y excepciones en un archivo
  • JMX - Crear métricas de aplicaciones personalizados y también tiene acceso a java.lang / * que le dará el uso del montón de memoria, recolección de basura, contadores de hilo, etc.
  • JVM registro GC - se puede registrar todos los eventos de su recolección de basura a un archivo y el reloj para cualquier largas colecciones completa GC.

Un sistema de monitoreo externo le permitirá alertas conjunto desencadenadas diferentes escenarios operacionales. También obtendrá la visualización del rendimiento de su sistema a través de cartas. He usado Logscape de java aplicación en el pasado para controlar los procesos de java 30 hacia fuera anfitriones over3.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top