# JMX Querier plugin # 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 ] \ [--interval ] \ [--temporal ] \ [--data_dir ] \ [--transfer_mode ] \ [--tentacle_port ] \ [--tentacle_address ] \ [--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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/Nw6image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/Nw6image.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/J0Pimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/J0Pimage.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/b2mimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/b2mimage.png) **Métrica con umbral** java.lang:type=Threading/TotalStartedThreadCount|min\_warning 30|min\_critical 45 [![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/p0Jimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/p0Jimage.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/scaled-1680-/VNOimagen.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/VNOimagen.png) **3. Se le añade nombre, descripción y timeout:** [![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/zozimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/zozimage.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/sztimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/sztimage.png) **5. Se configuran las macros anteriores, añadiendo en cada una el valor del parámetro:** [![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/RMBimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/RMBimage.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/scaled-1680-/503imagen.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-01/503imagen.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/pheimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/pheimage.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](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/scaled-1680-/FmJimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2024-06/FmJimage.png)