El monitoratge JMX es pot emprar per monitorar els comptadors JMX d'una aplicació Java.
El monitoratge JMX té suport nadiu a Zabbix en forma d'un dimoni de Zabbix anomenat ""Zabbix Java gateway".
Per recuperar el valor d'un comptador JMX particular d'un equip, el servidor Zabbix consulta el Java gateway, qui empra l'API de gestió JMX per fer consultes a l'aplicació a distància.
Per tindre més detalls sobre la instal·lació, veieu la secció Zabbix Java gateway.
La comunicació entre el Java gateway i l'aplicació JMX monitorada no ha de passar pas per un tallafocs.
Una aplicació Java no requereix la instal·lació de programari addicional, però s'ha d'iniciar amb les opcions de línia de comandes que s'especifiquen a continuació per admetre el monitoratge remot de JMX.
Com a mínim, si només voleu començar a monitorar una aplicació Java senzilla en un equip local sense seguretat, executeu-la amb les opcions següents:
java \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.registry.ssl=false \
-jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
Això fa que Java escolti les connexions JMX entrants al port 12345, només des de l'equip local, i li diu que no demani autenticació o SSL.
Si voleu permetre connexions a una altra interfície, configureu el paràmetre -Djava.rmi.server.hostname a l'adreça IP d'aquesta interfície.
Si voleu ser més estrictes en seguretat, hi ha moltes altres opcions de Java disponibles. L'exemple següent inicia l'aplicació amb un conjunt d'opcions més versàtil i l'obre a una xarxa més àmplia, no només a l'equip local.
java \
-Djava.rmi.server.hostname=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=true \
-Djavax.net.ssl.keyStore=$YOUR_KEY_STORE \
-Djavax.net.ssl.keyStorePassword=$YOUR_KEY_STORE_PASSWORD \
-Djavax.net.ssl.trustStore=$YOUR_TRUST_STORE \
-Djavax.net.ssl.trustStorePassword=$YOUR_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 majoria (si no tots) d'aquests paràmetres es poden especificar a /etc/java-6-openjdk/management/management.properties (o allà on es trobi aquest fitxer al vostre sistema).
Tingueu en compte que si voleu emprar SSL, heu de modificar l'script startup.sh afegint opcions -Djavax.net.ssl.*
a la passarel·la java, de manera que sàpiga on trobar la clau i els magatzems de confiança.
Consulteu el monitoratge i gestió mitjançant JMX per obtindre una descripció detallada.
Amb el Java gateway executant-se, el servidor que sap on és el gateway i una aplicació de Java engegada amb suport de monitoratge JMX remot, ara podem configurar les interfícies i els elements des de la interfície web de Zabbix.
Comencem creant una interfície de tipus JMX a l'equip :!
Tots els camps obligatoris són marcats amb un asterisc vermell.
Per cada comptador JMX en que siguem interessats, hem d'afegir l'element JMX agent, a aquella interfície.
La clau dins la captura de pantalla d'aquí sota diu jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
.
Tots els camps obligatoris són marcats amb un asterisc vermell.
Els camps que necessiten informació específica per als elements JMX són:
Tipus | Definiu JMX agent aquí. |
Clau | La clau de l'element jmx[] conté tres paràmetres:object name - el nom de l'objecte d'un MBean attribute name - el nom de l'atribut MBean amb els noms dels camps de dades compostes separades per punts. unique short description - una descripció única que permet més elements JMX amb el mateix nom d'objecte i el mateix nom d'atribut de l'equip (opcional) Veieu aquí sota més detalls de les claus d'elements JMX. Des de la versió Zabbix 3.4, podeu descobrir els atributs MBeans i MBean emprant l'element de descoberta de baix nivell jmx.discovery[] . |
JMX endpoint | Podeu especificar un punt de tancament JMX personalitzat. Assegureu-vos que els paràmetres de connexió del node final JMX corresponen a la interfície JMX. Això es pot fer emprant les macros {HOST.*} com al punt de tancament JMX per defecte. Aquest camp es suporta des de la versió 3.4.0. Són admeses les macros i{HOST.*} i les macros d'usuari. |
Nom d'usuari | Especifiqueu el nom d'usuari (fins a 255 caracters), si heu configurat l'autenticació a la vostra aplicació Java. Es permeten les macros d'usuari. |
Paraula de pas | Especifiqueu el mot de pas (fins a 255 caracters), si heu configurat l'autenticació a la vostra aplicació Java. Es permeten les macros d'usuari. |
Si voleu monitorar un comptador booleà que sigui "cert" o "fals", especifiqueu el tipus d'informació "Numèrica (no signada)" i trieu l'etapa "Booleà a decimal" dins la pestanya de preprocessament. El servidor emmagatzemarà els valors booleans com 1 o 0, respectivament.
El nom d'un objecte MBean no és més que una cadena que definiu a la vostra aplicació Java. D'altra banda, un nom d'atribut pot ésser més complex. En cas que un atribut torni un tipus de dades primitiu (un nombre enter, una cadena, etc.), no ens hem d'amoïnar pas; la clau tindrà aquest aspecte:
En aquest exemple, el nom de l'objecte és "com.example:Type=Hello", el nom de l'atribut és "weight" i probablement el tipus de valor retornat hauria de ser "Numèric (flotant)".
Es complica més quan el vostre atribut retorna dades compostes. Per exemple: el nom del vostre atribut és "poma" i retorna un hash que representa els seus paràmetres, com ara "pes", "color", etc. La teva clau podria assemblar-se a:
Així és com es separen un nom d'atribut i una clau hash, emprant el símbol de punt. De la mateixa manera, si un atribut retorna dades compostes imbricades, les parts es separen per un punt:
Els atributs de dades tabulars consisteixen en un o més atributs compostos. Si aquest atribut s'especifica al paràmetre de nom d'atribut, aquest valor d'element retornarà l'estructura completa de l'atribut en format JSON. Els valors dels elements individuals dins de l'atribut de dades tabulars es poden recuperar mitjançant el preprocessament.
Exemple d'atribut de dades tabulars:
Valor de l'element:
Fins ara, tot bé. Però, què passa si un nom d'atribut o una clau hash conté un punt? Aquí teniu un exemple:
És complicat. Com li diem al Zabbix que el nom de l'atribut és "all.fruits", no només "all"? Com es distingeix un punt que forma part del nom del punt que separa un nom d'atribut i les claus hash?
Això és possible; tot el que heu de fer és escapar dels punts que formen part del nom amb una barra invertida:
De la mateixa manera, si la vostra clau hash conté un punt, se n'escaparà:
S'ha d'escapar una barra invertida en un nom d'atribut:
Per gestionar altres caràcters especials a la clau d'element JMX, consulteu la secció format de clau d'element.
En realitat, això és tot el que hi ha. Bon monitoratge de JMX!
És possible treballar amb els MBeans personalitzables que retornen els tipus de dades no-primitives, que substituirà el métode toString().
Els punts finals JMX personalitzats permeten treballar amb diferents protocols de transport diferents del RMI predeterminat.
Per il·lustrar aquesta possibilitat, provem de configurar el monitoratge JBoss EAP 6.4 com a exemple. Primer, fem algunes suposicions:
/usr/local/
/opt/jboss-eap-6.4/
i funciona en mode autònomFem algunes configuracions senzilles a zabbix_server.conf:
I al fitxer de configuració zabbix\_java/settings.sh
(o zabbix\_java\_gateway.conf
):
Verifiqueu que JBoss escolti per el seu port predeterminat:
Ara creem un equip amb la interfície JMX 127.0.0.1:9999 a Zabbix.
Com que sabem que aquesta versió de JBoss empra el protocol JBoss Remoting en lloc de RMI, podem actualitzar de manera massiva la configuració de l'equip destí JMX per als elements del nostre model JMX en conseqüència:
Actualitzem la memòria cau de configuració:
Tingueu en compte que és possible que trobeu una errada la primera vegada.
"Protocol no compatible: remoting-jmx" vol dir que la passarel·la Java no sap com treballar amb aquest protocol. Això es pot solucionar creant un fitxer ~/needed_modules.txt
amb el contingut següent:
jboss-as-remoting
jboss-logging
jboss-logmanager
jboss-marshalling
jboss-remoting
jboss-sasl
jcl-over-slf4j
jul-a-slf4j-estub
log4j-jboss-logmanager
remoting-jmx
slf4j-api
xnio-api
xnio-nio
i després executeu l'ordre:
for i in $(cat ~/needed_modules.txt); do find /opt/jboss-eap-6.4 -iname ${i}*.jar -exec cp {} /usr/local/sbin/zabbix_java/lib/ \; ; done
Així, la passarel·la Java disposarà de tots els mòduls necessaris per treballar amb JMX-Remoting. Queda per reiniciar la passarel·la Java, espereu una mica i si ho heu fet tot correctament, podreu veure que les dades de monitoratge de JMX comencen a arribar a Zabbix (veieu també: darreres dades).