Bloggers recientes

 

[ Blog ]
[ Wiki ]
[ Slideshare ]
[ Twitter ]
[ YouTube ]
Cesar Capillas Mensajes: 163
Estrellas: 7
Fecha: 19/10/14
Silvia Rodriguez Mensajes: 8
Estrellas: 0
Fecha: 8/10/14

Archivo

Tags

noBlogo - El blog de zylk.net

Entradas con etiqueta <em>jmx</em>.

More about JMXTerm and Alfresco
One of the multiple possibilities for JMXTerm client is scripting for defined tasks in your Alfresco Enterprise Server (as pointed out in the previous post). Let's check it with some simple examples. Consider the next shell script called (run-jmx.sh) 
 
#!/bin/bash
java -jar jmxterm-1.0-alpha-4-uber.jar -l service:jmx:rmi:///jndi/rmi://localhost:50500/alfresco/jmxrmi -p change_asap -u controlRole -i $1
 
And then the following text file (show-users.jmx)
 
domain Alfresco
bean Alfresco:Name=RepoServerMgmt
get UserCountAll
run listUserNamesAll
close
 
The result is something like:
 
$ ./run-jmx.sh show-users.jmx
 
Welcome to JMX terminal. Type "help" for available commands.
#domain is set to Alfresco
#bean is set to Alfresco:Name=RepoServerMgmt
#mbean = Alfresco:Name=RepoServerMgmt:
UserCountAll = 3;
 
#calling operation listUserNamesAll of mbean Alfresco:Name=RepoServerMgmt
#operation returns: 
[ admin, zylk, alfresco ]
#disconnected
 
You can prepare then other useful jmx scripts such as (ldap-resync.jmx)
 
domain Alfresco
bean log4j:logger=org.alfresco.repo.security.sync
set priority DEBUG
bean Alfresco:Category=Synchronization,Type=Configuration,id1=default
run stop
run start
bean log4j:logger=org.alfresco.repo.security.sync
set priority INFO
close
 
Finally you also may use it for monitoring purposes, for example, for a nagios monitoring (in the same way that Alfresco Nagios Icinga plugin does it with check_jmx.jar).
 
Some references of this are:
JMX command line recipes for Alfresco revisited

I compiled here below some simple JMX recipes for Alfresco with the help of JMXTerm.

 
SETTING LOG4J LEVELS (FOR CIFS)

In many cases, we have to deal with problems in production environments (for example with CIFS). We can't reboot but we must take a look. For example, so:

zylk@scgd:~/jmxterm-1.0-alpha-4$ java -jar jmxterm-1.0-alpha-4-uber.jar

$>open service:jmx:rmi:///jndi/rmi://localhost:50500/alfresco/jmxrmi -p change_asap -u controlRole
$>domain Alfresco
$>bean log4j:logger=org.alfresco.smb.protocol
#bean is set to log4j:logger=org.alfresco.smb.protocol

$>info
#mbean = log4j:logger=org.alfresco.smb.protocol
#class name = org.apache.log4j.jmx.LoggerDynamicMBean
# attributes
  %0   - name (java.lang.String, r)
  %1   - priority (java.lang.String, rw)
# operations
  %0   - void addAppender(java.lang.String class name,java.lang.String appender name)
#there's no notifications

$>get priority
#mbean = log4j:logger=org.alfresco.smb.protocol:
priority = ERROR;

$>set priority DEBUG
#mbean = log4j:logger=org.alfresco.smb.protocol:
priority = DEBUG;


HINT: info provides the attributes to get and set, and operations to run

 
CHECK ALFRESCO GLOBAL PROPERTIES

We can not know all the properties of the repository (many of them in repository.properties file). We can get the "real" information and explore them with

$>bean Alfresco:Name=GlobalProperties    
#bean is set to Alfresco:Name=GlobalProperties
$>get authentication.chain          
#mbean = Alfresco:Name=GlobalProperties:
authentication.chain = external1:external,ldap1:ldap,alfrescoNtlm1:alfrescoNtlm;

HINT: Take advantage of the autocomplete option for beans and properties


CHECK SYSTEM PROPERTIES

Sometimes you may need to access to system properties too

$>bean Alfresco:Name=SystemProperties                                     
#bean is set to Alfresco:Name=SystemProperties
$>get file.encoding
#mbean = Alfresco:Name=SystemProperties:
file.encoding = UTF-8;
$>get user.language
#mbean = Alfresco:Name=SystemProperties:
user.language = es;


HINT: Other possibility for opening the connection is:

$>jvms
1435     (m) - org.apache.catalina.startup.Bootstrap start
3230     ( ) - jmxterm-1.0-alpha-4-uber.jar
$>open 1435 -u controlRole -p change_asap
#Connection to 1435 is opened

