목차

모니터링 운영관리 도구 설치가이드

설치절차

NO단계확인사항
1 모니터링 운영관리 도구(monitoring-web.war) Deploy jarfile is not loaded 항목
2 모니터링 운영관리 도구 설정 web.xml 실행 Servlet 추가 확인
3 Database Table 생성
4 모니터링 대상 등록(Web UI 통해 서버/컨테이너 등록) JNDI Port 통신 확인
5 모니터링 아키텍처 및 문제 해결 가이드

1. monitoring-web.war Deploy

서버가 Tomcat일 경우 war파일 배포방법은 다음과 같다.

[CATALINA_HOME]\webapps 폴더 하위에 다운로드한 monitoring-web.war 파일을 복사한다.

Tomcat 서버를 기동하면 자동으로 monitoring-web.war가 배포되며 [CATALINA_HOME]\webapps\monitoring-web 폴더가 생성된다.

Tomcat이외의 어플리케이션 서버의 배포방법에 대해서는 해당 어플리케이션 서버의 메뉴얼을 참고한다.

2. 모니터링 운영관리 도구 설정

    <servlet>
       <servlet-name>EgovMBCManagerServlet</servlet-name>
       <servlet-class>egovframework.oe2.svr.mbean.mbeanmanager.service.EgovMBCManagerServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
       <servlet-name>infraRedListenerServlet</servlet-name>
       <servlet-class>egovframework.oe2.svr.collector.base.InfraRedListenerServlet</servlet-class>
       <init-param>
          <param-name>port</param-name>
          <param-value>7777</param-value>
       </init-param>
       <init-param>
	  <param-name>resetCacheInterval</param-name>       
          <param-value>1800</param-value>
	</init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>infraRedListenerServlet</servlet-name>
        <url-pattern>/infraRedListenerServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>AgentManagerServlet</servlet-name>
        <servlet-class>egovframework.oe2.agt.aggregator.base.AgentManagerServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>AgentManagerServlet</servlet-name>
        <url-pattern>/AgentManagerServlet</url-pattern>
    </servlet-mapping>

JEUSMain.xml

<engine-container>
    <command-option> 
        -Djeus.jndi.rmi.useRmiRegistry=true -Dsun.rmi.transport.tcp.connectionPool=true
    </command-option>

모니터링 운영관리 도구의 Main 화면에서 보여지는 어플리케이션 모니터링 항목의 임계치는 infrared-web.properties에서 관리하고 있다.
따라서 infrared-web.properties에는 어플리케이션 모니터링데이타 저장주기 및 어플리케이션 모니터링 항목에 대한 임계치가 기본값으로 설정되어 있으며 필요할 시 파일에서 그 값을를 조정한다.

<표 1.1.1 모니터링 서버 속성>

PropertyDescriptionDefault Value
persist-interval실시간으로 전송된 모니터링 데이타를 데이타베이스에 저장하는 주기이다. ms단위로 설정한다. 30000
threshold.http어플리케이션의 http 실행에 대한 모니터링 임계치를 정의한다.3000
threshold.application어플리케이션 API 실행에 대한 모니터링 임계치를 정의한다.3000
threshold.jdbc어플리케이션의 JDBC 실행에 대한 모니터링 임계치를 정의한다.3000
threshold.sql어플리케이션의 sql 실행에 대한 모니터링 임계치를 정의한다.2000

위의 기본값을 포함하고 있는 설정파일 infrared-web.properties의 내용은 다음과 같다.

	#The sample infrared-web.properties
	persist-interval=30000
	threshold.http=3000
	threshold.application=3000
	threshold.jdbc=3000
	threshold.sql=2000

3. Database 설정

1. Database Table 생성

모니터링 운영관리 도구에 필요한 정보를 저장하거나 관리하기 위해 표에서 나열된 Database 테이블 생성 Script를 제공하고 있다. dbscript.zip다운로드

종류권장버전비고
HSQLDB 1.8.0 HSQLDB는 In-process로 동작
Mysql 5.1.30
Tmax Tibero 3.0(sp2)
Altibase DBMS Server 5.1.3.18
Oracle 10g

2. DBMS 설정파일 수정

globals.properties 파일을 수정한다.

Globals.DbType = oracle

4. 모니터링 대상 등록

