2016-07-08 19 views
0

Ich habe ein Spring-Boot-Projekt, bei dem ich Spring-Boot-Starter-Aktor und io.dropwizard.metrics verwende.Jconsole kann keine Verbindung zur lokalen jmx-Anwendung herstellen

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>io.dropwizard.metrics</groupId> 
     <artifactId>metrics-core</artifactId> 
    </dependency> 

Es erzeugt Metrics, die ich mit der URL http://myapplication/metrics zugreifen können. Ich stelle die Anwendung auf einem eigenständigen Wildfly 10-Server bereit.

Ich möchte mit jmx die Metriken auf jconsole lesen. ich konfigurieren, dass die Anwendungsmetriken mit einem JMXReporter senden:

@Configuration 
@EnableMetrics 
public class MetricsConfiguration extends MetricsConfigurerAdapter { 
    @Override 
    public void configureReporters(MetricRegistry metricRegistry) { 
     registerReporter(JmxReporter.forRegistry(metricRegistry) 
       .build()) 
       .start(); 
    } 
} 

Wenn ich den Server und stellen Sie die Anwendung starten, Protokolle sagen:

osbaejEndpointMBeanExporter liegt Managed Bean 'metricsEndpoint': Registrierung mit JMX-Server als MBean [portal-ws-JMX: type = Endpunkt, name = metricsEndpoint]

Server logs

Wenn ich jconsole ausführen, gibt es in der Liste Lokaler Prozess nur JConsole-Prozess und einige graue PID. Wenn ich eine graue PID wähle, heißt es "Der Management Agent ist bei diesem Prozess nicht aktiviert".

Ich habe auch versucht Verbindung des Remote-Prozess zu verwenden:

  • Service: JMX: http-Remoting-JMX: // localhost: 9990
  • Service: JMX: remote + http://localhost:9990
  • localhost: 9990

JConsole

Aber das funktioniert nicht.

Ich versuchte, die Jvm Variablen zu setzen:

  • -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only = false

und die Eigenschaft:

  • spring.jmx.enabled = true

Es funktioniert auch nicht.

Was kann ich tun jmx Metriken mit jconsole lesen?

Antwort

1

fand ich hier eine Lösung: https://dzone.com/articles/remote-jmx-access-wildfly-or

Mein Problem kommen aus Wildfly. Als ich jconsole laufen, ich brauche Jboss-cli-client.jar und tools.jar JConsole Classpath:

$JAVA_HOME/bin/jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:/opt/wildfly-8.2.0.Final/bin/client/jboss-cli-client.jar 

Jetzt funktioniert es, ich verwenden kann "service: JMX: remote + http://localhost:9990" auf JMX zu verbinden.

0

Hier ist der Satz von Kommandozeilen-Argumente, die ich verwenden, um eine Arbeitsfeder-Boot-Anwendung zu erzeugen (wenn auch Tomcat verwenden, nicht Wildfly), die Dinge durch JConsole aussetzt:

cmd="$cmd -Dcom.sun.management.jmxremote" 
cmd="$cmd -Dcom.sun.management.jmxremote.port=9899" 
cmd="$cmd -Dcom.sun.management.jmxremote.rmi.port=9811" 
cmd="$cmd -Dcom.sun.management.jmxremote.authenticate=false" 
cmd="$cmd -Dcom.sun.management.jmxremote.ssl=false" 
cmd="${cmd} -Djava.rmi.server.hostname=<IP_OF_YOUR_SERVER>" 

Beachten Sie, dass die Anwendung läuft auf und ist Zugriff über Port 9800 (in meinem Fall). Die Ports 9811 und 9899 sind jedoch auch offen für den Umgang mit JMX (wie oben).Sie sollten auch sicherstellen, dass die 3 Ports über eine eventuell eingerichtete Firewall zugänglich sind.

Good Luck

+0

Danke für Ihre Antwort. Ich versuche das, aber es funktioniert nicht. Ich denke mein Problem wird durch Wildfliege verursacht. – YLombardi