애플리케이션 서버 모니터링의 필요성은 두말할 것도 없지만 대부분의 모니터링들은 비싼 편이다. 이런 비싼 툴을 사용하지 않고도 어느 정도 유용한 정보를 볼 수 있는 기능을 제공하는 것이 바로 JMX이다. JDK 5.0 버전 이상의 서버에서는 필수로 제공된다.
JMX는 Java Management Extensions의 약자이다. 보통 Sun에서는 JMX 기술이라고 표시한다. 여기서는 그냥 간단하게 JMX라고 하자.
우선 JMX가 어떻게 구성되어 있는지 간단하게 알아보자.
위의 그림을 보면 구성이 엄청나게 복잡하다. 여기에 명시된 JMX의 버전은 2006년 말(10월-11월 사이)에 나온 버전을 기초로 하고 있으며, 지금까지 거의 변경 사항이 없다고 생각해도 된다. 현재 사용중인 JDK의 JMX에 대해서 확인해 보려면 자바 API가 있는 docs의 docs/techonotes/guides/jmx 디렉터리에 있는 설명 파일들을 확인해 보면 된다. 먼저 그림에 대한 설명을 하기 전에 JMX의 4단계 레벨에 대해서 알아보자. 4단계 레벨은 다음과 같다.
위의 그림 좌측을 보면 각 레벨 영역이 표시되어 있다. 그리고 추가적으로 다른 관리 프로토콜 API 연동을 위한 레벨이 우측에 표시되어 있다. 상단은 모니터링하는 화면들이고 하단은 서버측이라고 생각하면 된다. 그럼 각 레벨에 대해서 조금 더 상세하게 알아보자.
여기에서는 하나 이상의 MBeans(Management Bean, 관리 빈즈)를 제공한다. 이 MBeans에서 필요한 리소소들의 정보를 취합하여 에이전트로 전달하는 역할을 한다. API를 통해서 최소한의 노력으로 MBean의 처리 내용을 전달할 수 있도록 되어 있다.
이 레벨에서는 에이전트를 구현하기 위한 스펙이 제공되어 있다. 에이전트는 리소를 관리하는 역할을 수행한다. 보통 에이전트는 모니터링이 되는 서버와 같은 장비에 위치한다. 에이전트는 MBean 서버와 MBeans를 관리하는 서비스의 집합으로 구성되어 있다. JMX의 데이터를 관리하는 관리자(Manager)와 연계를 위한 어댑터나 커넥터를 이 레벨에서 제공한다.
분산 서비스 레벨은 JMX 관리자를 구현하기 위한 인터페이스와 컴포넌트를 제공한다. 여러 에이전트에서 제공하는 정보를 관리할 수 있는 화면과 같은 부분을 여기서 담당한다고 생각하면 된다.
이와 같이 JMX는 주로 3개의 레벨로 나뉘어져 서비스를 제공한다. 이러한 구조를 이용해 모니터링하고자 하는 내용을 개발하여 사용할 수도 있고, 서버에서 JMX의 스펙을 구현하여 제공하는 기능을 사용할 수도 있다.
JMX를 제대로 이해하기 위해서는 MBean에 대해서 정확하게 이해하고 잇어야 한다. MBean은 4가지 종류가 있으며 각각의 사용 용도는 다음과 같다.
각각의 MBean은 에이전트 서비스를 통해 MBean 서버에 데이터를 전달하게 된다. 이 MBean 서버를 통해서 클라이언트에서 서버의 상황을 모니터링할 수 있다. 이 에이전트가 제공하는 기능은 다음과 같다.
필요에 따라 에이전트 서비스를 통해서 서버의 메서드들을 수행하고 값을 변경할 수 있다.
JDK를 설치하고 보면 bin이라는 디렉터리를 확인할 수 있다. 그 디렉터리 아래에는 java와 javac, javadoc만 있는 것이 아니다. 여러 가지 다양한 툴이 존재하며, 그 중에서 모니터링을 위한 jconsole과 jvisualvm(이하 Visual VM)이라는 툴도 존재한다. 이 두개의 툴은 모두 JVM을 모니터링하기 위해서 만들어진 툴이며, jconsole은 구식 툴이고 Visual VM이 최신 툴이라 생각하는 것이 편하다. 이 두 가지 툴 모두 JMX의 데이터를 볼 수 있도록 만들어졌다.
추가로 Mission Control이라는 툴도 있다. 자바를 만든 Sun이 몰락하고, Oracle이 Sun을 인수했다. 그런데, 오라클에는 이미 JRockit이라는 훌륭한 JVM을 보유하고 있으며, 이 JVM은 오라클의 WebLogic과 같은 WAS를 구매하면 무료로 사용할 수 있다. 이 JRockit에는 Misssion Control이라는 훌륭한 모니터링 툴이 존재한다.
원격지에 있는 서버와 통신을 하여 JMX 모니터링을 하기 위해서는 서버나 자바 애플리케이션을 시작할 때 VM 옵션을 지정해야 한다. 일단 간단하게 사용하려면 다음의 3가지 옵션을 지정할 수 있다.
이렇게 지정하면 아이디와 패스워드를 지정할 필요 없이 서버의 IP와 포트만으로 서버에 원격으로 접속할 수 있다.
아이디와 패스워드를 지정하여 접속할 수 있도록 변경하려면 다음과 같이 지정할 수 있다. 여기서 jmxremote.password 및 jmxremote.access는 패스워드와 권한이 저장되어 있는 파일 이름이다.
참고