0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LogstashからWildflyのJMX情報を取得する

Last updated at Posted at 2020-08-04

はじめに

LogstashからWildflyのJMX情報を取得する環境を構築して試してみます。

環境

使用した環境は以下のとおり。

  • CentOS 7.5
  • Elasticsearch 7.8
  • Kibana 7.8
  • Logstash 7.8
  • Wildfly 20.0.1.Final

ElasticStack 7.8 環境構築」で構築した環境を利用しています。

WildflyをリモートからJMXで接続できるように設定する

リモートからJMXへ接続できるようにWildflyを設定します。
以下の設定ファイルを修正します。

  • $JBOSS_HOME/standalone/configuration/standalone.xml

まず、リモート構成を許可するため、以下のように[use-management-endpoint="true"]を追加します。

standalone.xml
       <subsystem xmlns="urn:jboss:domain:jmx:1.3">
            <expose-resolved-model/>
            <expose-expression-model/>
            <remoting-connector use-management-endpoint="true"/>
        </subsystem>>

次にリモート接続を許可するため、以下のように修正します。
"192.168.10.126"は環境に合わせて、外部から接続できるIPアドレスを指定します。

standalone.xml
    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:192.168.10.126}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:192.168.10.126}"/>
        </interface>
    </interfaces>

最後にWildflyを起動します。
起動後、jconsoleを使用して外部から接続できることを確認します。
jconsoleでWildflyに接続する場合、以下のようにjboss-cli-client.jarを指定する必要があります。
以下の例はWindowsから接続する場合のコマンドです。

%JAVA_HOME%/bin/jconsole -J-Djava.class.path=%JAVA_HOME%/lib/tools.jar;%JAVA_HOME%/lib/jconsole.jar;C:\jboss-cli-client.jar

jconsoleで新規接続先を指定します。ユーザー名とパスワードはWildflyであらかじめ作成したユーザーを指定します。

image.png

接続できるとjconsoleは以下のように表示されます。

image.png

Logstashの設定

まず、logstash-input-jmxをインストールするために、以下のコマンドを実行します。

# /usr/share/logstash/bin/logstash-plugin install logstash-input-jmx

実行後、Wildfly JMX用の設定を作成します。設定は以下の公式サイトを参考に実施しました。

# vi /etc/logstash/conf.d/wildfly-jmx.conf

input {
  jmx {
    path => "/etc/logstash/jmx"
    polling_frequency => 60
    type => "jmx"
    nb_thread => 4
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "wildflyjmx-%{+YYYY.MM.dd}"
  }
}

上の設定でJMXの接続、取得するデータを記載する設定のパスを指定しました。(/etc/logstash/jmx)
以下のようなJSONファイルを新規に作成します。

"url"と"host"が重複していますが、両方設定しないとエラーになったのでそのままにしています。
本当は"url"がなくても接続できるはずなのですが、Wildflyの場合はプロトコルにremote+httpを使用しているためか、このような設定になっています。
queriesの部分がJMXで取得するデータになります。

/etc/logstash/jmxconf
    {
      "url": "service:jmx:remote+http://192.168.10.126:9990",
      "host" : "192.168.10.126",
      "port" : 9990,
      "username" : "testadmin",
      "password": "XXXXXXXX!",
      "alias" : "wildflyserver1",
      "queries" : [
      {
        "object_name" : "jboss.as.expr:data-source=ExampleDS,subsystem=datasources,statistics=pool",
        "attributes" : [ "ActiveCount", "AvailableCount" ],
        "object_alias" : "DataSource.Pool"
      } ]
    }

設定後、logstashコマンドで設定が正しいかを確認します。

# /usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/wildfly-jmx.conf
[INFO ] 2020-08-03 10:48:03.357 [LogStash::Runner] Reflections - Reflections took 84 ms to scan 1 urls, producing 21 keys and 41 values 
Configuration OK
[INFO ] 2020-08-03 10:48:03.922 [LogStash::Runner] runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

問題がなければ、logstashコマンドで起動してみます。

# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wildfly-jmx.conf 

ここで以下のエラーが発生しました。

[ERROR] 2020-08-04 05:23:25.083 [Ruby-0-Thread-15: :1] jmx - Unsupported protocol: remote+http
[ERROR] 2020-08-04 05:23:25.084 [Ruby-0-Thread-15: :1] jmx - javax.management.remote.JMXConnectorFactory.newJMXConnector(javax/management/remote/JMXConnectorFactory.java:359)

remote+httpがサポートされていないというエラーのようです。
jconsoleで接続した際にjboss-cli-client.jarを指定したので、同様に設定して起動したところエラーが解消されました。

# export LS_JAVA_OPTS=-Xbootclasspath/a:/opt/wildfly-20.0.1.Final/bin/client/jboss-cli-client.jar
# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/wildfly-jmx.conf 

KibanaでJMXで取得した情報を表示する

Kibanaの[Discover]で確認すると、以下のように取得した情報が表示されました。

image.png

ただし、Jmx input pluginに以下のように記載がありましたが、metric_value_numberではなくmetric_value_stringになってしまいました。原因不明。

When returned metrics value type is number/boolean it is stored in metric_value_number event field otherwise it is stored in metric_value_string event field.

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?