모니터링 대상서버를 등록하기 위해서 MBean 에이전트는 대상 서버의 컨테이너 정보를 요구하며, 어플리케이션 에이전트는 구현된 어플리케이션 설치 위치까지 지정해 주어야 한다.
따라서, 서버등록, 컨테이너 등록, 어플리케이션 등록을 순차적으로 실행하여야 한다.

1. 서버 등록

모니터링 대상 서버의 정보를 등록한다. 서버 등록참조

2. 컨테이너 등록

모니터링 대상 컨테이너 정보를 등록한다. 컨테이너 등록참조

3. 어플리케이션 등록

모니터링 대상 어플리케이션 정보를 등록한다. 어플리케이션 등록참조

4. 모니터링 환경 설정

모니터링 환경은 대상서버의 MBean 에이전트가 운영관리 도구에 전송할 정보(Cpu, memory,Thread,Session,jdbc)의 모니터령 여부와 전송주기, 임계치 설정 등의 기능과 어플리케이션 에이전트 property 경로, 각 layser별 모니터링 여부 및 전송주기 등을 설정하는 기능을 제공한다.

1.Mbean 에이전트 설정

* Mbean 에이전트 설정참조

2. Application 에이전트 설정

* 어플리케이션 에이전트 설정참조

5. MBean 모니터링 아키텍처 및 문제 해결 가이드

MBean 모니터링 아키텍처

모니터링 도구는 모니터링 대상 서버에서 export된 MBean에 접속하여 데이터를 가져오는 아키텍처로 구성되어 있고 정보를 갖고 오기 위해서는 export된 MBean 명을 알아야 한다.

MBean은 JMX에 제시된 표준에 따라 구현해야 하나, 벤더별 JDK, WAS에 따라서 일부 서비스의 Mbean export 명이 달라, 동일한 서비스 정보(예:cpu 사용현황)를 갖고 오기 위해서 각 JDK나 WAS별로 제공하는 표준화되지 않은 export 명을 사용하여야 한다.
따라서, 표준화된 export 명이 아닌 경우는 mbean.properties 파일에 jdk별, was별로 MBean export 명을 정의하여 운영관리도구에서 데이타 수신시 mbean.properties 에 정의된 export 명을 참조하여 각각을 구분하여 데이타를 수신하도록 구성하였다.

모니터링 문제해결 가이드

모니터링 대상 서버가 정상적으로 모니터링 되지 않을 때는 원인을 찾기 위해 아래와 같은 방식으로 확인한다.

순서대상절차방법
1모니터링 대상 서버 RMI 통신 확인 jconsole 통해 RMI 접속 확인
2모니터링 대상 서버 MBean Export Name 확인jconsole/POJO 통해 Export 명 확인 및 mbean.properties 확인
3모니터링 대상 서버 jar Library 확인 버전에 맞는 Library 사용 권장
1. RMI 통신 확인

jconsole에 Server IP 및 RMI Port 등을 정확히 입력하고 접속이 가능한지 확인해본다.

JAVA SDK에 내장된 jconsole.exe를 실행하고 “Advanced” 탭 JMX URL란에 “service:jmx:rmi:///jndi/rmi://서버IP:RMI포트/jmxrmi” 입력하여 접속 후 테스트 수행한다. 접속이 되지 않는다면 WAS의 RMI 서비스가 작동중인지, 설정이 정상적으로 되었는지 확인해 본다.

2. MBean Export Name 확인

모니터링 도구에서 모니터링 대상 서버의 데이터를 수집하기 위해 Mbean export name을 사용한다. 현재까지 테스트된 환경을 통해 수집된 default export name을 모니터링 도구에서 사용하고 있다.

Mbean export name

