Monitorizando Liferay Portal con Nagios

Un aspecto fundamental en el mantenimiento y prevención de desastres en un sistema es la monitorización de los diferentes servicios que proporciona. Un herramienta muy popular es este campo dentro del mundo opensource es Nagios debido a la gran comunidad de usuarios y plugins existentes. Uno de ellos es check_jmx, que permite la monitorización de variables de un servidor de aplicaciones java, activando la consola jmx.

En primer lugar es necesario configurar el acceso via jmx en el servidor de aplicaciones a monitorizar, y reiniciarlo. Basicamente hay que localizar el punto del script de arranque de Jboss o Tomcat donde especificamos las opciones de java $CATALINA_OPTS de modo:

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote=true"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9999"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.password.file=/opt/liferay/jmxremote.password"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.access.file=/opt/liferay/jmxremote.access"
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=tomcat.zylk.net"

 


También es necesario editar los archivos jmxremote.access:

admin readwrite
zylk readonly


y jmxremote.password:

admin secret
zylk secret


Podemos probar que el jmx está listo con jconsole, una vez reiniciado el servidor de aplicaciones:


Luego nos descargamos el plugin para Nagios, y configuramos los comandos y servicios correspondientes. Por cierto, es un script de shell que invoca a un jar, luego para ejecutarlo en el servidor de monitorización es necesario instalar java.

La configuración del comando (commands.cfg) y la del servicio (services.cfg) en Nagios:

define command {
  command_name check_jmx_HeapMemoryUsage_Used
  command_line /usr/local/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://$HOSTADDRESS$:$ARG1$/jmxrmi -O java.lang:type=Memory -A HeapMemoryUsage -K used -username "$ARG2$" -password "$ARG3$" -w "$ARG4$" -c "$ARG5$"
}

define service {
  use                 generic-service
  host_name           baco
  service_description heap memory used
  check_command       check_jmx_HeapMemoryUsage_Used!9999!zylk!secret!750000000!800000000
}


En el caso específico que nos ocupa, monitorizamos la memoria heap de un contenedor de servlets Tomcat con un gestor de portales Liferay, aunque podría ser cualquier aplicación java, como Alfresco ECM o Nuxeo. En el blog de Toni de la Fuente, hay un detallado artículo de monitorización de Alfresco a través de varios métodos, entre los que incluye Nagios.

Como complemento a este artículo en la parte que se refiere a Nagios, es posible graficar la evolución temporal de las variables java en PNP4Nagios mediante performance data. Para ello necesitamos modificar un poco el script el check_jmx, añadiéndole los datos de rendimiento, de modo que tendremos en Nagios gráficas diarias, semanales, mensuales tipo Cacti (rrdtool) en nuestro Nagios.

El cambio en la parte final del script es el siguiente:

DIR=`dirname $0`
JMX=`$JAVA_CMD -jar $DIR/check_jmx.jar "$@"`
JMXVAL=$?
VAL=`echo $JMX | awk '{print $5}'`
echo $JMX "|$6=$VAL;;;"
exit $JMXVAL

Y este sería el resultado para la memoria heap de java del servidor Liferay:

Y esto es todo.

00

Más entradas de blog

Añadir comentarios