Existe-il des bibliothèques qui me permettrait d'appeler un JMX MBean méthode à partir d'un script shell. Nous exposons certaines opérations/admin commandes via JMX, et nous pourrions avoir nos admins utilisation JConsole, ou VisualVM, mais certaines tâches sont laissées à l'automatisation. Dans cette automatisation nous aimerions être en mesure de téléphoner à un JMX MBean méthode sur notre serveur en cours d'exécution, de préférence à partir d'un script shell.
Réponses
Trop de publicités?La ligne de commande suivante JMX utilitaires sont disponibles:
- jmxterm - semble être le plus complet de l'utilitaire.
- cmdline-jmxclient - utilisé dans le WebArchive projet semble très à nu les os (et pas de développement depuis 2006, il ressemble)
- Grovy script et JMX - fournit certains vraiment puissant JMX fonctionnalité, mais nécessite groovy et autres installation de la bibliothèque.
- JManage ligne de commande fonctionnalité - (inconvénient est qu'il nécessite l'exécution d'un JManage serveur proxy commandes via)
Groovy JMX Exemple:
import java.lang.management.*
import javax.management.ObjectName
import javax.management.remote.JMXConnectorFactory as JmxFactory
import javax.management.remote.JMXServiceURL as JmxUrl
import groovy.swing.SwingBuilder
import javax.swing.WindowConstants as WC
def serverUrl = 'service:jmx:rmi:///jndi/rmi://localhost:9003/jmxrmi'
String beanName = "com.webwars.gameplatform.data:type=udmdataloadsystem,id=0"
def server = JmxFactory.connect(new JmxUrl(serverUrl)).MBeanServerConnection
def dataSystem = new GroovyMBean(server, beanName)
println "Connected to:\n$dataSystem\n"
println "Executing jmxForceRefresh()"
dataSystem.jmxForceRefresh();
cmdline-jmxclient exemple:
Si vous avez un
- MBean: com.de l'entreprise.données:type=;,id=0
Par une Opération appelée:
- jmxForceRefresh()
Ensuite, vous pouvez écrire un script bash simple (en supposant que vous téléchargez cmdline-jmxclient-0.10.3.jar et de mettre dans le même répertoire que votre script):
#!/bin/bash
cmdLineJMXJar=./cmdline-jmxclient-0.10.3.jar
user=yourUser
password=yourPassword
jmxHost=localhost
port=9003
#No User and password so pass '-'
echo "Available Operations for com.company.data:type=datasystem,id=0"
java -jar ${cmdLineJMXJar} ${user}:${password} ${jmxHost}:${port} com.company.data:type=datasystem,id=0
echo "Executing XML update..."
java -jar ${cmdLineJMXJar} - ${jmxHost}:${port} com.company.data:type=datasystem,id=0 jmxForceRefresh
J'ai développé jmxfuse qui expose les Mbeans JMX comme un Linux FUSIBLE du système de fichiers avec les mêmes fonctionnalités que le /proc fs. Les attributs et les opérations sont exposés pour la lecture et l'écriture.
http://code.google.com/p/jmxfuse/
Par exemple, pour lire un attribut:
me@oddjob:jmx$ cd log4j/root/attributes
me@oddjob:jmx$ cat priority
pour écrire un attribut:
me@oddjob:jmx$ echo "WARN" > priority
pour invoquer une opération:
me@oddjob:jmx$ cd Catalina/none/none/WebModule/localhost/helloworld/operations/addParameter
me@oddjob:jmx$ echo "myParam myValue" > invoke
Le Syabru Nagios JMX plugin est destiné à être utilisé à partir de Nagios, mais ne nécessite pas de Nagios et est très pratique pour l'utilisation en ligne de commande:
~$ ./check_jmx -U service:jmx:rmi:///jndi/rmi://localhost:1099/JMXConnector --username myuser --password mypass -O java.lang:type=Memory -A HeapMemoryUsage -K used
JMX OK - HeapMemoryUsage.used = 445012360 | 'HeapMemoryUsage used'=445012360;;;;
Vous pourriez aussi avoir un coup d'oeil à jmx4perl. Il fournit java-l'accès à distance à un Serveur Java EE de MBeans. Cependant, un petit agent de la servlet doit être installé sur la plate-forme cible, qui fournit une bonne JMX Accès via HTTP avec une charge utile JSON. (La Version 0.50 va ajouter un agent de mode par la mise en œuvre d'un JSR 160 proxy).
Les avantages sont de démarrage rapide de fois par rapport au lancement d'un local java JVM et la facilité d'utilisation. jmx4perl est livré avec un ensemble complet de modules Perl qui peut être utilisé facilement dans vos propres scripts:
use JMX::Jmx4Perl;
use JMX::Jmx4Perl::Alias; # Import certains aliases for MBeans
print "Memory Used: ",
JMX::Jmx4Perl
->new(url => "http://localhost:8080/j4p")
->get_attribute(MEMORY_HEAP_USED);
Vous pouvez également utiliser des alias pour la commune de MBean/Attribut/Opération de combos (par exemple, pour la plupart des MXBeans). Pour des fonctionnalités supplémentaires (Nagios-Plugins, XPath-comme l'accès au complexe des types d'attributs, ...), veuillez vous référer à la documentation de jmx4perl.
Jetez un oeil à JManage. Il est capable d'exécuter un MBean méthodes et d'obtenir / définir les attributs de ligne de commande.