Logstash에서 Wildfly의 JMX 정보 얻기

소개



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로 미리 만든 사용자를 지정합니다.
  • service:jmx:remote+ http://192.168.10.126:9990



  • 연결할 수 있으면 jconsole은 다음과 같이 표시됩니다.



    Logstash 설정



    먼저 logstash-input-jmx를 설치하려면 다음 명령을 실행합니다.
    # /usr/share/logstash/bin/logstash-plugin install logstash-input-jmx
    

    실행 후 Wildfly JMX에 대한 설정을 만듭니다. 설정은 이하의 공식 사이트를 참고로 실시했습니다.
  • Jmx input plugin
  • # 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]에서 확인하면 다음과 같이 얻은 정보가 표시되었습니다.



    다만, 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.

    참고


  • Remote JMX access to WildFly (or JBoss AS7) using JConsole
  • JMX MBean 서버 연결 사용
  • 좋은 웹페이지 즐겨찾기