본문 바로가기

미들웨어/Apache,Tomcat

Tomcat jmx-proxy를 활용한 모니터링

반응형

Tomcat 모니터링을 위해 다양한 APM툴이 존재한다. 특히 무료라서 scouter와 함께 사용하는 경우가 많은 것 같다.
하지만 별도 agent를 설치하고, 방화벽을 오픈해야하는 등 개인적으로 귀찮았고 해서 jmx-proxy를 사용하게 되었다.
 
이번 포스팅에서는 Tomcat이 기본 재공하는 jmx-proxy를 활용한 모니터링 방법을 얘기하겠다.


1. jmx-proxy

  • Tomcat의 내부 자원을 모니터링 할 수 있는 툴로 기본적으로 manager라는 application을 통해 제공된다.
  • 브라우져를 통해 UI를 사용하는 경우가 가끔있지만 실제로 사용하는경우는 거의 못봤다.
  • http 통신을 통해 Tomcat의 내부 자원 및 상태 조회가 가능하다.

 
2. 설정

  • Tomcat을 설치하면 webapps/manager라는 application이 있다. jmx-proxy는 manager application을 통해 호출한다.
  • 특별한 설정은 없으며 사용하는 Tomcat user가 있다면 해당 user에 manager-jmx role을 부여해주면 된다.
  • tomcat-user.xml
<role rolename="manager-jmx"/>
<user username="tomcat" password="tomcat" roles="manager-jmx"/>

 

  • webapps/manager/WEB-INF/web.xml
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>JMX Proxy interface</web-resource-name>
      <url-pattern>/jmxproxy/*</url-pattern>
    </web-resource-collection>
    <!--auth-constraint>
       <role-name>manager-jmx</role-name>
    </auth-constraint-->
  </security-constraint>
  • 테스트를 위해 role을 주석처리하여 모두 접근 가능한 형태로 변경했다.
반응형


3. jmxproxy 사용방법

  • Tomcat의 HTTP port로 manager application을 호출하여 data를 불러오면 된다.
curl -s http://IP:HTTP_PORT/manager/jmxproxy?qry=${QUERY}
  • curl -s http://IP:HTTP_PORT/monitor/jmxproxy 까지만 호출하면 조회 가능한 모든 정보가 표시되며 상세정보는
    Name: 란에 있는 내용을 ${QUERY}로 사용하면 된다.(특정 user를 사용한다면 -u 옵션으로 계정정보 전달 필요)
  • 예를들어 HTTP에 대한 정보 확인이 필요하다면

        1) curl -s http://IP:HTTP_PORT/monitor/jmxproxy 호출하여 나온 결과 중 HTTP Connector 정보 확인

[root@localhost monitor]$ curl -s http://localhost:8088/manager/jmxproxy
...
Name: Catalina:type=ThreadPool,name="http-nio-8088"
...

        2) $QUERY로 Name의 값부분을 입력( ' " '와 같은 특수문자는 ascii 문자로 변환하여 호출 필요)

[webwas@localhost monitor]$ curl -s http://localhost:8088/manager/jmxproxy?qry=Catalina:type=ThreadPool,name=%22http-nio-8088%22
OK - Number of results: 1

Name: Catalina:type=ThreadPool,name="http-nio-8088"
modelerType: org.apache.catalina.mbeans.ClassNameMBean
currentThreadsBusy: 1
paused: false
selectorTimeout: 1000
connectionCount: 2
acceptCount: 100
threadPriority: 5
executorTerminationTimeoutMillis: 5000
running: true
currentThreadCount: 5
sSLEnabled: false
sniParseLimit: 65536
maxThreads: 5
connectionTimeout: 5000
tcpNoDelay: true
maxConnections: 10000
connectionLinger: -1
keepAliveCount: 1
keepAliveTimeout: 5000
maxKeepAliveRequests: 100
localPort: 8088
deferAccept: false
useSendfile: true
acceptorThreadCount: 1
pollerThreadCount: 1
daemon: true
minSpareThreads: 5
useInheritedChannel: false
alpnSupported: false
acceptorThreadPriority: 5
bindOnInit: true
pollerThreadPriority: 5
port: 8088
domain: Catalina
name: http-nio-8088
defaultSSLHostConfigName: _default_

        3) 필요한 정보를 가공해서 사용하면 됨


필요한 정보들을 스크립트로 가공하여 실시간 모니터링 용도로 사용하면 쓸만하다.
Threads, DBPool, Application정보 등 다수의 데이터 조회가 가능하다.

반응형

'미들웨어 > Apache,Tomcat' 카테고리의 다른 글

Tomcat default error page  (0) 2023.06.28
Apache method 제한하기(AllowMethods)  (0) 2023.06.24
Tomcat Connector Threads 설정 정리  (0) 2023.03.08
Tomcat Session Clustering 설정  (0) 2023.03.05
Tomcat JNDI DataSource 설정  (0) 2023.03.04