Dostępne są następujące narzędzia JMX wiersza poleceń:
- jmxterm - wydaje się być najbardziej funkcjonalnym narzędziem.
- cmdline-jmxclient - użyty w projekcie WebArchive wydaje się być bardzo nagim szkieletem (i wygląda na to, że nie jest rozwijany od 2006 roku)
- Skrypt Groovy i JMX - zapewniają naprawdę potężną funkcjonalność JMX, ale wymagają groovy i innej konfiguracji biblioteki.
- Funkcjonalność wiersza poleceń JManage - (wadą jest to, że wymaga działającego serwera JManage do wykonywania poleceń proxy)
Przykład Groovy JMX:
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();
Przykład cmdline-jmxclient:
Jeśli masz
- MBean: com.company.data:type=datasystem,id=0
Z operacją o nazwie:
Następnie możesz napisać prosty skrypt bash (zakładając, że pobierzesz cmdline-jmxclient-0.10.3.jar i umieścisz w tym samym katalogu co skrypt):
#!/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
Opracowałem jmxfuse, który eksponuje JMX Mbeans jako system plików Linux FUSE z podobną funkcjonalnością jak / proc fs. Opiera się na Jolokii jako pomoście do JMX. Atrybuty i operacje są udostępniane do odczytu i zapisu.
http://code.google.com/p/jmxfuse/
Na przykład, aby odczytać atrybut:
napisać atrybut:
wywołać operację:
źródło
Wtyczki Syabru Nagios JMX jest przeznaczona do stosowania z Nagios, ale nie wymaga Nagios i jest bardzo wygodne do użycia wiersza poleceń:
źródło
Potencjalnie najłatwiej jest napisać to w Javie
Skompilowałoby się to do pojedynczej klasy i nie wymaga żadnych zależności w serwerze ani żadnego skomplikowanego pakietu maven.
nazwij to z
źródło
Trochę ryzykowne, ale możesz uruchomić polecenie curl POST z wartościami z formularza z konsoli JMX, jego adresem URL i uwierzytelnianiem http (jeśli jest wymagane):
Uwaga: indeks metody może ulec zmianie wraz ze zmianami w oprogramowaniu. Implementacja formularza internetowego może się zmienić.
Powyższe jest oparte na źródle strony usługi JMX dla operacji, którą chcesz wykonać:
Źródło formularza:
źródło
HttpURLConnection
i mogę potwierdzić, że działa. (przy okazjisubmit=Invoke
jest niepotrzebne)rmi
i tam widzęhttp
. Czy to oznacza, że serwer musi być skonfigurowany do obsługi żądań JMXhttp
?Spójrz na JManage . Jest w stanie wykonywać metody MBean i pobierać / ustawiać atrybuty z wiersza poleceń .
źródło
Możesz również rzucić okiem na jmx4perl . Zapewnia dostęp bez języka Java do komponentów MBean zdalnego serwera Java EE Server. Jednak na platformie docelowej należy zainstalować mały serwlet agenta, który zapewnia spokojny dostęp JMX przez HTTP z ładunkiem JSON. (Wersja 0.50 doda tryb bezagentowy poprzez implementację proxy JSR-160).
Zalety to szybki czas uruchamiania w porównaniu z uruchamianiem lokalnej maszyny JVM Java i łatwość obsługi. jmx4perl zawiera pełny zestaw modułów Perla, które można łatwo wykorzystać we własnych skryptach:
Możesz także użyć aliasu dla typowych kombinacji MBean / Attribute / Operation (np. Dla większości MXBean). Dodatkowe funkcje (wtyczka Nagios, dostęp podobny do XPath do złożonych typów atrybutów, ...) można znaleźć w dokumentacji jmx4perl.
źródło
@Dougnukem odpowiedź bardzo mi pomogła. Przyjąłem podejście Groovy (używając groovy 2.3.3).
Zrobiłem kilka zmian w kodzie Dougnukem. To zadziała z Javą 7 i wydrukuje dwa atrybuty na standardowe wyjście co 10 sekund.
Skompiluj ten kod do pliku jar za pomocą wtyczki maven-compiler-plugin, więc nie będziesz potrzebować groovy instalacji tylko groovy-all.jar. Poniżej znajduje się odpowiednia definicja i zależności wtyczki.
Owiń go nietoperzem lub muszlą, a wydrukuje dane na standardowe wyjście.
źródło
Nie jestem pewien co do środowiska podobnego do basha. Możesz wypróbować kilka prostych programów opakowujących w Javie (z argumentami programów), które wywołują komponenty MBean na zdalnym serwerze. Następnie możesz wywołać te opakowania ze skryptu powłoki
Jeśli możesz użyć czegoś takiego jak Python lub Perl, możesz być zainteresowany JSR-262, który umożliwia eksponowanie operacji JMX za pośrednictwem usług internetowych. Jest to zaplanowane do uwzględnienia w Javie 7, ale możesz użyć kandydata do wydania implementacji referencyjnej
źródło