Die folgenden JMX-Dienstprogramme für die Befehlszeile sind verfügbar:
- jmxterm - scheint das Dienstprogramm mit den meisten Funktionen zu sein.
- cmdline-jmxclient - verwendet im WebArchive-Projekt scheint sehr nackt zu sein (und keine Entwicklung seit 2006, wie es aussieht)
- Groovy-Skript und JMX - bietet einige wirklich leistungsstarke JMX-Funktionen, erfordert jedoch Groovy- und andere Bibliothekseinstellungen.
- JManage-Befehlszeilenfunktionalität - (Nachteil ist, dass ein laufender JManage-Server erforderlich ist, um Befehle durchzuleiten)
Groovy JMX Beispiel:
import java.lang.management.*
import javax.management.ObjectName
import javax.management.remote.JMXConnectorFactory as JmxFactory
import javax.management.remote.JMXServiceURL as JmxUrl
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 Beispiel:
Wenn Sie eine haben
- MBean: com.company.data:type=datasystem,id=0
Mit einer Operation namens:
Dann können Sie ein einfaches Bash-Skript schreiben (vorausgesetzt, Sie laden cmdline-jmxclient-0.10.3.jar herunter und legen es im selben Verzeichnis wie Ihr Skript ab):
#!/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
Ich habe jmxfuse entwickelt, das JMX Mbeans als Linux FUSE-Dateisystem mit ähnlichen Funktionen wie / proc fs verfügbar macht. Es basiert auf Jolokia als Brücke zu JMX. Attribute und Operationen werden zum Lesen und Schreiben angezeigt.
http://code.google.com/p/jmxfuse/
So lesen Sie beispielsweise ein Attribut:
ein Attribut schreiben:
So rufen Sie eine Operation auf:
quelle
Das Syabru Nagios JMX-Plugin soll von Nagios verwendet werden, benötigt jedoch kein Nagios und ist sehr praktisch für die Befehlszeilenverwendung:
quelle
Möglicherweise ist es am einfachsten, dies in Java zu schreiben
Dies würde zu einer einzelnen Klasse kompiliert und erfordert keine Abhängigkeiten im Server oder komplizierte Maven-Pakete.
nenne es mit
quelle
Ein wenig riskant, aber Sie könnten einen Curl-POST-Befehl mit den Werten aus dem Formular der JMX-Konsole, der URL und der http-Authentifizierung ausführen (falls erforderlich):
Achtung: Der Methodenindex kann sich bei Änderungen an der Software ändern. Und die Implementierung des Webformulars könnte sich ändern.
Das Obige basiert auf der Quelle der JMX-Service-Seite für den Vorgang, den Sie ausführen möchten:
Quelle des Formulars:
quelle
HttpURLConnection
und kann bestätigen, dass es funktioniert. (Übrigenssubmit=Invoke
ist unnötig)rmi
, und dort sehe ichhttp
. Bedeutet dies, dass der Server so konfiguriert werden muss, dass JMX-Anforderungen unterstützt werdenhttp
?Schauen Sie sich JManage an . Es ist in der Lage, MBean-Methoden auszuführen und Attribute über die Befehlszeile abzurufen / festzulegen .
quelle
Vielleicht möchten Sie auch einen Blick auf jmx4perl werfen . Es bietet Java-freien Zugriff auf die MBeans eines Remote-Java EE-Servers. Auf der Zielplattform muss jedoch ein kleines Agentenservlet installiert werden, das einen erholsamen JMX-Zugriff über HTTP mit einer JSON-Nutzlast bietet. (Version 0.50 fügt einen agentenlosen Modus hinzu, indem ein JSR-160-Proxy implementiert wird.)
Vorteile sind schnelle Startzeiten im Vergleich zum Starten einer lokalen Java-JVM und einfache Bedienung. jmx4perl enthält einen vollständigen Satz von Perl-Modulen, die problemlos in Ihren eigenen Skripten verwendet werden können:
Sie können auch Alias für gängige MBean- / Attribut- / Operationskombinationen verwenden (z. B. für die meisten MXBeans). Weitere Funktionen (Nagios-Plugin, XPath-ähnlicher Zugriff auf komplexe Attributtypen, ...) finden Sie in der Dokumentation von jmx4perl.
quelle
@ Dougnukem Antwort hat mir sehr geholfen. Ich habe den Groovy-Ansatz gewählt (mit Groovy 2.3.3).
Ich habe einige Änderungen am Dougnukem-Code vorgenommen. Dies funktioniert mit Java 7 und druckt alle 10 Sekunden zwei Attribute auf stdout.
Kompilieren Sie diesen Code mit dem maven-compiler-plugin in ein jar, damit Sie nicht nur die groovy-all.jar-Installation benötigen. Unten finden Sie die relevante Definition und Abhängigkeit des Plugins.
Wickeln Sie es mit einem Schläger oder einer Muschel ein und es druckt die Daten auf stdout.
quelle
Ich bin mir nicht sicher über die Bash-ähnliche Umgebung. Sie können einige einfache Wrapper-Programme in Java (mit Programmargumenten) ausprobieren, die Ihre MBeans auf dem Remote-Server aufrufen. Sie können diese Wrapper dann über das Shell-Skript aufrufen
Wenn Sie etwas wie Python oder Perl verwenden können, sind Sie möglicherweise an JSR-262 interessiert , mit dem Sie JMX-Vorgänge über Webdienste verfügbar machen können. Dies soll in Java 7 enthalten sein, Sie können jedoch möglicherweise einen Release Candidate der Referenzimplementierung verwenden
quelle