Wie überwache ich eine Spring Boot-App mit JMX?Java

Java-Forum
Guest
 Wie überwache ich eine Spring Boot-App mit JMX?

Post by Guest »

Auf meinem DigitalOcean-Server läuft eine Spring Boot-App. Kein Docker beteiligt. Ich möchte diese App mithilfe von VisualVM über JMX überwachen, aber ich habe Probleme beim Herstellen einer Verbindung, und selbst wenn ich glaube, dass ich alles getan habe, habe ich vielleicht etwas übersehen.
Also, was ich getan habe:
Wie Als Proof of Concept habe ich eine kleine Plain-Jar-App erstellt, die nur die aktuelle Zeit in einer Schleife ausgibt. Ich habe die entsprechenden Ports auf dem Server geöffnet, mit Netstat überprüft, ob die App diese Ports überwacht, und von meinem Laptop aus überprüft, ob die Ports auf dem Server verfügbar sind. Dann führe ich meine einfache JAR-App aus mit:

Code: Select all

java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname= -jar app.jar
und es hat wirklich funktioniert. Von VisualVM aus konnte ich eine Verbindung herstellen und meine App überwachen.
Dann habe ich versucht, eine einfache, nichts zu tunde Spring Boot-App zu erstellen und mit denselben Parametern eine Verbindung zu ihr herzustellen (auch überprüft, ob die Spring Boot-App lauscht). an diesen Ports und sie sind offen), aber ich konnte keine Verbindung herstellen.
Dann habe ich versucht, meine Spring Boot-Apps ohne JVM-Parameter auszuführen, habe aber diese Klasse erstellt:

Code: Select all

@Configuration
public class JMXConfig {

@Value("${jmx.hostname:}")
private String hostname;

@Value("${jmx.remote.port:12345}")
private int jmxRemotePort;

@Value("${jmx.rmi.port:12345}")
private int rmiPort;

@Bean
public JMXConnectorServer jmxConnectorServer() throws Exception {
LocateRegistry.createRegistry(rmiPort);

String serviceUrl = String.format("service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi", hostname, rmiPort);

HashMap env = new HashMap();
env.put("com.sun.management.jmxremote.authenticate", false);
env.put("com.sun.management.jmxremote.ssl", false);
env.put("java.rmi.server.hostname", hostname);
env.put("com.sun.management.jmxremote.local.only", false);
env.put("com.sun.management.jmxremote.rmi.port", String.valueOf(jmxRemotePort));
env.put("com.sun.management.jmxremote.port", String.valueOf(rmiPort));

JMXServiceURL jmxServiceUrl = new JMXServiceURL(serviceUrl);
JMXConnectorServer jmxServer = JMXConnectorServerFactory.newJMXConnectorServer(
jmxServiceUrl,
env,
ManagementFactory.getPlatformMBeanServer()
);
jmxServer.start();

System.out.printf("JMX Server started at: %s%n", serviceUrl);
return jmxServer;
}
}
und auch in application.properties habe ich Folgendes festgelegt: spring.jmx.enabled=true und management.endpoints.jmx.exposure.include=* aber immer noch nein Glück. Die App überwacht diesen Port. Ich erhalte die Meldung, dass JMX mit dem richtigen Port und der richtigen URL bereit ist, aber VisualVM stellt immer noch keine Verbindung her.
Warum ist das so? Was übersehe ich hier?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post