La editorial Packt Publishing ha publicado recientemente un libro en el que he podido ayudar en su gestación; he colaborado como revisor técnico. Se trata del libro Icinga Network Monitoring. En este libro se puede encontrar todo lo necesario para aprender lo esencial de este software de monitorización que no sólo está en auge sino que es una realidad que anuncié aquí en 2009.
Este libro va al grano desde el primer capítulo, ejemplos útiles y descripciones que te permitirán aprender este potente sistema desde cero y con una base sólida. Además también te servirá para aprender a configurar Nagios.
Posiblemente lo más interesante del libro es forma de describir el core de la aplicación, como funcionan los diferentes tests y como entender y hacer plugins.
Finalmente, se añade un capitulo entero sobre las diversas interfaces gráficas (principalmente web) que dispone Icinga. Para muestra un botón:
New Relic es un sistema de monitorización en la nube, pero no es el típico servicio de monitorización remota de puertos o disponibilidad de aplicaciones, New Relic puede ser complementario a estos sistemas ya que monitoriza los recursos del servidor o servidores de turno de forma automática, sin casi ninguna configuración (sólo la instalación del agente) y permite controlar aplicaciones web de todo tipo (Java, PHP, Ruby, .Net, Python, etc.), carga de páginas, respuesta de la web, operaciones de la JVM, de SOLR, etc. A nivel de servidor podemos monitorizar los procesos, red, discos, etc. Además de fijar umbrales para el envío de alertas. La lista completa de características están aquí, no te las pierdas. Recuerda que ya hablé por aquí de cómo monitorizar otros aspectos de Alfresco con Nagios/Icinga y generar gráficas.
Antes de seguir estos pasos puedes registrarte en la web de New Relic, tienen diferentes tipos de cuentas en función de los servicios que queramos, hay una gratuita que es la que he usado para probar mi monitorización del servidor Alfresco que tengo para pruebas.
Por lo tanto, a continuación os voy a contar como instalar el agente para monitorizar un servidor, en mi caso en un servidor Linux (Redhat/Centos) instalando el agente mediante RPM y también como monitorizar Alfresco instalando el agente java en la aplicación. Si quieres saber como instalarlo en otros sistemas operativos o aplicaciones tienes muy buena información paso a paso aquí: https://newrelic.com/docs/server/new-relic-for-server-monitoring
Descargamos e instalamos la información del repo rpm de New Relic que nos permitirá instalar posteriormente el rpm del paquete para monitorizar el servidor:
La configuración se encuentra en /etc/newrelic/nrsysmond.cfg
Con el siguiente comando activamos el servicio en el arranque del servidor (para RedHat/Centos/Fedora):
[bash]
chkconfig newrelic-sysmond on
[/bash]
Hecho esto puedes ir a tu Dashboard en la web de New Relic (http://rpm.newrelic.com) y en la pestaña “Servers” ver el servidor que empieza a dibujar gráficas como las siguientes:
Recuerda que para que esto ocurra, el servidor debe tener acceso a internet para poder enviar los datos a los servidores de New Relic.
Ahora vamos a monitorizar la aplicación Alfresco. Desde la web de ayuda de New Relic se puede descargar el agente para cada lenguaje de programación, una vez descargado sube el fichero newrelic_agent2.5.zip al servidor, vamos a ver como instalarlo para Tomcat (del bundle que viene en el paquete de Alfresco por ejemplo):
Descomprimimos el agente Java:
[bash]
unzip /root/newrelic_agent2.5.zip
[/bash]
Nos vamos al directorio donde se encuentra el servidor de aplicaciones, en mi caso de Alfresco Enterprise pero es igual de válido para Community:
[bash]
cd /opt/alfresco-enterprise-4.0.0/tomcat/
[/bash]
Instalamos el agente java en Alfresco, recuerda ejecutar este comando desde dentro del directorio de Tomcat, para otros servidores mira la ayuda:
may 18, 2012 12:50:24 PM NewRelic INFO: Agent is using Log4j
***** ( ( o)) New Relic Java Agent Installer
***** Installing version 2.5.0 …
Backed up start script to /opt/alfresco-enterprise-4.0.0/tomcat/bin/catalina.sh.20120518_125024
Added agent switch to start script /opt/alfresco-enterprise-4.0.0/tomcat/bin/catalina.sh
No need to create New Relic configuration file because:
.:. A config file already exists: /opt/alfresco-enterprise-4.0.0/tomcat/newrelic/newrelic.yml
***** Install successful
***** Next steps:
You’re almost done! To see performance data for your app:
.:. Restart your app server
.:. Exercise your app
.:. Log into http://rpm.newrelic.com
Within two minutes, your app should show up, ready to monitor and troubleshoot.
If app data doesn’t appear, check newrelic/logs/newrelic_agent.log for errors.
[/bash]
Lee bien lo que te muestra la salida del comando de instalación, debes reiniciar el servidor de aplicaciones, luego vamos a http://rpm.newrelic.com y en unos minutos empezaremos a ver información muy útil sobre Alfresco en la pestaña “Applications” como se ve a continuación:
Aunque esta es una funcionalidad activada y útil sobre todo para Alfresco Enterprise, creo que es una recomendación de seguridad necesaria y a tener muy en cuenta para entornos en producción. Sobre todo si no filtras los puertos con un firewall. Además así evitarás que alguien modifique la configuración de Alfresco.
Vamos a ver cómo cambiar usuarios y contraseñas de acceso JMX por defecto que vienen en Alfresco y que no se sobreescriban cuando actualizamos la versión y siempre tengamos protegido de forma segura el acceso a la consola de configuración y monitorización de Alfresco.
La receta es muy sencilla:
Para ello debemos copiar los ficheros alfresco-jmxrmi.access y alfresco-jmxrmi.password que podemos encontrar por defecto en el directorio tomcat/webapps/alfresco/WEB-INF/classes/alfresco/ y los copiamos por ejemplo en tomcat/shared/classes/.
Una vez copiados, podemos editarlos y modificarlos a nuestro gusto, los ficheros están muy bien comentados y no dan lugar a dudas.
En el fichero alfresco-jmxrmi.access encontramos los nombres de usuario disponibles y el rol asignado:
Por lo tanto, usaríamos el usuario monitorRole para monitorización (aplicaciones externas como Hyperic o Nagios) y el usuario controlRole para acceder mediante jconsole y configurar Alfresco. De eso ya hablé aquí.
En otros artículos (1, 2 y 3) he tratado de explicar las diferentes formas que existen para monitorizar Alfresco y tener una visión objetiva en cuanto al rendimiento de la aplicación, cuellos de botella, etc.
Hay métodos que son más intrusivos en cuanto a rendimiento que otros, por ejemplo, como indica Antonio en los comentarios de su artículo, el uso de VisualVM no sería viable para usos en producción ya que introduce retardos por cada línea de código ejecutada, JConsole (que viene con la JDK) no es tan intrusiva ya que sólo hace lecturas vía JMX de la información que ofrece la JVM (así es como funciona el plugin de Nagios para Alfresco). En el caso que nos ocupa, Javamelody, el impacto en la aplicación monitorizada es mucho menor que las anteriores ya que no se ataca directamente a la aplicación a monitorizar sino que se usan unos jars dedicados a la tarea de extraer la información.
La instalación de Javamelody es sencilla y aunque puedes ver más opciones aquí, estos son los pasos básicos para instalar la aplicación:
Paramos Alfresco (en mi caso la versión 3.3), no es obligatorio.
Copiamos los ficheros javamelody-1.19.0.jar y jrobin-1.5.9.1.jar al directorio WEB-INF/lib que está dentro del directorio webapps/alfresco (puede variar dependiendo del servidor de aplicaciones), es el directorio que se crea automáticamente cuando desplegamos alfresco.war.
Por último añadimos las siguientes líneas en el fichero WEB-INF/web.xml de la aplicación, dentro de las etiquetas web-app:
Opcionalmente, para poder generar informes en PDF debemos copiar a WEB-INF/lib el fichero itext-2.1.7.jar que podemos encontrar dentro del zip descargado en src/test/test-webapp/WEB-INF/lib/
Accedemos via web http://localhost:8080/alfresco/monitoring
Añadir a todo lo anterior unas notas:
Todos los ficheros generados por RRD se encuentran en tomcat/temp/javamelody.
Recuerda que al estar los ficheros de Javamelody dentro del directorio alfresco (alfresco.war desplegado), cuando actualices Alfresco deberás volver a hacer el procedimiento de instalación de Javamelody.
La web que nos muestra las estadísticas no tiene ningún tipo de protección por usuario y contraseña ya que es una web de consulta, no obstante, se podría establecer, mira aquí.
Dicho todo lo anterior ¿qué obtenemos? Aquí podemos ver algunas capturas de pantalla y otras muchas en este enlace:
Como comentaba anteriormente, lo he probado en Alfresco 3.3 Enterprise pero dadas las características de Javamelody debe funcionar en la versión Community. Espero vuestro feedback.
ACTUALIZACIÓN 16/Sept/2010:
Cuando arrancamos Alfresco tras haber copiado los ficheros jar, posiblemente veamos en el log de Tomcat, unas trazas como las siguientes (este error no afecta al rendimiento de la aplicación):
ERROR [log4j.jmx.LoggerDynamicMBean] Could not add appenderMBean for [null]. java.lang.NullPointerException: Invalid value (null)
at net.bull.javamelody.Log4JAppender.register(Log4JAppender.java:50)
at net.bull.javamelody.MonitoringFilter.initLogs(MonitoringFilter.java:272)
at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:98)
Contacté con el desarrollador de Javamelody, Emeric Vernat y muy amablemente me envió una nueva versión de uno de los jars que soluciona ese problema, se trata de este: http://javamelody.googlecode.com/files/javamelody-20100915.jar. Para actualizar el jar debemos parar Alfresco, borrar el fichero <tomcat>/webapps/alfresco/WEB-INF/lib/javamelody-1.19.0.jar y copiar javamelody-20100915.jar en el directorio donde se encontraba el anterior. Arrancamos Alfresco y listo. Muchas gracias por el feedback Emeric!!
Como hablamos en el artículo anterior, gracias a la característica “peformance data” que soporta el Nagios Plugin for Alfresco y a pnp4nagios, podemos conseguir gráficas de estado e históricas de todo lo que acontece en Alfresco, de esa forma podemos preveer y anticiparnos a incidencias o detectar picos y anomalías, algo que es imprescindible en herramientas de uso intensivo en un ámbito empresarial como es el caso de Alfresco.
En este artículo os cuento como instalar y configurar pnp4nagios para conseguir estadísticas extraídas con el plugin recién liberado. Aquí vemos una captura de algunas gráficas y también puedes descargar este PDF para ver un ejemplo de informe extraido de pnp4nagios.
Empecemos con la instalación de requisitos, todos los pasos son para Centos 5.4 y con Icinga, pero es aplicable a otras distribuciones con soporte Yum y por supuesto funciona con Nagios.
I’ve just released the version 1.0 of the new Nagios Plugin for Alfresco, which can be used with Icinga too. I have employed Enterprise JMX capabilities to extract and check information from Alfresco. It has been tested in Alfresco Enterprise 3.2.
Nagios is an Open Source network monitoring tool that can be configured to monitor services on a network. Icinga is a new fork of Nagios. They are both used extensively in enterprise environments.
Si tenemos Alfresco en producción (versión Enterprise), posiblemente queramos tener la aplicación controlada de la mejor forma posible y sobre todo que ese control nos aporte una visión real de lo que está pasando en el servidor y en la aplicación. Una monitorización efectiva nos permite controlar los problemas con el servicio, atisbar problemas futuros de rendimiento, detectar cuellos de botella, anomalías, etc.
La necesidad estaba ahí, necesitamos una solución de monitorización potente para Alfresco. Las versiones 3.X de Alfresco Enterprise permite ver y modificar muchos propiedades de la aplicación en tiempo real, por ejemplo:
Cambiar el nivel de log
Activar o desactivar FTP, CIFS o NFS
Poner el repositorio en solo lectura.
Poner el servidor en mono-usuario.
Limitar el número máximo de usurios o evitar accesos adicionales.
Ver número de sesiones y tickets de usuarios.
Ver número de sesiones y tickets no válidos.
Y muchos parámetros más.
Todo esto es gracias al soporte de JSR-160 vía JMX.
Vamos a ver qué opciones existen y cómo podemos implementarlas. Haremos un repaso a Hyperic, AuditSurf, cómo conectar a Alfresco con Jconsole y por último cómo implementar este tipo de monitorización con Nagios o Icinga (nuevo fork de Nagios).
Los que me conocen saben que soy un enamorado de Nagios, lo conozco desde hace años, desde que se llamaba Netsaint, lo he montado siempre que he podido para demostrar que no tiene nada que envidiar a software propietario y caro que se ve por las grandes compañías de todo el mundo. Me consta que sigue montado en sitios por los que he pasado, no diré más pistas ;).
En los últimos años, a Nagios le han salido muchos competidores en el mundo del Open Source: Zenoss, Hyperic, Pandora, OpenNMS, Zabbix, Centreon y Groundwork, estos dos últimos basados en Nagios. Lo cierto es que tenía la sensación de que Nagios estaba siendo adelantado por sus competidores. El problema principal es que, a pesar de la gran comunidad que existe en torno a Nagios, el core sólo lo desarrolla una persona en USA y parece ser que era un cuello de botella para otros desarrolladores y los usuarios finales. Esto no ha caído en saco roto y la comunidad se ha puesto manos a la obra para que el proyecto pueda seguir creciendo como se merece. Así que la gente de nagios-portal.org, NagVis, NagTrap, PNP4Nagios, check_multi, NagiosGrapher y NETWAYS han realizado un fork llamado Icinga, que significa en Zulú “explorar o examinar”.
Es la grandeza del Software Libre, y gracias a la libretad de adaptar, modificar, publicar podemos tener noticias como esta. Como ellos mismos indican en su FAQ ya ha ocurrido esto otras veces, por ejemplo con Mambo->Joomla o con XFree86->X.org.
Todo esto está muy bien, pero ¿ganará la comunidad con este cambio? A tenor de lo que la gente de Icinga promete, estoy seguro que si, y mucho. Veamos:
Soportará características y plugins de Nagios y será facil migrar desde Nagios.
Soportará extensiones y desarrollos e integraciones gracias a una API.
Tendrá una nueva interfaz web basada en PHP.
Tendrá como addons: PNP, NagVis, Grapher V2 y NagTrap.
Nueva interfaz NDO con soporte para ser almacenado en ficheros o en base de datos permitiendo el acceso a esos datos desde la API con PHP o desde WebServices.
ReportDesigner para realizar informes personalizados y se podrán configurar envíos automáticos de informes cada cierto tiempo.
También se contemplan mejoras para grandes instalaciones.
Por ahora toca esperar, parece que la primera versión de Icinga saldrá el próximo 20 de Mayo. Habrá que estar atento, yo ya he puesto una nota en mi calendario.
Cacti es un entorno para gestión de gráficas con RRDtool realizado con PHP y almacenando datos en MySQL, todo esto haciendo consultas a los dispositivos través de SNMP. Este software nos permitirá ver, vía web, gráficas sobre el estado de todos los parámetros que tengamos definidos y que podamos definir gracias a SNMP.