Ich versuche, eine JVM, die im Docker läuft, aus der Ferne zu überwachen. Die Konfiguration sieht wie folgt aus:Wie kann ich von außen auf die JMX-Schnittstelle im Docker zugreifen?
Maschine 1: läuft eine JVM (in meinem Fall, läuft kafka) in Docker auf einem Ubuntu-Maschine; Die IP dieser Maschine ist 10.0.1.201; Die Anwendung, die in Docker ausgeführt wird, ist 172.17.0.85.
Maschine 2: läuft JMX Überwachung
Beachten Sie, dass, wenn ich JMX Überwachung von 2 Maschine laufen, sie mit einer Version der folgenden Fehler fehlschlägt (Anmerkung: der gleiche Fehler tritt auf, wenn ich jconsole laufen, jvisualvm, jmxtrans und Knoten-JMX/npm: JMX):
der Stack-Trace auf andernfalls sieht etwa wie folgt für jede der JMX-Monitoring-Tools:
java.rmi.ConnectException: Connection refused to host: 172.17.0.85; nested exception is
java.net.ConnectException: Operation timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
(followed by a large stack trace)
Jetzt ist der interessante Teil, wenn ich die gleichen Werkzeuge (jconsole, jvisualvm, jmxtrans und Knoten-jmx/npm: jmx) auf der gleichen Maschine, die Docker (Maschine 1 von oben) läuft laufen die JMX-Überwachung ordnungsgemäß funktioniert.
Ich denke, dies legt nahe, dass mein JMX-Port aktiv ist und ordnungsgemäß funktioniert, sondern dass, wenn ich ausführen JMX Fernüberwachung (von der Maschine 2) sieht es aus wie das JMX-Tool nicht den internen IP Docker erkennen (172.17.0.85)
im Folgenden sind die relevanten (glaube ich) Netzwerk Konfigurationselemente auf der Maschine 1, wo JMX Überwachung Arbeiten (den docker ip beachten, 172.17.42.1):
docker0 Link encap:Ethernet HWaddr ...
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr:... Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6787941 errors:0 dropped:0 overruns:0 frame:0
TX packets:4875190 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1907319636 (1.9 GB) TX bytes:639691630 (639.6 MB)
wlan0 Link encap:Ethernet HWaddr ...
inet addr:10.0.1.201 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr:... Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4054252 errors:0 dropped:66 overruns:0 frame:0
TX packets:2447230 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2421399498 (2.4 GB) TX bytes:1672522315 (1.6 GB)
Und das ist die relevanten Netzwerkkonfigurationselemente auf der Fernbedienung Maschine (Maschine 2), von der ich die JMX-Fehler erhalte:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1<PERFORMNUD>
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ....
inet6 ....%en1 prefixlen 64 scopeid 0x5
inet 10.0.1.203 netmask 0xffffff00 broadcast 10.0.1.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
Das funktionierte, aber ich musste auch ein Docker Container hinzufügen zu verbinden: '-Dcom.sun.management.jmxremote.port = 1098' und schließen stattdessen an diesen Port' rmi.port' – jamming
' -Djava.rmi.server.hostname = 'war der wichtige Teil für mich. Vielen Dank! –