JMX Querier plugin

Este documento describe la funcionalidad del plugin de JMX y su integración con PandoraFMS.

Introducción

Ver. 19-06-2024

Este documento describe la funcionalidad del plugin de JMX y su integración con PandoraFMS. El plugin de JMX permite la integración de las estadísticas de los Mbeans en PandoraFMS.

Tipo: Plug-in server

Matriz de compatibilidad

Sistemas donde se ha probado Rocky linux, Fedora
Sistemas donde funciona Cualquier sistema linux

Pre requisitos

 

1. Activación del monitoreo JMX remoto para aplicaciones Java
Una aplicación Java no requiere software adicional instalado, pero debe iniciarse con las siguientes opciones de línea de comandos para habilitar el soporte para la supervisión JMX remota.

Al menos, si solo desea iniciar el monitoreo de una aplicación Java básica en un host local sin seguridad, use estas opciones:

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.rmi.port=9090 \
-Djava.rmi.server.hostname=localhost"

Esto configura Java para aceptar conexiones JMX entrantes en el puerto 9090 únicamente desde el localhost, sin necesidad de autenticación ni SSL.

Si se requiere authenticación, se debe de habilitar:

-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.rmi.port=9090 \
-Djava.rmi.server.hostname=localhost \
-Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat/conf/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat/conf/jmxremote.access

2. El sistema que ejecuta el plugin debe de tener conectividad y poder llegar al servidor JMX

Parámetros

Parámetros conexión y configuración JMX

--jmx_url Endpoint de conexión con el servidor JMX, ejemplo : service:jmx:rmi:///jndi/rmi://localhost:9090/jmxrmi
--list_mbeans Usando este parámetro, se pueden listar todos los Mbeans disponibles en el servidor JMX. Se activa a 1. Por defecto 0. 
--list_attr Usando este parámetro se pueden listar todos los attributos disponibles de un Mbean, pasandole el mbean. Ejemplo: "java.lang:name=G1 Old Generation,type=GarbageCollector"
--conf Archivo con las metricas que monitorizara el plugin.
--user Usuario del servidor JMX en caso de ser necesario para autenticar.
--password Password del servidor JMX en caso de ser necesario para autenticar.

El uso de los parámetros --list_mbeans, --list_attr y conf para descubrir e integrar estadísticas viene mas detallado en el capitulo : " Descubriendo estadísticas e integrandolas en la ejecución"

Parámetros configuración Pandora

--agent_name
Nombre del agente que contendrá todos los módulos de estadísticas
--module_prefix Prefijo para todos los módulos creados por el plugin
--interval Intervalo de monitorización del agente
--data_dir
Directorio de datos de PandoraFMS
--group Grupo en PandoraFMS
--transfer_mode
Modo de transferencia de datos, local o tentacle
--tentacle_port
Puerto de tentacle
--tentacle_address
IP de tentacle

Parámetros extra

--log_file Ruta del fichero de logs

Ejecución manual

El formato de ejecución del plugin es el siguiente :

./jmx_querier --jmx_url < jmx url endpoint > \
[--list_mbeans < 1 o 0 >] \
[--list_attr < nombre mbean >] \
[--conf < ruta del fichero conf con las estadísticas >] \
[--user < usuario del servidor jmx >] \
[--password < password del servidor jmx >] \
[--agent_name < nombre del agente >] \
[--module_prefix < prefijo para los módulos >] \
[--group <group>] \
[--interval <interval>] \
[--temporal <temporal>] \
[--data_dir <data_dir>] \
[--transfer_mode <transfer_mode>] \
[--tentacle_port <tentacle_port>] \
[--tentacle_address <tentacle_address>] \
[--log_file <log_file>]

Por ejemplo:

./jmx_querier --jmx_url "service:jmx:rmi:///jndi/rmi://localhost:9090/jmxrmi" --conf jmx.conf --user "controlRole" --password "myPassword"