HINT: If you are connected to Alfresco server locally, you can type only open 1435

 
HOW TO KNOW WHO MANY PEOPLE IS CONNECTED TO THE REPOSITORY

Sometimes is useful:


$>bean Alfresco:Name=RepoServerMgmt
#bean is set to Alfresco:Name=RepoServerMgmt
$>get UserCountAll
#mbean = Alfresco:Name=RepoServerMgmt:
UserCountAll = 1;
$>run listUserNamesAll
#calling operation listUserNamesAll of mbean Alfresco:Name=RepoServerMgmt
#operation returns:
[ zylk ]

DISABLING FILESERVERS

For any reason, you may want to disable a subsystem temporally:

$>bean Alfresco:Category=fileServers,Type=Configuration,id1=default
#bean is set to Alfresco:Category=fileServers,Type=Configuration,id1=default
$>run stop

 
STOPPING AND RESTARTING SUBSYSTEMS (i.e: LDAP)

Or just maybe, disallow authentication LDAP user during a maintainance operation

$>bean Alfresco:Category=Authentication,Type=Configuration,id1=managed,id2=ldap1
$>run stop


and later, when all it's correct

$>run start

 
LDAP USER RESYNC

Other common task may be resync our LDAP:

$>bean log4j:logger=org.alfresco.repo.security.sync
$>set priority DEBUG
$>bean Alfresco:Category=Synchronization,Type=Configuration,id1=default
$>run stop
$>run start
$>bean log4j:logger=org.alfresco.repo.security.sync
$>set priority INFO


And for full LDAP resync:

$>bean Alfresco:Category=Synchronization,Type=Configuration,id1=default
$>set synchronization.synchronizeChangesOnly false
$>run stop
$>run start

 

SETTING ALFRESCO IN READ ONLY MODE

$>bean Alfresco:Name=RepoServerMgmt
#bean is set to Alfresco:Name=RepoServerMgmt
 
$>get ReadOnly
#mbean = Alfresco:Name=RepoServerMgmt:
ReadOnly = false;
 
$>bean Alfresco:Category=sysAdmin,Type=Configuration,id1=default
#bean is set to Alfresco:Category=sysAdmin,Type=Configuration,id1=default
 
$>set server.allowWrite false
#Value of attribute server.allowWrite is set to false
 
$>get server.allowWrite
#mbean = Alfresco:Category=sysAdmin,Type=Configuration,id1=default:
server.allowWrite = false;
 
$>bean Alfresco:Name=RepoServerMgmt
#bean is set to Alfresco:Name=RepoServerMgmt
 
$>get ReadOnly
#mbean = Alfresco:Name=RepoServerMgmt:
ReadOnly = true;
 

SETTING ALFRESCO IN READ ONLY MODE VIA JMX SCRIPT

From the command line, you can get or set values of the repository. For example, setting ReadOnly mode (maintenance mode - preparing a migration or a backup).

$ echo get -s -b Alfresco:Name=RepoServerMgmt ReadOnly | java -jar jmxterm-1.0-alpha-4-uber.jar -l service:jmx:rmi:///jndi/rmi://localhost:50500/alfresco/jmxrmi -p change_asap -u controlRole -v silent -n

$ echo set -b Alfresco:Category=sysAdmin,Type=Configuration,id1=default server.transaction.allow-writes false | java -jar jmxterm-1.0-alpha-4-uber.jar -l service:jmx:rmi:///jndi/rmi://localhost:50500/alfresco/jmxrmi -p change_asap -u controlRole -v silent -n



http://wiki.cyclopsgroup.org/jmxterm/embed

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 $JAVA_OPTS de modo:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.password.file=/opt/liferay/jmxremote.password"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.access.file=/opt/liferay/jmxremote.access"

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

admin readwrite
zylk readonly

y jmxremote.password:

admin secret1
zylk secret2

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) en Nagios:

define command {
  command_name check_alfresco_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$’
}

y la del servicio (services.cfg):

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

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.

Monitorizando Liferay Portal con Nagios II

Siguiendo con el artículo recientemente publicado por Cesar, vamos a dar los tips para monitorizar algun mbean específico de Liferay, en vez de monitorizar un atributo general de la maquina virtual. Para ello accedemos a jconsole y localizamos el mbean que queremos monitorizar,

En el caso que nos ocupa, hemos localizado el bean que tiene como atributo el número de páginas de publicadas en el wiki. Para ello nos hemos ayudado de la herramienta jconsole:

 

Una vez localizado el bean testamos el comando a ejecutar,  en este caso:

./check_jmx -U service:jmx:rmi:///jndi/rmi://192.168.94.115:9999/jmxrmi -O "JSPWiki:component=Core,name=Core bean" -A pages -K used -username zylk -password secret1 -w 1000 -c 2000

obtenemos el resultado del mismo
JMX OK -pages.used = 45 |pages=45;1000;2000;0

 

Ahora solo quedaría ajustar el máximo y el mínimo y añadirlo al nagios tal como se ha explicado en el anterior artículo. Con esto podremos monitorizar:

  • Número de usuarios
  • Páginas cacheadas
  • % de error en la búsqueda de paginas cacheadas
  • .....

 

Una breve revisión de Alfresco Enterprise 3.2

Hace un par de meses salió la versión Enterprise de Alfresco 3.2 con numerosas novedades y he tenido tiempo de madurar algunas de las nuevas funcionalidades que en mi opinión suponen un salto cualitativo y cuantitativo en las capacidades funcionales del popular gestor documental de empresa. Menciono a continuación algunas de ellas:

  • Configuración: La configuración del repositorio, los programas externos y subsistemas se hace ahora un sólo archivo de configuración, facilitando enormemente configurar una cadena de autenticación (LDAP, NTML, Alfresco...). Por otro lado, aumentan las posibilidades de despliege dinámico directamente a través del cliente web, añadir modelos de contendido, webscripts, javascripts, templates de freemaker a través del gestor web (Alfresco Explorer).
  • Soporte IMAP: Siempre hemos comentado que el correo electrónico es un punto clave hoy en día como entrada de información y documentación en la empresa. En esta versión de Alfresco es posible navegar por el repositorio desde nuestro cliente de correo favorito a través de IMAP, añadir documentos y visualizar los metadatos (via webscripts) extendiendo el concepto de unidad compartida al correo electrónico.

  • Mejoras en Alfresco Share 3.2: La verdad es que Alfresco Share 3.2 esta mejorando en cada versión y se presenta como un sustituto natural al monolítico Alfresco Explorer al que según tengo entendido están pensando en jubilar. En esta versión es posible navegar por fin, por todo el repositorio (esta funcionalidad no está activada por defecto) y no sólo por sus sites, y se han implementado numerosas mejoras como la integración con el módulo de records. Además hay que tener en cuenta que Alfresco Share si dispone de un componente para subir varios archivos a la vez, una característica imprescindible que antes sólo se podía hacer via unidad compartida. Por otro lado, son posibles además, ciertas acciones avanzadas como editar metadatos, gestionar aspectos, cambiar tipos o asignar un workflow.

  • Capacidades JMX: Es posible monotorizar numerosos parámetros del servidor de aplicaciones y del gestor documental tales como: el número de usuarios y grupos de Alfresco, el tamaño del repositorio, el número de conexiones activas en la bbdd, las sesiones abiertas, las caches o incluso valores de hibernate y lucene. Ha salido recientemente un módulo para nagios para Alfresco Enterprise 3.2
  • El Content Store Selector y las posibilidades de repositorio distribuido: Dos de las características más potentes y flexibles de Alfresco son sin ninguna duda los aspectos (el modelo AOP de los tipos de contenido de Alfresco) y las reglas de automatización de contenido (condición / acción). Con estas dos patas se puede hacer practicamente de todo en Alfresco, y aquí dejo un buen ejemplo. En esta versión es posible definir almacenes distribuidos, permitiendo guardar la información en base a reglas de contenido a través del aspecto cm:storeSelector. Esto podría utilizarse en las siguientes situaciones:
    • Repositorios distribuidos de una organización multidepartamental donde a cada unidad le corresponde un determinado repositorio. Desde el punto de vista lógico, los diferentes espacios de los departamentos se gestionarían con reglas de contenido entrante que alojarían los archivos en diferentes unidades de red departamentales y ubicadas en general en máquinas o discos en red diferentes. Las acciones de la regla serían en primer lugar aplicar el aspecto cm:storeSelector si no esta definido por defecto y aplicar un pequeño script de javascript que modifica la propiedad  contentStore del aspecto.
    • Almacenaje distribuido de documentos según su mimetype (también en base a reglas de contenido). Esta es una de esas cosas que siempre ha buscado el consultor documental que viene de Documentum y permite el guardado de información selectiva en discos en red según mimetype.
    • Otras posibilidades también se refieren al archivado de documentos.
  • CMIS: Alfresco lleva unas cuantas versiones apostando fuerte por el CMIS, como ya hemos señalado en este blog anteriormente en relación a la integración de Alfresco con Joomla. En breve publicaremos un artículo de la integración de Drupal y Alfresco con motivo a nuestra visita al próximo Drupal Camp de Barcelona.
  • Portlets: Una de las últimas características de Alfresco Enterprise es la habilidad de convertir Web Scripts en portlets que se ejecutan en portales (contenedores de portlets) como Liferay incluyendo soporte para SSO y generando URLs amigables.
Mostrando el intervalo 1 - 5 de 6 resultados.
Resultados por página 5
de 2