서비스정보default export name모니터링 도구 내의 mbean 구현 방법
Operating Systemjava.lang:type=OperatingSystemManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME
Runtimejava.lang:type=RuntimeManagementFactory.RUNTIME_MXBEAN_NAME
Compilationjava.lang:type=CompilationManagementFactory.COMPILATION_MXBEAN_NAME
Memoryjava.lang:type=MemoryManagementFactory.MEMORY_MXBEAN_NAME
Loaded Classjava.lang:type=ClassLoadingManagementFactory.CLASS_LOADING_MXBEAN_NAME
Minor GC(Sun JDK)java.lang:type=GarbageCollector,name=Copymbean.properties에 정의(sun_minorGC+”,name=”+sun_minorGC_name)
Major GC(Sun JDK)java.lang:type=GarbageCollector,name=MarkSweepCompactmbean.properties에 정의(sun_majorGC+”,name=”+sun_majorGC_name )
GC(IBM JDK)java.lang:type=GarbageCollector,name=J9 GCmbean.properties에 정의(ibm_GC, ibm_GC_name)
Minor GC(Sun JDK)java.lang:type=GarbageCollector,name=PS MarkSweepmbean.properties에 정의(hp_minorGC+”,name=”+hp_minorGC_name)
Major GC(Sun JDK)java.lang:type=GarbageCollector,name=PS Scavengembean.properties에 정의(hp_majorGC+”,name=”+hp_majorGC_name)
Session(Tomcat)Catalina:type=Manager,pathmbean.properties에 정의(tomcat_[톰캣 버전]_session필드)
Thread(Tomcat)Catalina:type=ThreadPool,name=httpmbean.properties에 정의(tomcat_[톰캣 버전]_thread+”,name=”+tomcat_[톰캣 버전]_thread_name)
Session(JBoss)jboss.web:type=Manager,pathmbean.properties에 정의(jboss_[JBoss버전]_session)
Thread(JBoss)jboss.web:type=ThreadPool,name=httpmbean.properties에 정의(jboss_[JBoss버전]_thread+”,name=”+jboss_[JBoss버전]_thread_name)
JDBC(JBoss)jboss.jca:service=ManagedConnectionPool,namembean.properties에 정의(jboss_[JBoss버전]_jdbc)
Thread(JEUS)JEUS:j2eeType=JeusService,jeusType=ThreadPool,JMXManager=[컨테이너명]…프로그램내에 정의
JDBC(JEUS)JEUS:j2eeType=JDBCResource,JMXManager=[컨테이너명]…프로그램내에 정의
Thread(WebLogic)com.bea:Name=ThreadPoolRuntime,ServerRuntime=[Server 명]…프로그램내에 정의
JDBC(WebLogic)com.bea:Name=[Server 명]…Type=JDBCServiceRuntime프로그램내에 정의
ModelExtractbean:name=EgovModelExtractMBeanmbean.properties(spring_model) 및 context-monitoring-mbean.xml
Schedulebean:name=EgovScheduleExtractMBeanmbean.properties(spring_schedule) 및 context-monitoring-mbean.xml
EhCachebean:name=EgovCacheInfoMBeanmbean.properties(spring_cache) 및 context-monitoring-mbean.xml

프레임워크 모니터링 항목에서 제공하는 서비스들의 export name을 알기 위해서는 JConsole이나 POJO 프로그램을 이용한다. JConsole을 사용하거나 POJO 프로그램을 이용하여 모니터링 대상 서버에 export 된 MBean List를 획득 후 default export MBean 명과 비교해보고, 제공하는 MBean export 명이 다른 경우 MBean.properties 파일을 수정하여야 한다.

Properties 명 위치
MBean.properties monitoring-web.war 의 monitoring-web/WEB-INF/classes/egovframework/egovProps
context-monitoring-MBean.xml 실행환경의 egovframework/spring/

2-1. Jconsole 을 이용하여 JVM에 노출된 MBean Export Name 확인하는 방법

2-2. Java POJO 프로그램을 이용하여 WAS에 노출된 Export Name 확인하는 방법

POJO 실행명령
javac -classpath .:[was library|none] JvmMBean.java
java -classpath .:[was library|none] JvmBean 127.0.0.1 8992
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
 
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXServiceURL;
import javax.naming.InitialContext;
import javax.naming.NamingException;
 
public class JvmMBean
 {
    public static void main(String[] args) throws IOException, 
                  NamingException, MalformedObjectNameException, 
                  NullPointerException, InterruptedException {
 
        // args[0] : server IP
        // args[1] : rmi port 
        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi");
 
        JMXConnector conn = javax.management.remote.JMXConnectorFactory.connect(url, null); 
        MBeanServerConnection mbsc = conn.getMBeanServerConnection();    
        Set jvmMBean = mbsc.queryMBeans(null, null);
 
        for (Iterator i = jvmMBean.iterator(); i.hasNext();) {
              ObjectName objName = ((ObjectInstance) i.next()).getObjectName();
              System.out.println("[JMX MBean] " + objName);      
        }
    }
}

JVM, JEUS, JBoss, Tomcat, WebLogic Export Name 확인을 위한 POJO 프로그램: mbean_pojo.zip

