모니터링 도구 설치가이드

설치절차

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. 모니터링 운영관리 도구 설정

  • Web.xml 에 init Servlet 정의
    <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>
  • JEUS 일 경우 rmiRegistery 등록

JEUSMain.xml

<engine-container>
    <command-option> 
        -Djeus.jndi.rmi.useRmiRegistry=true -Dsun.rmi.transport.tcp.connectionPool=true
    </command-option>
  • classes 폴더에 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 생성

종류권장버전
HSQLDB 1.8.0
Mysql 5.1.30
Tmax Tibero 3.0(sp2)
Altibase DBMS Server 5.1.3.18
Oracle 10g
  • HSQLDB 는 데이타베이스를 이용할 수 없는 제약환경에서 3-4시간 한시적인 테스트 용도로 사용할 것을 권장한다.

2. DBMS 설정파일 수정

globals.properties 파일을 수정한다.

Globals.DbType = oracle

4. 모니터링 대상 등록

1. 서버 등록

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

2. 컨테이너 등록

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

3. 어플리케이션 등록

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

4. 모니터링 환경 설정

1.Mbean 에이전트 설정
2. Application 에이전트 설정

5. 모니터링 Mechanism 및 문제 해결 가이드

모니터링 Mechanism

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

MBean은 JDK, WAS에 따라서 export 명이 다를 수 있는데 모니터링 서버 개발 시 유연하게 사용하기 위하여 최대한 시스템에 정의된 export 명을 사용하도록 하였으며 JDK 버전에 따라서 export명이 다른 경우(예:Garbage Collection)거나 WAS에서 동일한 패턴의 export 명을 사용하는 경우 mbean.properties 파일에 MBean export 명을 정의 하였다.

모니터링 문제해결 가이드

모니터링 대상 서버가 정상적으로 모니터링 되지 않을 때는 아래와 같은 방식으로 확인 가능하다.

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

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

JAVA SDK에 내장된 jconsole.exe를 실행하고 “Advanced” 탭 JMX URL란에 “service:jmx:rmi:///jndi/rmi://서버IP:RMI포트/jmxrmi” 입력하여 접속 후 테스트 수행한다.

2. MBean Export Name 확인

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

Mbean export name

MBean 종류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)
Session(JEUS)JEUS:j2eeType=JeusService,jeusType=WebEngine,JMXManager=[컨테이너명]…프로그램내에 정의
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 weblogic.jar
wlclient.jar
wljmxclient.jar
10g(10.2) wlfullclient.jar
wlclient.jar
wljmxclient.jar
11g(10.3) wlfullclient.jar
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폴더로 이동해야 한다.

*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.

참고자료

 
egovframework/oe2/설치/모니터링_도구_설치.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki