Os seguintes utilitários JMX de linha de comando estão disponíveis:
- jmxterm - parece ser o utilitário com mais recursos.
- cmdline-jmxclient - usado no projeto WebArchive parece muito básico (e nenhum desenvolvimento desde 2006, parece)
- Script Groovy e JMX - fornece algumas funcionalidades JMX realmente poderosas, mas requer groovy e outras configurações de biblioteca.
- Funcionalidade de linha de comando JManage - (a desvantagem é que requer um servidor JManage em execução para comandos de proxy)
Exemplo JMX Groovy:
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();
exemplo cmdline-jmxclient:
Se você tem um
- MBean: com.company.data:type=datasystem,id=0
Com uma operação chamada:
Em seguida, você pode escrever um script bash simples (supondo que você baixe cmdline-jmxclient-0.10.3.jar e coloque no mesmo diretório do seu 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
Desenvolvi o jmxfuse que expõe JMX Mbeans como um sistema de arquivos Linux FUSE com funcionalidade semelhante ao / proc fs. Ele conta com Jolokia como a ponte para JMX. Atributos e operações são expostos para leitura e gravação.
http://code.google.com/p/jmxfuse/
Por exemplo, para ler um atributo:
para escrever um atributo:
para invocar uma operação:
fonte
O plug - in Syabru Nagios JMX deve ser usado no Nagios, mas não requer o Nagios e é muito conveniente para uso em linha de comando:
fonte
É potencialmente mais fácil escrever isso em Java
Isso compilaria em um único .class e não precisa de dependências no servidor ou qualquer pacote maven complicado.
ligue com
fonte
Um pouco arriscado, mas você poderia executar um comando curl POST com os valores do formulário do console JMX, seu URL e autenticação http (se necessário):
Cuidado: o índice do método pode mudar com as mudanças no software. E a implementação do formulário da web pode mudar.
O acima é baseado na fonte da página de serviço JMX para a operação que você deseja realizar:
Fonte do formulário:
fonte
HttpURLConnection
e posso confirmar que funciona. (aliás,submit=Invoke
é desnecessário)rmi
, e aí eu vejohttp
. Isso significa que o servidor deve ser configurado para suportar solicitações jmxhttp
?Dê uma olhada no JManage . É capaz de executar métodos MBean e obter / definir atributos da linha de comando .
fonte
Você pode querer também dar uma olhada em jmx4perl . Ele fornece acesso sem java a MBeans do Java EE Server remoto. No entanto, um servlet de pequeno agente precisa ser instalado na plataforma de destino, o que fornece um acesso JMX tranquilo via HTTP com uma carga JSON. (A versão 0.50 adicionará um modo sem agente ao implementar um proxy JSR-160).
As vantagens são os tempos de inicialização rápidos em comparação com o lançamento de uma JVM local java e a facilidade de uso. jmx4perl vem com um conjunto completo de módulos Perl que podem ser facilmente usados em seus próprios scripts:
Você também pode usar o apelido para combinações comuns de MBean / Atributo / Operação (por exemplo, para a maioria dos MXBeans). Para recursos adicionais (Nagios-Plugin, acesso semelhante ao XPath a tipos de atributos complexos, ...), consulte a documentação do jmx4perl.
fonte
A resposta @Dougnukem me ajudou muito. Eu escolhi a abordagem Groovy (usando o Groovy 2.3.3).
Eu fiz algumas mudanças no código Dougnukem. Isso funcionará com o Java 7 e imprimirá dois atributos no stdout a cada 10 segundos.
Compile este código em um jar usando maven-compiler-plugin para que você não precise da instalação do groovy apenas do groovy-all.jar. Abaixo está a definição e dependência do plugin relevante.
Envolva-o com um morcego ou uma concha e ele imprimirá os dados em stdout.
fonte
Não tenho certeza sobre o ambiente do bash. Você pode tentar alguns programas wrapper simples em Java (com argumentos de programa) que chamam seus MBeans no servidor remoto. Você pode então chamar esses wrappers a partir do script de shell
Se você pode usar algo como Python ou Perl, pode estar interessado em JSR-262, que permite expor operações JMX em serviços da web. Isso está programado para ser incluído no Java 7, mas você pode usar um candidato a lançamento da implementação de referência
fonte