2017-07-05 31 views
0

独自の内部アプリケーションからJMX(RMI経由)メトリックを収集しようとしているdatadog-agentからの接続が拒否されていますドッカーコンテナ。ただし、jconsoleは、独自のドッカーコンテナ内に存在するアプリケーションからメトリックを収集できます。 datadog-agentはそれ自身のコンテナ内に存在します。両方のコンテナは、同じホスト上の同じネットワーク内に存在します。何か案は?私は他のスタックオーバーフローの質問を見てきました。 IPアドレス0.0.0.0と、特定のホストアドレスが Dockerコンテナの出力内でDatadog-agentがスピンアップするJMX RMI接続エラー

ドッカーコンテナ0 /etc/dd-agent/conf.d/jmx.yamlカスタムjmx.yamlファイル内で試されてきた

  • `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を:
      *を介しカフカメトリック
      ストリーム出力my_streams_app *が実行される実行します送信されたメトリックを受け取ることができます。

    ドッカー容器1は:
    *はDatadogエージェントはJMXのデフォルト(RMI)は、上記容器0に存在my_streams_appからメトリックを取得するために使用する容器 内datadogエージェントを実行します。
    *両方のコンテナは、同じホスト(私のラップトップMAC OSX)内の同じネットワーク上で実行されます。
    *ドッカーコンテナ内のdatadog-agent内から他のコンテナ内のmy_streams_app ipおよびportにnetcatできます。

    :0.0.0.0と9998を使用して、また、特定のIPを使用することができますことは、コンテナ内からdatadogのJMXによってメトリックを収集するための
    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 
    
    • コンテナ内のJMX構成からdatadogエージェントを実行するために
      *コマンドを扱います

      インスタンス:

      • ホスト:0.0.0.0 ポート:9998 タグ: newTagは: jmx_urlをmy_streams: "サービス:JMX:RMI:/// JNDI/RMI://0.0.0.0:9998/jmxrmi" を 名前:jmx_instance

      docker_images: - my_streams_app

      init_config: is_jmx:true conf: - 含む: ドメイン: '"kafka.streams"' bean: '"kafka。ストリーム ":タイプ=" ストリーム・メトリック」、クライアントID =「my_test-1-StreamThread-1" 」 属性: コミットのコールレート: METRIC_TYPE:ゲージ コミット時間平均: METRIC_TYPE:ゲージ はコミット時-MAXを: METRIC_TYPE:ゲージ ポーリング呼び出しレート: METRIC_TYPE:ゲージ

    のJConsole:
    *は経由の上、ドッキングウィンドウコンテナ0内my_streams_appからメトリックを収集します。

    jconsole 0.0.0.0:9998 
    

    エラー出力:

    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がFailed to retrieve RMIServer stub

+0

ここに関連性の高い情報がたくさんあります。 JMXに接続するためのDatadog設定は何ですか?コンテナはどのように起動されますか( 'docker'コマンド)? jconsoleはどのように接続していますか(IP、認証情報、ポートなど)?どんなバージョンのもの(Docker、ホストOSなど)?問題をよりよく再現できるように、この情報を追加するために質問を修正してください。 –

答えて

0

ソリューションごととして開始されました:

  • ドッキングウィンドウコンテナアプリケーションを実行している0

    • メトリックを出力しているアプリケーション内にbashスクリプトを作成して、メトリックを出力しています。
    • スクリプト内では、ドッカー・コンテナ$ HOSTNAME環境変数の値をjmxremote.hostおよびrmi.server.hostnameに設定します。

    #/ binに/ shの
    のjavaに-Djava.util.logging.config.file = logging.properties -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate = falseを! - Dcom.sun.management.jmxremote.ssl = false -Dcom.sun.management.jmxremote.rmi.port = 9998 -Dcom.sun.management.jmxremote.port = 9998 -Djava.rmi.server.hostname = $ HOSTNAME -Dcom .sun.management.jmxremote.host = $ HOSTNAME -Dcom.sun.management.jmxremote.local.only = falseを-jar /app/my-streams.jar

    • ます。chmod + xの
    • を設定することを忘れないでくださいdockerfile CMDを設定してscriを実行するそうのような上記PT:
      CMD [ "./"]
  • ドッカー容器1

    • に上述したようdatadog剤を
    • 構成jmx.yamlファイルを実行している容器質問。ホスト名をアプリケーション名に設定するだけです。
  • さらに詳しい情報はスタックオーバーフローの投稿から利用できます。上記の説明では、datadog-agentからのエラーを検出するメトリックが修正されています。

    ドッキングウィンドウコンテナ0
    *私のストリーム
    * **タブ
    に依存するサービスをスピンアップMVNきれいなパッケージのドッキングウィンドウ:ビルドここ


は、各コンポーネントを実行する方法であります
**ドッカー製作

  • 別のタブ私のストリームアプリ
    をスピンアップ**ドッキングウィンドウが私のストリームアプリを殺す
    **ドッキングウィンドウRM私のストリームアプリ
    **ドッキングウィンドウの実行が私のストリームアプリ-pを--name -d 9998:9998 - ネットワーク= mystreams_defaultは

ドッカ容器1
は*ドッキングウィンドウ-t DD-エージェント - 私のストリームを構築quay.io/myimage/my-streams。/dev/docker.sock:ro -v/proc /:/ host/proc /:ro -v/sys/fs/cgroup /:/ docker.sock:/var/run/docker.sock:ro -v/proc /ホスト/ SYS/FS/cgroup内:メトリックは
を働くかどうかを確認するためにドッカ容器1内にRO -e LOG_LEVEL = DEBUG -e SD_BACKEND =ドッキングウィンドウ--network = mystreams_default

SSH *ドッキングウィンドウPSは//の名前を見つけるために904e6561cc97 @
ルート/#サービスdatadogエージェントconfigcheck:904e6561cc97 @
ルートをlist_everything /#サービスdatadogエージェントJMXを:904e6561cc97 @
*ドッキングウィンドウのexec -it/binに/ bashの
ルートにログインするためのコンテナ/ #service datadog-agent jmx collect

関連する問題