El monitoreo JMX se puede usar para monitorear los contadores JMX de una aplicación Java.
El monitoreo JMX tiene soporte nativo en Zabbix en forma demonio llamado "Zabbix Java gateway", introducido desde Zabbix 2.0.
Para recuperar el valor de un contador JMX en particular en un host, El servidor Zabbix consulta la puerta de enlace Java de Zabbix, que a su vez usa [JMX administración API] (http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/) para consultar la aplicación de interés de forma remota.
Para obtener más detalles y configuración, consulte Zabbix Java puerta de enlace.
::: nota de advertencia Comunicación entre la puerta de enlace de Java y la aplicación JMX monitoreada no debe estar con cortafuegos. :::
Una aplicación Java no necesita ningún software adicional instalado, pero debe iniciarse con las opciones de línea de comandos que se especifican a continuación para tener soporte para monitoreo JMX remoto.
Como mínimo, si solo desea comenzar a monitorear un aplicación Java simple en un host local sin aplicación de seguridad, inicie con estas opciones:
java \
-Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=falso \
-Dcom.sun.management.jmxremote.ssl=falso \
-Dcom.sun.management.jmxremote.registry.ssl=falso \
-jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
Esto hace que Java escuche las conexiones JMX entrantes en el puerto 12345, desde host local solamente, y le dice que no requiera autenticación o SSL.
Si desea permitir conexiones en otra interfaz, configure el -Djava.rmi.server.hostname parámetro a la IP de esa interfaz.
Si desea ser más estricto con la seguridad, hay muchos otros Opciones de Java disponibles para usted. Por ejemplo, el siguiente ejemplo inicia el aplicación con un conjunto más versátil de opciones y lo abre a un más amplio red, no solo host local.
java \
-Djava.rmi.servidor.nombre de host=192.168.3.14 \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password \
-Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access \
-Dcom.sun.management.jmxremote.ssl=verdadero \
-Dcom.sun.management.jmxremote.registry.ssl=true \
-Djavax.net.ssl.keyStore=$TU_ALMACEN_CLAVE \
-Djavax.net.ssl.keyStorePassword=$SU_ALMACENAMIENTO_CLAVE_CONTRASEÑA \
-Djavax.net.ssl.trustStore=$SU_TIENDA_DE_CONFIANZA \
-Djavax.net.ssl.trustStorePassword=$SU_TRUST_STORE_PASSWORD \
-Dcom.sun.management.jmxremote.ssl.need.client.auth=true \
-jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
La mayoría (si no todos) de estos ajustes se pueden especificar en /etc/java-6-openjdk/management/management.properties (o donde sea que archivo está en su sistema).
Tenga en cuenta que si desea utilizar SSL, debe modificar el script startup.sh agregando las opciones -Djavax.net.ssl.*
a la puerta de enlace de Java, para que sepa dónde encontrar tiendas clave y de confianza.
Consulte Supervisión y gestión mediante JMX para una descripción detallada.
Con la puerta de enlace de Java ejecutándose, el servidor sabe dónde encontrarla y una aplicación Java comenzó con soporte para monitoreo JMX remoto, es hora para configurar las interfaces y los elementos en Zabbix GUI.
Comienza creando una interfaz de tipo JMX en el host de interés.
Todos los campos de entrada obligatorios están marcados con un asterisco rojo.
Para cada contador JMX que le interese, agregue el elemento Agente JMX conectado a esa interfaz.
La clave en la captura de pantalla a continuación dice jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
.
Todos los campos de entrada obligatorios están marcados con un asterisco rojo.
Los campos que requieren información específica para artículos JMX son:
Escriba | Establezca agente JMX aquí. |
Clave | La clave de elemento jmx[] contiene tres parámetros:nombre de objeto: el nombre de objeto de un MBean nombre de atributo: un nombre de atributo de MBean con compuesto opcional nombres de campos de datos separados por puntos descripción breve única: una descripción única que permite múltiples elementos JMX con el mismo nombre de objeto y nombre de atributo en el host (opcional) Consulte a continuación para obtener más detalles sobre el elemento JMX claves. Desde Zabbix 3.4, puede descubrir MBeans y atributos de MBean usando un elemento jmx.discovery[] descubrimiento de bajo nivel. |
Punto final JMX | Puede especificar un punto final JMX personalizado. Asegúrese de que los parámetros de conexión del extremo JMX coincidan con la interfaz JMX. Esto se puede lograr mediante el uso de macros {HOST.*} como se hace en el punto final JMX predeterminado. Este campo es compatible desde 3.4.0. Se admiten {HOST.*} macros y macros de usuario. |
Nombre de usuario | Especifique el nombre de usuario, si ha configurado la autenticación en su aplicación Java. Se admiten macros de usuario. |
Contraseña | Especifique la contraseña, si ha configurado la autenticación en su aplicación Java. Se admiten macros de usuario. |
Si desea monitorear un contador booleano que es "verdadero" o "falso", luego especifica el tipo de información como "Numérico (sin firmar)" y seleccione el paso de preprocesamiento "Booleano a decimal" en el Preprocesamiento pestaña. El servidor almacenará valores booleanos como 1 o 0, respectivamente.
Un nombre de objeto MBean no es más que una cadena que define en su aplicación Java. Un nombre de atributo, por otro lado, puede ser más complejo. En caso de que un atributo devuelva un tipo de datos primitivo (un número entero, un cadena, etc.) no hay nada de qué preocuparse, la clave se verá como este:
En este ejemplo, un nombre de objeto es "com.<ejemplo:Tipo=Hola>", el nombre del atributo es "peso" y probablemente el tipo de valor devuelto debería ser "Numérico (flotante)".
Se vuelve más complicado cuando su atributo devuelve datos compuestos. Por ejemplo: el nombre de su atributo es "manzana" y devuelve un hash representando sus parámetros, como "peso", "color", etc. Su clave puede se parece a esto:
Así es como se separan un nombre de atributo y una clave hash, utilizando un símbolo de punto De la misma manera, si un atributo devuelve datos compuestos anidados, el las partes están separadas por un punto:
Los atributos de datos tabulares constan de uno o varios atributos compuestos. Si dicho atributo se especifica en el parámetro de nombre de atributo, entonces este valor del elemento devolverá la estructura completa del atributo en formato JSON. Los valores de los elementos individuales dentro de los datos tabulares El atributo se puede recuperar mediante preprocesamiento.
Ejemplo de atributo de datos tabulares:
Valor del ítem:
[
{
"una manzana",
"b": "plátano",
"c": "cereza"
},
{
"una papa",
"b": "lechuga",
"c": "cebolla"
}
]
Hasta aquí todo bien. Pero, ¿Qué pasa si un nombre de atributo o una clave hash contiene un punto? ¿símbolo? Aquí hay un ejemplo:
Eso es un problema. Cómo decirle a Zabbix que el nombre del atributo es "todas las frutas", no solo "todas"? Cómo distinguir un punto que es parte de el nombre del punto que separa un nombre de atributo y claves hash?
Antes de ** 2.0.4 **, la puerta de enlace Zabbix Java no podía manejar tales situaciones y los usuarios se quedaron con elementos NO COMPATIBLES. Desde 2.0.4 esto es posible, todo lo que necesita hacer es escapar de los puntos que son parte de el nombre con una barra invertida:
De la misma manera, si su clave hash contiene un punto, escápelo:
Se debe escapar un carácter de barra invertida en un nombre de atributo:
Para manejar cualquier otro carácter especial en la clave de elemento JMX, consulte el formato de la clave del elemento sección.
Esto es en realidad todo lo que hay que hacer. ¡Feliz monitoreo JMX!
Desde Zabbix 4.0.0 es posible trabajar con MBeans personalizados que regresan tipos de datos no primitivos, que anulan el método toString().
Los puntos finales personalizados permiten trabajar con diferentes protocolos de transporte distintos que el RMI predeterminado.
Para ilustrar esta posibilidad, intentemos configurar JBoss EAP 6.4 seguimiento como ejemplo. Primero, hagamos algunas suposiciones:
Hagamos algunas configuraciones simples en zabbix_server.conf:
Y en el archivo de configuración zabbix_java/settings.sh (o zabbix_java_gateway.conf):
Verifique que JBoss escuche su puerto de administración estándar:
Ahora vamos a crear un host con interfaz JMX 127.0.0.1:9999 en Zabbix.
Como sabemos que esta versión de JBoss usa el JBoss Remoting protocolo en lugar de RMI, podemos actualizar en masa el parámetro de punto final JMX para artículos en nuestra plantilla JMX en consecuencia:
Actualicemos la caché de configuración:
Tenga en cuenta que puede encontrar un error primero.
"Protocolo no admitido: comunicación remota-jmx" significa que la puerta de enlace de Java no saber cómo trabajar con el protocolo especificado. Eso se puede arreglar con creando un archivo ~/needed_modules.txt con el siguiente contenido:
jboss-como-remoto
jboss-registro
jboss-logmanager
jboss-marshalling
jboss-remoting
jboss-sasl
jcl-over-slf4j
jul-a-slf4j-stub
log4j-jboss-gestor de registros
remoto-jmx
slf4j-api
xnio-api
xnio-nio</pre>
y luego ejecutando el comando:
$ para i en $(gato ~/módulos_necesarios.txt); encuentre /opt/jboss-eap-6.4 -iname ${i}*.jar -exec cp {} /usr/local/sbin/zabbix_java/lib/ \; ; hecho
Así, Java Gateway dispondrá de todos los módulos necesarios para trabajar con jmx-remoto. Lo que queda es reiniciar la puerta de enlace de Java, esperar un poco y si hizo todo bien, vea que los datos de monitoreo de JMX comienzan a llegar a Zabbix (ver también: Último data).