✔ 주의: JDK 또는 WAS에 모니터링 대상 항목을 아예 노출하지 않은 경우 즉, MBean Export 항목 없을 경우에는 모니터링 할 수가 없으므로 대상에서 제외하여야 한다.

3. Library 확인

현재 테스트 된 WAS는 아래와 같으며 war파일에도 이와 동일한 버전의 Library가 포함되어 있다. 위의 jconsole, MBean POJO 테스트를 수행하고도 모니터링이 비정상적으로 수행 될 경우 버전에 맞는 Library를 사용하기를 권장한다.

이름 권장버전 자바호환성
Tmax JEUS 6.0.5 clientcontainer.jar
javaee.jar
jclient.jar
jeus.jar
jeusapi.jar
jeusjaxb.jar
jeusmp.jar
jeusutil.jar
jms.jar
jmxremote.jar
Oracle WebLogic Server 9.2 wlclient.jar
wljmxclient.jar
10g(10.2) wlclient.jar
wljmxclient.jar
11g(10.3) wlclient.jar
wljmxclient.jar
Jboss application platform 4.3.0 jbossall-client.jar
jnpserver.jar
jms.jar
5.1.0 jbossall-client.jar
jbossjmx-ant.jar
jbosssx-as-client.jar
jboss-client.jar
jboss-common-core.jar
jboss-integration.jar
jboss-j2se.jar
jboss-logging-jdk.jar
jboss-logging-log4j.jar
jboss-logging-spi.jar
jboss-metadata.jar
jboss-remoting.jar
jboss-security-spi.jar
jboss-serialization.jar
jmx-client.jar
jmx-invoker-adaptor-client.jar
jnp-client.jar
6.0.0 M5 jbossall-client.jar
jboss-client.jar
jboss-common-core.jar
jboss-integration.jar
jobss-j2se.jar
jboss-jms-api_1.1_spec.jar
jboss-jmx.jar
jboss-jmx-annotations.jar
jbossjmx-ant.jar
jboss-metadata-client.jar
jboss-metadata-common.jar
jboss-metadata-ear.jar
jboss-metadata-ejb.jar
jboss-metadata-rar.jar
jboss-metadata-war.jar
jboss-remoting.jar
jboss-remoting-3.jar
jboss-security-spi.jar
jboss-serialization.jar
jbosssx-as-client.jar
jbosssx-client.jar
jboss-system-client.jar
jboss-system-jmx-client.jar
jmx-invoker-adaptor-client.jar
jnp-client.jar
Apache Tomcat 6.0.29

✔ 주의: 모니터링 운영 서버는 같은 WAS의 서로 다른 버전을 모니터링 하는 경우 즉 JEUS 5.0, JEUS6.0 등이 혼재된 상황에서는 수행이 되지 않는다.

라이브러리 추가시 주의사항

웹 어플리케이션 서버 기동시 jarfile is not loaded 라는 에러 메시지가 나오면 해당 라이브러리를 Wide Library폴더로 이동해야 한다. ( Ex. javaee.jar, clientcontainer.jar, jclient.jar )

*WAS 별 Wide Library

WASWide Library
jeus JEUS_HOME/lib/application
tomcat CATALINA_HOME/lib
jboss JBOSS_HOME/lib
weblogic WEBLOGIC_HOME/lib
Selvlet 2.4 Spec SRV.9.7.2 Web Application Class Loader 참조
SRV.9.7.2 Web Application Class Loader
The class loader that a container uses to load a servlet in a WAR must allow the developer to load any resources contained in library JARs within the WAR following normal J2SE semantics using getResource. As described in the J2EE license agreement, servlet containers that are not part of a J2EE product should not allow the application to override J2SE platform classes, such as those in the java.*and javax.* namespaces, that J2SE does not allow to be modified. Also, servlet containers that are part of a J2EE product should not allow the application to override J2SE or J2EE platform classes, such as those in java.* and javax.* namespaces, that either J2SE or J2EE do not allow to be modified. The container should not allow applications to override or access the container’s implementation classes. It is recommended also that the application class loader be implemented so that classes and resources packaged within the WAR are loaded in preference to classes and resources residing in container-wide library JARs.

참고자료

Java Remote Method Invocation 1.5.0 Specification
JSR-000154 JavaTM Servlet 2.4 Specification