Descubriendo estadísticas e integrandolas en la ejecución

El plugin cuenta con dos parametros de descubriemiento, que nos permitirán descubrir estadísticas, que luego se pueden incorporar en un fichero conf, para monitorizarlas.

--list_mbeans

Este parámetro nos permite listar todos los mbeans de nuestro servidor, ejemplo :

image.png

--list_attr

Si se usa este parámetro, con el nombre de alguno de los mbean que lista el plugin, listará todos los atributos del mbean, esto es cada estadística, que luego puede ser definida en el conf

image.png

Definir estadísticas y umbrales en el fichero de configuración

Las estadísticas (atributos) descubiertos, pueden copiarse en un fichero de configuración, en el que también se podrán definir umbrales.

Por cada línea en el fichero de configuración se debe añadir un atributo y esto creará un modulo con esa estadística en Pandora. Si es necesario configurar umbrales, se deben especificar a la derecha del atributo, separado cada umbral por |. Ejemplo:

Métrica sin umbral 

java.lang:type=Threading/ThreadCount

image.png

Métrica con umbral

java.lang:type=Threading/TotalStartedThreadCount|min_warning 30|min_critical 45

image.png

Configuración en PandoraFMS

Para configurar el plugin en PandoraFMS, se deben seguir los siguientes pasos :

1. Subir el plugin a PandoraFMS, por ejemplo en la siguiente ruta:

/usr/share/pandora_server/util/plugin

2. Dirigirse al apartado plugins y crear uno nuevo:

imagen.png

    3. Se le añade nombre, descripción y timeout:

image.png

4. Se añade la ruta del plugin en el comando y los parámetros necesarios para la ejecución de este. 

Para cada parámetro se debe configurar una macro, siendo la sintaxis de esta macro la siguiente : _fieldx_, siendo x el numero posicional del parámetro.

image.png

5. Se configuran las macros anteriores, añadiendo en cada una el valor del parámetro:

image.png

6. Una vez configurado se debe crear un módulo en un agente que ejecute el plugin. En el menu de módulos de un agente creamos un módulo de tipo plugin nuevo:

imagen.png

7. En el menú de configuración del módulo, le ponemos un nombre, seleccionamos el plugin antes configurado y se le debe dar a "crear".

image.png

8. Se creara el agente con los módulos o los módulos en el agente seleccionado en la siguiente ejecución del plugin.

Agentes y módulos generados por el plugin

El plugin creará un agente, con el nombre que se le pase por el parámetro --agent_name (o JMX por defecto) que contendrá los módulos de cada estadística definida en el fichero de configuración. Así, por ejemplo, la ejecución de este plugin contra el siguiente conf:

java.lang:type=Threading/TotalThreadAllocatedBytes
java.lang:type=Threading/CurrentThreadAllocatedBytes
java.lang:type=Threading/ThreadAllocatedMemoryEnabled
java.lang:type=Threading/ThreadAllocatedMemorySupported
java.lang:type=Threading/ThreadCount
java.lang:type=Threading/TotalStartedThreadCount
java.lang:type=Threading/AllThreadIds
java.lang:type=Threading/CurrentThreadCpuTime
java.lang:type=Threading/CurrentThreadUserTime
java.lang:type=Threading/ThreadCpuTimeSupported
java.lang:type=Threading/ThreadCpuTimeEnabled
java.lang:type=Threading/ThreadContentionMonitoringEnabled
java.lang:type=Threading/ThreadContentionMonitoringSupported
java.lang:type=Threading/CurrentThreadCpuTimeSupported
java.lang:type=Threading/ObjectMonitorUsageSupported
java.lang:type=Threading/SynchronizerUsageSupported
java.lang:type=Threading/PeakThreadCount
java.lang:type=Threading/DaemonThreadCount
java.lang:type=Threading/ObjectName

Crearía los siguientes módulos :

image.png