2016-07-08 12 views
0

私はspring-boot-starter-actuatorとio.dropwizard.metricsを使用するSpringブートプロジェクトを持っています。Jconsoleがローカルjmxアプリケーションに接続できません

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

それは私がURL http://myapplication/metricsにアクセスできるメトリックを生成します。 アプリケーションをWildfly 10スタンドアロンサーバーに展開します。

jconsoleでメトリックを読み取るためにjmxを使用したいとします。 私はJMXReporterにメトリックを送信するようにアプリケーションを構成:

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

私はサーバを起動し、アプリケーションをデプロイすると、ログは言う:管理対象Bean に位置

osbaejEndpointMBeanExporter「metricsEndpoint」に登録MBeanとしてJMXサーバーは [ポータル-WS-JMX:タイプ=エンドポイント、名前= metricsEndpoint]

Server logs

ローカルプロセスリストにjconsoleを実行すると、JConsoleプロセスとグレーのPIDだけがあります。灰色のPIDを選択すると、「管理エージェントはこのプロセスで有効になっていません」と表示されます。

  • サービス:JMX:HTTP-リモーティング-JMX:// localhostを:9990
  • サービス:JMX:リモート+ http://localhost:9990
  • はlocalhost:9990

    は、私はまた、リモートプロセス接続を使用しようとしました

JConsole

しかし、これは動作しません。

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

とプロパティ:

は、私は、JVMの変数を設定しようとしました:

  • spring.jmx.enabled =真

それはまた動作しません。

jconsoleでjmxメトリックを読むにはどうすればよいですか?

答えて

1

は、私はここで解決策を見つけた: https://dzone.com/articles/remote-jmx-access-wildfly-or

私の問題はWildflyから来ます。 私はJConsoleを実行すると、私はクラスパスをjconsoleをするためのJBoss-CLI-client.jarのとのtools.jarを必要とする:JMXに接続するために

$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 

は、今では動作しますが、私は、 "リモート+ http://localhost:9990:JMXサービス" を使用することができます。

0

ここで私はJConsoleを経由物事を公開(Tomcatを使用してもかかわらず、ではないWildfly)作業のスプリング・ブートアプリケーションを生成するために使用するコマンドライン引数のセットです:

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>" 

注アプリケーションが上で動作していることは、ポート9800を介してアクセスします(私の場合)。しかし、ポート9811と9899もJMXを扱うためにオープンしています(上記のように)。また、3つのポートには、設定したファイアウォールを介してアクセスできることを確認する必要があります。

グッドラック

+0

あなたの答えをありがとう。私はこれを試しても動作しません。 私の問題はwildyflyによって引き起こされたと思います。 – YLombardi

関連する問題