Notificaciones por correo de errores en aplicaciones Java

La monitorización del estado de las aplicaciones es esencial para mantener un servicio óptimo de las mismas. Analizar históricos de uso de recursos, volcados de memoria, etc… Por otro lado, en caso de falta de disponibilidad de la aplicación por un error, lo ideal es tener conocimiento de ello lo antes posible para poder actuar con rapidez y restablecer el servicio perdido o degradado.

Para este menester existen dos sencillos flags de JVM que podemos añadir a nuestro JAVA_OPTS correspondiente. Se trataría precisamente de que en caso de que se produjera un error que tumbara el servicio de una aplicación, recibiéramos una notificación por correo:

# Enviar un mail en caso de error fatal (se genera un fichero hs_err*)
-XX:OnError="mail -s 'Fatal error in Myapp on `hostname` date `date`, please check' mymail@mydomain.com"

# Enviar un mail en caso de OutOfMemory
-XX:OnOutOfMemoryError="mail -s ' OutOfMemory error in Myapp in `hostname`, please check hprof generated file' mymail@mydomain.com"

Normalmente en los servidores de aplicaciones como Jboss, Weblogic o Tomcat las opciones JAVA_OPTS van entrecomilladas, así que tendremos que escapar con \" las comillas dobles de estas opciones en las que especificamos la acción a realizar. Por ejemplo:

JAVA_OPTS="$JAVA_OPTS -XX:OnError=\"mail -s 'Fatal error in Myapp on `hostname` date `date`, please check' mymail@mydomain.com\" -XX:OnOutOfMemoryError=\"mail -s ' OutOfMemory error in Myapp in `hostname`, please check hprof generated file' mymail@mydomain.com\""

Si bien se trata de una solución que no sustituye a otras formas de monitorización más complejas e integrales, no deja de ser una primera línea de alerta que nos puede ayudar como administradores. Además, no requiere estar parseando ni monitorizando logs.

Para enviar los correos ya comenté en otro artículo cómo instalar y configurar un sencillo MTA con SSMTP que para este caso sirve perfectamente.