Je reçois une connexion refusée par mon agent de datadog qui tente de collecter des métriques JMX (via RMI) à partir d'une application interne existant dans son propre conteneur docker. Cependant, jconsole est capable de collecter les métriques de l'application qui existe dans son propre conteneur docker. L'agent de datadog existe dans un conteneur qui lui est propre. Les deux conteneurs existent dans le même réseau sur le même hôte. Des idées? J'ai regardé les autres questions de débordement de pile.Datadog-agent généré dans les sorties de conteneur docker Erreur de connexion JMX RMI
- L'adresse IP 0.0.0.0 et aussi l'adresse hôte spécifique ont été jugés dans la coutume jmx.yaml fichier /etc/dd-agent/conf.d/jmx.yaml
Docker Container 0 :
* Exécute la my_streams_app qui délivre en sortie les métriques flux kafka
* exécuté via:
`docker run -d --name my_streams_app
-v /var/run/docker.sock:/var/run/docker.sock:ro
-v /proc/:/host/proc/:ro
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro
-e API_KEY=someapikeyhere
-e SD_JMX_ENABLE=yes -p 9998:9998 --network=my_streams_default quay.io/temp/my_streams`
- jconsole est capable de ramasser les métriques émises.
Docker Container 1:
* Runs datadog agent dans le récipient * Datadog-agent utilise par défaut JMX (RMI) pour récupérer les paramètres à partir de my_streams_app qui existe dans le contenant 0, ci-dessus.
* les deux conteneurs s'exécutent sur le même réseau dans le même hôte (mon ordinateur portable MAC OSX)
* capable de netcat depuis l'intérieur de l'agent de données dans le conteneur docker vers l'adresse IP my_streams_app et le port de l'autre conteneur. L'utilisation 0.0.0.0 et 9998, peuvent également utiliser des adresses IP spécifiques
* commande pour exécuter l'agent datadog à l'intérieur d'un conteneur
docker run -v /var/run/docker.sock:/var/run/docker.sock:ro -v /proc/:/host/proc/:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e LOG_LEVEL=DEBUG -e SD_BACKEND=docker --network=mystreams_default 4b1488e74733
configuration JMX pour la collecte des paramètres par datadog JMX à l'intérieur du conteneur:
instances:
- hôte: 0.0.0.0 Port : 9998 tags: newTag: my_streams jmx_url: "service: JMX: rmi: /// jndi/rmi: //0.0.0.0: 9998/jmxrmi" Nom : jmx_instance
docker_images: - my_streams_app
init_config: is_jmx: true conf: - inclure: domaine: '"kafka.streams"' haricot: '"kafka.flux ": type =" flux-Metrics », client-id = « my_test-1-StreamThread-1" » attribut: commit-appels de taux: metric_type: jauge commit-temps moyen: metric_type: jauge commit-temps max: metric_type: évaluer sondage-appels taux: metric_type: jauge
JConsole:
* recueille les métriques de my_streams_app dans le conteneur docker 0, au-dessus via:
jconsole 0.0.0.0:9998
sortie d'erreur:
2017-07-05 20:48:20,236 | ERROR | App | Cannot connect to instance service:jmx:rmi:///jndi/rmi://0.0.0.0:9998/jmxrmi. java.io.IOException:
Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)]
java.io.IOException: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)]
at org.datadog.jmxfetch.Connection.connectWithTimeout(Connection.java:117)
at org.datadog.jmxfetch.Connection.createConnection(Connection.java:61)
at org.datadog.jmxfetch.RemoteConnection.<init>(RemoteConnection.java:56)
at org.datadog.jmxfetch.ConnectionFactory.createConnection(ConnectionFactory.java:29)
at org.datadog.jmxfetch.Instance.getConnection(Instance.java:162)
at org.datadog.jmxfetch.Instance.init(Instance.java:173)
at org.datadog.jmxfetch.App.init(App.java:511)
at org.datadog.jmxfetch.App.main(App.java:115)
Caused by: java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)]
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:370)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268)
at org.datadog.jmxfetch.Connection$1.run(Connection.java:86)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:473)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)]
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:142)
at com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:204)
at javax.naming.InitialContext.lookup(InitialContext.java:415)
at javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1928)
at javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1895)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:287)
... 7 more
Caused by: java.rmi.ConnectException: Connection refused to host: 0.0.0.0; nested exception is:
java.net.ConnectException: Connection refused (Connection refused)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:341)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:138)
... 12 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:580)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.<init>(Socket.java:429)
at java.net.Socket.<init>(Socket.java:209)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:147)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
rmiregistry a été démarré selon Failed to retrieve RMIServer stub
Il vous manque beaucoup d'informations pertinentes ici. Quelle est la configuration de Datadog pour se connecter à JMX? Comment les conteneurs sont-ils démarrés (commandes 'docker')? Comment se connecte jconsole (IP, informations d'identification, port, etc.)? Quelles versions des choses (Docker, OS hôte, etc)? Veuillez modifier votre question pour ajouter cette information afin que nous puissions mieux reproduire le problème. –