Anyframe Monitoring Tool

Version 1.0.0

본 문서의 저작권은 삼성SDS에 있으며 Anyframe 오픈소스 커뮤니티 활동의 목적하에서 자유로운 이용이 가능합니다. 본 문서를 복제, 배포할 경우에는 저작권자를 명시하여 주시기 바라며 본 문서를 변경하실 경우에는 원문과 변경된 내용을 표시하여 주시기 바랍니다. 원문과 변경된 문서에 대한 상업적 용도의 활용은 허용되지 않습니다. 본 문서에 오류가 있다고 판단될 경우 이슈로 등록해 주시면 적절한 조치를 취하도록 하겠습니다.


I. Anyframe Monitoring Tool
1. Introduction
1.1. 기본 구조
1.2. 주요 기능
2. Installation
2.1. 다운로드
2.2. WAR 파일 배포
2.3. 실행 확인
2.4. 테스트 모니터링
2.5. Resources
3. Configuration
3.1. 모니터링 속성 정의
3.2. 모니터링 대상 정의
3.2.1. HTTP Request 모니터링
3.2.2. 비즈니스 서비스 호출 모니터링
3.2.3. 쿼리문 실행 모니터링
3.3. DB 기본 설정 변경 방법
4. Views
4.1. Select Application
4.1.1. 구성
4.2. Panels
4.2.1. Absolute Panel
4.2.2. Hierarchical Panel
4.2.3. Last Invocation Panel
4.2.4. Report
4.2.5. Refresh
4.2.6. Reset
4.2.7. [참고] Interpreting Layer Number

Anyframe에서는 JavaEE 기반 어플리케이션의 성능을 모니터링할 수 있는 기능을 제공하는 오픈 소스인 InfraRED 기반으로 Aspect를 이용하여 성능 측정을 위한 데이터를 수집하고 데이터 분석 결과를 리포팅해 주는 역할을 해주는 Monitoring Tool을 제공한다. Monitoring Tool의 설치 및 사용 방법에 대해 알아보도록 하자.

InfraRED는 JavaEE 기반 어플리케이션의 성능을 모니터링할 수 있는 기능을 제공하는 오픈 소스 Performance Tool로써, Aspect를 이용하여 성능 측정을 위한 데이터를 수집하고 데이터 분석 결과를 리포팅해 주는 역할을 수행한다. Anyframe Monitoring Tool은 InfraRED( http://infrared.sourceforge.net ) 를 기반으로 InfraRED 내에 내재된 다양한 버그들을 조치하고 개선된 UI를 제공한다. 다음에서는 Anyframe Monitoring Tool의 근간을 이루는 InfraRED의 기본 구조와 Anyframe Monitoring Tool의 주요 기능에 대해 살펴보기로 한다.

InfraRED는 다음 그림에서 보는 바와 같이 기본적으로 Agent, Collector, GUI로 구성되어 있다.

Agent는 원격지 서버에 설치 되고 Collector 는 GUI 와 같이 로컬에 설치 되어 동작 하는 이미지
  • Agent : 모니터링 대상 어플리케이션에서 발생하는 요청을 기반으로 어플리케이션 실행에 관한 데이터를 수집하고 통합한 후, Collector에게 전송하는 역할을 수행한다.

  • Collector : 다양한 Agent로부터 전달받은 데이터를 조합하여 내부 DB에 저장하고 있다.

  • GUI : Collector에게 질의를 던져 사용자에게 수집된 데이터를 다양한 형태로 보여주는 역할을 수행한다. Anyframe Monitoring Tool은 Ajax 기반의 Google Web Tool kit(GWT)를 기반으로 보다 편리하고 효율적인 형태의 개선된 UI를 제공한다.

다음은 Anyframe Monitoring Tool에 의해 제공되는 주요 기능들이다.

[표제목-주요 기능 - #1]
주요 기능설명
Statistics Absolute module, Hierarchical module, 최종 호출에 대한 모니터링 통계를 보여준다.
Performance statistics for various elements, jsp, http, etc. SQL, JDBC, JSP, HTTP 레이어별로 모니터링 통계를 보여준다.
Graphs3차원 그래프, Color labels, Tooltip labels 등의 효과를 통하여 데이터 분석을 돕는다.
[표제목-주요 기능 - #2]
주요 기능설명
Charts 호출된 명령어들에 대해 총 실행 시간, 실행 수, 전체 실행에 대한 백분율 등을 한눈에 알아보기 쉽도록 제공한다.
Better readable SQL's쿼리문을 쉽게 알아볼 수 있도록, 모든 쿼리를 대문자로 변환하고 띄어쓰기를 제공한다.
Hierarchical Views 데이터 분석 결과를 알아보기 쉽도록 하기 위해 데이터, 백분율, 백분율 막대 그래프 표현시 color를 사용하였다.
Multiple Applications여러 어플리케이션의 모니터링 결과를 확인할 수 있도록 구성되어 있다.
ReportingExcel, PDF, HTML, CSV 포맷 형태의 리포트 생성을 지원한다.
Refresh or Reset 지금까지 수집된 데이터를 Reset 시키거나 최신 실행 내용을 반영하기 위한 Refresh 기능을 지원한다.

Anyframe Monitoring Tool을 기반으로 특정 어플리케이션에 대한 모니터링을 수행하기 위해서는 다음과 같은 절차를 거쳐 Anyframe Monitoring Tool을 설치하고 정상 동작 여부를 확인해야 한다. (Anyframe Monitoring Tool은 IE 6.x에서만 테스트되었다.)

anyframe.tools.monitoring-x.x.x.war와 anyframe.tools.monitoring.agent-x.x.x.zip 파일을 다운로드한다. (단, war 파일일 경우 Anyframe Open Source Community를 통해 다운로드하면 파일의 확장자가 zip 형태로 처리될 수 있으므로 확장자를 변경시켜 주어야 할 것이다.) 다운로드 대상 파일은 다음과 같다.

  • anyframe.tools.monitoring-x.x.x.war : Anyframe Monitoring Tool

  • anyframe.tools.monitoring-agent-x.x.x.zip : 모니터링 대상 어플리케이션에 배포되어야 할 라이브러리 및 속성 파일

어플리케이션 서버가 Tomcat인 경우, Anyframe Monitoring Tool을 배포하는 방법에 대해 알아보도록 하자.

  1. [Tomcat Home]\webapps 폴더 하위에 앞서 다운로드한 anyframe.tools.monitoring-x.x.x.war 파일을 옮겨 놓는다.

  2. Tomcat 서버를 동작시키면 동일한 위치에 압축이 자동으로 해제될 것이다.

이외의 어플리케이션 서버에 대해서는 각 어플리케이션 서버 배포 방법에 맞게 다운로드한 WAR 파일을 배포하면 된다.

어플리케이션 서버가 Tomcat인 경우, Anyframe Monitoring Tool이 정상적으로 실행되었는지 확인하는 방법에 대해 알아보도록 하자.

  1. [Tomcat Home]\bin\catalina.bat 파일을 실행하여 Anyframe Monitoring Tool을 시작시킨다.

  2. Tomcat 서버가 정상적으로 시작되었는지 콘솔창을 통해 확인한다.

  3. 브라우저 주소창에 http://localhost:8080/anyframe.tools.monitoring-1.0.0 을 입력하고, Anyframe Monitoring Tool 화면이 뜨는지 확인한다.

  4. Anyframe Monitoring Tool의 좌측 상단 SELECT APPLICATION을 선택하였을 때, 모니터링 대상 어플리케이션을 선택할 수 있는 팝업창이 뜬다. 모니터링 대상 어플리케이션이 실행되지 않은 경우 어플리케이션 목록이 조회되지 않을 것이다.

    Select application Pop up 화면

본 매뉴얼을 통해 제공하는 anyframe.example.monitoring 프로젝트를 다운로드한 후 Example 어플리케이션을 실행시켜 모니터링이 정상적으로 이루어지는지 테스트해 보도록 한다. (* 모니터링 대상 어플리케이션을 위한 속성 정의 및 모니터링 대상 정의를 위해서는 Configuration을 참고하도록 한다.)

모니터링을 위한 Agent 설치

특정 어플리케이션 실행에 대한 모니터링을 수행하기 위해서는 모니터링 대상 어플리케이션이 참조하는 클래스패스에 infrared-agent-all-servlet-x.x.x.jar 파일이 추가되어 있어야 함에 유의해야 한다. infrared-agent-all-servlet-x.x.x.jar 파일은 anyframe.tools.monitoring-agent-x.x.x.zip 내에 포함되어 있으며 Anyframe OpenSource Community를 통해 다운로드할 수 있다. 본 매뉴얼을 통해 제공되는 anyframe.example.monitoring의 pom.xml 내에는 Agent 라이브러리가 참조 관계로 정의되어 있다.

  1. Anyframe Monitoring Tool의 좌측 상단 SELECT APPLICATION을 선택하였을 때, 사용자의 컴퓨터 이름과 어플리케이션 이름이 나타나는 것을 알 수 있다.

  2. 해당되는 어플리케이션을 선택하고 OK 버튼을 클릭하면 모니터링 결과를 확인할 수 있게 된다.

    Select aaplication pop up 에서 어플리케이션 선택 이미지

  • 다운로드

    다음에서 테스트 DB를 포함하고 있는 hsqldb.zip과 example 코드를 포함하고 있는 anyframe.example.monitoring.zip 파일을 다운받은 후, 압축을 해제한다. 그리고 hsqldb 폴더 내의 start.cmd (or start.sh) 파일을 실행시켜 테스트 DB를 시작시켜 놓는다.

    • Maven 기반 실행

      Command 창에서 압축 해제 폴더로 이동한 후 mvn jetty:run이라는 명령어를 실행시킨다. Jetty Server가 정상적으로 시작되었으면 브라우저를 열고 주소창에 http://localhost:8080/anyframe.example.monitoring을 입력하여 실행 결과를 확인한다.

    • Eclipse 기반 실행 - m2eclipse, WTP 활용

      Eclipse에서 압축 해제 프로젝트를 import한 후, 해당 프로젝트에 대해 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 Maven > Enable Dependency Management를 선택하여 컴파일 에러를 해결한다. 그리고 해당 프로젝트에 대해 마우스 오른쪽 버튼을 클릭한 후, 컨텍스트 메뉴에서 Run As > Run on Server (Tomcat 기반)를 클릭한다. Tomcat Server가 정상적으로 시작되었으면 브라우저를 열고 주소창에 http://localhost:8080/anyframe.example.monitoring 입력하여 실행 결과를 확인한다.

    • Eclipse 기반 실행 - WTP 활용

      Eclipse에서 압축 해제 프로젝트를 import한 후, build.xml 파일을 실행하여 참조 라이브러리를 src/main/webapp 폴더의 WEB-INF/lib내로 복사시킨다. 해당 프로젝트를 선택하고 마우스 오른쪽 버튼을 클릭한 후, 컨텍스트 메뉴에서 Run As > Run on Server를 클릭한다. Tomcat Server가 정상적으로 시작되었으면 브라우저를 열고 주소창에 http://localhost:8080/anyframe.example.monitoring을 입력하여 실행 결과를 확인한다. (* build.xml 파일 실행을 위해서는 ${ANT_HOME}/lib 내에 maven-ant-task-2.0.10.jar 파일이 있어야 한다.)

    [표제목-Download List]
    NameDownload
    anyframe.example.monitoring.zipDownload
    hsqldb.zipDownload
    maven-ant-tasks-2.0.10.jarDownload

다음에서는 Anyframe Monitoring Tool을 통해 특정 어플리케이션에 대한 모니터링을 수행하기 위해서 필요한 기본 속성과 모니터링 대상에 대한 정의 방법에 대해 살펴보기로 한다.

또한, 모니터링 대상 어플리케이션을 실행시키기 위한 어플리케이션 서버내에 InfraRED Agent 파일이 설치된 후 메모리를 많이 점유하게 되는 문제가 발생할 수 있는데 이를 대처하기 위한 속성 정의 방법에 대해서도 살펴보도록 하자.

모니터링 대상이 되는 어플리케이션은 Anyframe Monitoring Tool과 통신하기 위한 기본 속성 정의를 필요로 한다. 따라서, 이러한 속성 정의를 포함한 Agent Property File (anyframe.tools.monitoring.agent-x.x.x.zip 내에 포함)을 다운로드 한 후, 다음을 참고하여 해당 프로젝트에 맞게 변경하 모니터링 대상 어플리케이션의 WebRoot/WEB-INF/classes 폴더 내에 복사한다.

[표제목-모니터링 속성 - #1]
PropertyDescriptionDefault Value
enable-monitoring 해당 어플리케이션에 대한 모니터링 여부를 정의한다. false일 경우, 어떠한 데이터도 Anyframe Monitoring Tool GUI에서 보이지 않는다.  
jdbc-monitoring-enable해당 어플리케이션의 JDBC 실행에 대한 모니터링 여부를 정의한다.false
enable-call-tracing Anyframe Monitoring Tool을 통해 실행 순서대로 기록될 것인지 정의한다. Anyframe Monitoring Tool GUI에서는 실행 순서를 트리 구조로써 보여준다. false
prune-threshold Anyframe Monitoring Tool이 표현할 수 있는 한계 시간(milliseconds)을 정의한다. 실행 시간이 지정된 milliseconds보다 적을 경우 표현되지 않는다. 3000
last-invocations-to-trace Anyframe Monitoring Tool의 Last Invocations 페이지에 표현할 Invocation 개수를 정의한다. 0
prepared-statement-monitoring-enablePreparedStatement 표현시 해당 쿼리문의 인자값을 함께 표현할 것인지를 정의한다.false
mbean-server-provider MBean server provider의 클래스명을 정의한다. 일반적으로 Weblogic server일 경우 net.sf.infrared.weblogic.configmgmt. WLSMBeanServerProvider를, JBoss server일 경우 net.sf.infrared.jboss.configmgmt.JBossMBeanServerProvider로 정의할 수 있다. MBean은 MC4J Management Console과 같은 JMX 기반 툴을 사용하여 속성 정보를 셋팅하는데 사용되며 InfraredProperties MBean은 enable-monitoring, jdbc-monitoring-enable, enable-call-tracing, prune-threshold와 같은 속성 정보를 셋팅할 수 있도록 지원한다. none
[표제목-모니터링 속성 - #2]
PropertyDescriptionDefault Value
collection-strategy 수집된 데이터를 표현하기 위한 strategy가 정의된 class명을 정의한다. Anyframe Monitoring Tool은 현재 net.sf.infrared.agent.transport.impl. CentralizedCollectionStrategy만을 추가 지원한다. default로 적용되는 DoNothingCollectionStrategy는, 이름에서 알 수 있듯이 아무것도 수행하지 않는다. net.sf.infrared.agent. transport.impl. DoNothingCollectionStrategy
collection-strategy.ccs.remotehost Anyframe Monitoring Tool이 실행되는 컴퓨터의 ip를 정의한다. 모니터링 대상 어플리케이션으로부터 수집된 데이터는 Socket을 통해 Collertor에게 flush된다. localhost
collection-strategy.ccs.port Anyframe Monitoring Tool의 Collector가 listening할 대상 port를 정의한다. 7777
collection-strategy.ccs.flush-frequency Remotehost에서 모니터링 대상 어플리케이션의 데이터가 Collector에 flush되는 주기를 정의한다. flush되는 주기값은 양호한 성능을 위해서 최적화될 필요가 있다. 그 값이 클수록 저장할 통계값이 커지고, 이에 따라 더 많은 메모리가 필요할 것이다. 반면에 주기값이 낮으면, 빈번한 network traffic을 유발할 수 있게 된다. 30000
collection-strategy.ccs.pool Collector가 flush되기 전에 Thread Pool이 수집된 데이터를 유지할 것인지를 정의한다. true
collection-strategy.ccs.pool. maxThreads Thread pool에서 허용 가능한 thread의 최대 개수를 정의한다. collection-strategy.ccs.pool 속성이 true일 경우에만 적용할 수 있다. 1
collection-strategy.ccs.pool.buffer-length 유지가능한 element의 수를 알려주는 pool buffer의 용량을 정의한다. collection-strategy.ccs.pool 속성이 true일 경우에만 적용할 수 있다. 100

다음은 위에서 언급한 속성을 포함하고 있는 infrared-agent.properties 파일의 내용이다.

# The sample infrared-agent.properties

enable-monitoring true
enable-call-tracing true
jdbc-monitoring-enable true
prune-threshold -1
last-invocations-to-trace 5
prepared-statement-monitoring-enable true

collection-strategy net.sf.infrared.agent.transport.impl.CentralizedCollectionStrategy
collection-strategy.ccs.remotehost localhost
collection-strategy.ccs.port 7777
collection-strategy.ccs.pool false
collection-strategy.ccs.flush-frequency 3000

Anyframe Monitoring Tool을 이용하여 HTTP Request에 대한 모니터링을 수행하기 위해서는 해당 어플리케이션의 web.xml 파일 내에 HTTP Request에 대한 Listener와 Filter를 등록해 주어야 한다. 다음은 web.xml 파일에 대한 일부 내용이다.

중략...
<listener>
    <listener-class>
        net.sf.infrared.agent.setup.InfraREDServletContextListener
	</listener-class>
</listener>
<filter>
    <filter-name>infrared</filter-name>
    <filter-class>
        net.sf.infrared.aspects.servlet.InfraREDServletFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>infrared</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>
중략...

위 설정에 의하면 모든 .do로 끝나는 요청은 infrared라는 이름의 Filter를 통해 필터링됨으로써, Anyframe Monitoring Tool을 통해 모든 HTTP Request를 모니터링 할 수 있게 될 것이다.

Anyframe에서는 비즈니스 레이어를 구성하는 서비스에 대한 호출 정보를 모니터링하기 위해 ApiAspect 클래스를 제공한다. 따라서 모니터링 대상 어플리케이션 실행 시 ApiAspect을 적용시키면 비즈니스 서비스 호출 정보를 모니터링할 수 있게 될 것이. 다음은 ApiAspect에 대한 속성 정보를 포함하고 있는 context-monitoring-api.xml 파일의 내용이다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    
    <bean id="anyframe_api_profiler"
        class="anyframe.common.aop.aspects.ApiAspect">
        <property name="layerName" value="APPLICATION_SERVICE"></property>
    </bean>
    <bean id="anyframe_api_profiler_aop_autowire"
        class="anyframe.common.aop.ExclusiveBeanNameAutoProxyCreator">
        <property name="beanNames" value="*Service"/>
        <property name="exclusiveBeanNames" value="anyframe_api_profiler"/>
        <property name="interceptorNames">
            <list>
                <value>anyframe_api_profiler</value>
            </list>
        </property>
    </bean>
</beans>

위 속성 정의에 의하면, ApiAspect은 anyframe_api_profiler라는 이름의 Bean으로 정의되어 있다. 그리고, anyframe_api_profiler_aop_autowire라는 이름의 Bean에 의해 Bean 이름이 Service로 끝나는 모든 Bean의 실행시마다 anyframe_api_profiler라는 이름의 Bean을 interceptor로 적용하게 될 것이다. ApiAspect은 layerName이라 속성을 가질 수 있는데 이는 ApiApsect을 통해 모니터링된 결과를 표현하기 위한 레이어의 이름을 정의하는데 사용된다. 또한 ApiAspect는 특정 서비스에 대한 proxy를 통해 해당 메소드를 수행하고 있다. Anyframe에서는 인터페이스를 이용하여 특정 서비스의 Proxy를 생성하므로 ApiAspect를 사용할 경우 대상 서비스는 반드시 인터페이스와 구현 클래스로 구성되어 있어야 함에 유의하도록 한다.

Anyframe에서는 특정 쿼리문에 대한 실행 정보를 모니터링하기 위해 JdbcAspect 클래스를 제공한다. JdbcAspect는 수행되는 쿼리문이나 쿼리문 실행 시간을 체크하기 위한 Aspect이다. 따라서 모니터링 대상 어플리케이션 실행 시 JdbcAspect을 적용시키면 쿼리문 실행 영역을 모니터링할 수 있게 된다. 다음은 JdbcAspect에 대한 속성 정보를 포함하고 있는 context-monitoring-jdbc.xml 파일의 내용이다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
    
    <bean id="anyframe_jdbc_profiler" 
        class="anyframe.common.aop.aspects.JdbcAspect">
    </bean>
    <bean id="anyframe_jdbc_profiler_aop_autowire"
        class="anyframe.common.aop.ExclusiveBeanNameAutoProxyCreator">
        <property name="beanNames" value="dataSource"/>
        <property name="exclusiveBeanNames" value="anyframe_jdbc_profiler"/>
        <property name="interceptorNames">
            <list>
                <value>anyframe_jdbc_profiler</value> 
            </list>
        </property>
    </bean>
</beans>

위 속성 정의에 의하면, JdbcAspect은 anyframe_jdbc_profiler라는 이름의 Bean으로 정의되어 있다. 그리고 anyframe_jdbc_profiler_aop_autowire라는 Bean에 의 Bean 이름이 dataSource인 Bean 실행시마다 anyframe_jdbc_profiler라는 이름의 Bean을 interceptor로 적용하게 될 것이다.

Aspect 적용시 유의 사항

Anyframe Monitoring Tool에서는 InfraRED에서 지원하는 모든 기능(AspectJ 기반 Aspect 적용, AspectsWerks 기반 Aspect 적용 등)에 대해서 검증을 수행한 것은 아니므로 위에서 언급한 대로 사용할 것을 권장한다.

최초 Monitoring 서버를 실행시키면 User Home 디렉토리 하위에 .infrared/infrared-db.properties 설정 파일이 생성된다. (예를 들어 Windows의 경우, Anyframe Monitoring Tool을 시작하면 C:\document and settings\사용자명\.infrared 폴더 하위에 이 설정파일이 자동으로 생성된다.) Anyframe Monitoring Tool은 HSQL DB만을 지원하고 있으며 기본 설정을 그대로 사용히면 모니터링 데이터가 대량으로 발생하는 경우 서버에서 memory overflow가 발생할 수 있다. 이를 방지하기 위해 infrared-db.properties를 다음과 같이 변경한 후 서버를 재시작한다.

#HSQL Database Engine
			
hsqldb.script_format=0

#기본적으로는 값을 설정하지 않으나 메모리 문제가 있는 사이트에서는 
#이와 같이 gc 주기를 줄수 있음(단위 ms)
runtime.gc_interval=60000
sql.enforce_strict_size=false
#1kb 하나의 레코드의 평균 크기 2^10 = 1024 bytes 
#(프로젝트 상황에 맞게 설정, default 10 권장)
hsqldb.cache_size_scale=10
 #기본값 권장
readonly=false
#기본값 권장 (JDK가 NIO를 지원지 않으면 false 로 설정)
hsqldb.nio_data_file=true 
#4k rows 메모리에 캐쉬할 레코드 갯수 
#(14의 의미 : 2^14개, 클 수록 성능은 좋아지나, 메모리 많이 점유함)
hsqldb.cache_scale=14
version=1.8.0
#테이블 정보를 메모리에 저장할지 디스크에 저장할지 여부 결정?
#(기본 Memory로 되어 있으나 서버 메모리 Full나므로 Cache로 설정)
hsqldb.default_table_type=cached
#8gb db 정보를 디스크 캐쉬에 저장할 사이즈 
#(8기가 <-- 상황에 맞게 설정)
hsqldb.cache_file_scale=8 
sql.compare_in_locale=false
hsqldb.log_size=200 #hsql 로그 사이즈 (기본값 유지)
modified=yes
hsqldb.cache_version=1.7.0
hsqldb.original_version=1.8.0
hsqldb.compatible_version=1.8.0

Anyframe Monitoring Tool은 크게 모니터링 대상 어플리케이션 선택을 위한 Select Application 창과 모니터링 결과를 다양한 유형으로 보여주는 Panel로 구성되어 있다.

Anyframe Monitoring Tool에서는 Select Application 창을 통해 모니터링 대상 및 방법을 선택하도록 하고 있다. 다음에서는 Select Application 창을 구성하는 영역들에 대해 보다 상세히 알아보도록 하자.

"Select Application" 창은 크게 "Select Application", "Select monitoring period", "Reset period" 영역으로 구분지어져 있으며 "Show labels for graphs"에 대한 선택 기능을 추가로 제공한다.

Anyframe Monitoring Tool과 연계되어 있는 모니터링 대상 어플리케이션 목록을 트리 형태로 표시하고 있다. 사용자는 트리 목록으로부터 대상 어플리케이션을 선택할 수 있다.

Select application pop up 창 관련 이미지

모니터링 데이터 수집 방법을 정의하기 위한 영역으로 "Live Data"와 "Archive Mode" 중 선택 가능하다. Live Data는 실시간 모니터링을 의미하며, Archive Mode는 일정한 시간 간격을 정한 후 그 간격마다 데이터를 수집한 후 모니터링하는 것을 의미한다.

Select application 팝업 에서 달력 팝업창을 통해 기간을 설정 하는 이미지

모니터링을 위해 수집한 데이터를 Reset하기 위한 주기를 분 단위로 정의하기 위한 영역이다.

모니터링 결과를 그래프 형태로 표현할 때 label과 함께 표현할 지 여부를 선택하는 기능이다. 그래프는 각각의 실행 소요 시간과 실행 횟수에 따라 서로 다른 크기와 색깔로 표시되는데, Show labels for graph를 선택했을 경우 다음과 같이 그래프에 label이 추가되어 표현되는 것을 알 수 있다.

원 그래프 모양으로 소요 시간과 실행 횟수에 따라 다른 크기로 표시 되는 화면 이미지

Anyframe Monitoring Tool은 Top 영역, Left 영역, Right 영역으로 구분지어져 있으며 Top 영역에서는 Report, Refresh, Reset 기능을 제공한다. 그리고 Left 영역에서는 다음과 같이 3개의 panel을, Right 영역에서는 panel별 모니터링 결과를 표현하고 있다. 다음에서는 Top 영역과 Left 영역에 대해 보다 상세히 알아보도록 하자.

Anyframe Monitoring Tool을 통해 모니터링 되는 대상 레이어(HTTP, APPLICATION_SERVICE, JDBC, SQL) 별로 구분하여 총 실행 시간과 호출 횟수를 그래프 형태로 표현한다.

표형태로 모니터링 대상 레이어별 총 실행 시간과 호출 횟수를 표시한 이미지

summary tab에서는 총 실행 시간, 호출 횟수, 평균시간, 최소 실행시간, 최대 실행 시간, 최초 실행과 최후 실행 시간, adjusted average를 보여준다. 각각은 다음과 같은 의미를 지닌다.

[표제목-Summary Tab 항목]
항목설명
총 실행 시간한 번의 호출에 대한 총 경과 시간
호출 횟수총 실행 횟수
평균 시간호출을 처리하기 위해 소요된 평균 실행 시간
최소, 최대 실행 시간실행 시간중 가장 적게 걸린 시간과 가장 오래 걸린 시간
최초, 최후 실행 시간여러번의 호출들 중에서 최초 혹은 최후의 실행에 대한 실행 시간
adjusted average최초 실행 시간을 제외한 나머지 실행 시간의 평균

* Anyframe Monitoring Tool에 의해 보여지는 숫자들에 대해 정확한 이해를 얻고자 하는 경우에는 본 페이지 하단의 [참고] Interpreting Layer Number 를 참고하도록 한다.

각 레이어별 실행 정보에 대해서는 추적이 가능하며, trace path는 trace tab을 통해 총 시간, 총 호출 횟수와 함께 보여진다. 다음에서는 trace tab을 통해 표현되는 blue bar에 대해서 알아보기로 하자.

trace tab 을 선택 시 보여 주는 정보 이미지, trace path 별로 총 시간, 총 횟수를 보여 주는 이미지
  • root operation의 bar는 완벽하게 색칠되어져 있으며 가장 큰 길이를 갖는다.

  • 상위 operation에 의해 호출되는 operation의 bar의 전체 길이는 상위 bar의 색칠된 부분의 길이와 같다.

  • 각 operation에 대해 색칠된 부분은 상위 부분의 총 실행 시간 대비 해당 부분의 총 실행 시간에 대한 백분율을 표현한다.

이런 bar들을 통해 어플리케이션의 병목 현상을 모니터링할 수 있다.

다음 그림에서는 Summary tab을 통해 쿼리문 호출 빈도수를 기반으로 상위 5개의 쿼리문을 보여주고 있다. 실행된 쿼리문 전체는 tooltip을 통해 확인할 수 있다.

상위 5개의 쿼리문을 막대 그래프 모양으로 보여 주는 이미지

위 그림에 제시된 표에서 각 항목은 Execute statement와 Prepared Statement로 나뉘어져 데이터를 제시하고 있다. Prepared and Execute statement는 어떤 요청을 처리하기 위해 호출된 JDBC 메소드를 의미한다.

Hierarchical panel에서는 "."을 구분자로 하는 레이어간 호출 관계로 레이어명을 표시하고, 가장 마지막에 표현된 레이어에 대한 통계 자료를 제시한다. (예를 들어, HTTP.APPLICATION_LAYER.JDBC의 경우 HTTP.APPLICATION_LAYER로부터 호출된 JDBC 레이어에 대한 정보를 보여주게 된다.)

Hierarchical Panel 선택 시 이미지

Hierarchical Panel에서도 Absolute Panel과 동일한 유형의 모니터링 결과들을 확인할 수 있다.

Last Invocation panel은 마지막으로 호출된 몇 개의 실행 흐름에 대해 track down하는 방법을 제공한다. 도표는 실행에 소요된 총 시간과 횟수를 보여준다.

Last Invocation Panel 선택 시 이미지

Last Invocation Panel에 보여지는 Sequence 별로 sequence invocation이 딱 한번 카운트 된 경우와 여러번 카운트 된 경우들이 존재할 수 있다. 만약 stack trace에 포함된 다른 operation을 호출하는 operation이라면 한번 이상 카운트 된 경우가 존재할 것이다. 그렇지 않고 operation이 다른 operation을 호출하지 않았다면 stack trace를 포함하지 않고 단 한 번만 카운트될 것이다.

모니터링 결과를 다양한 포맷의 문서로 리포팅하기 위해 사용하는 기능이다. Report 링크를 클릭하면 Report Wizard가 오픈되며 Step별로 선택된 값을 기반으로 다양한 보고서가 생성될 것이다.

  • Step1 : 보고서 포맷 선택.

    보고서 포맷을 선택 하는 화면 이미지
  • Step 2 : 리포팅 대상 panel 선택. (Absolute module, Hierarchical module 중 택일)

    리포팅 대상 panel을 선택 하는 화면 이미지
  • Step 3 : 보고서에 작성할 내용에 대한 상세 정보 선택.

    보고서 상세 정보 선택 화면 이미지
  • Step 4 : 보고서에 작성할 내용 선정. 전체 데이터 중에서 상위 몇 개의 데이터만 선택할지, 또한 수치로 나타낼지 다이어그램으로 나타낼지 (혹은 둘 다) 정의

    출력 디스플레이(수치,다이어그램) 및 데이터 선택 화면 이미지
  • Step 5 : Finish를 클릭하면 생성할 보고서에 대한 선택된 정보를 간략히 요약한 화면이 제시되고, Download 버튼을 누르면 작성된 보고서를 로컬로 다운로드할 수 있다.

    보고서 요약 및 다운로드 가능한 화면 이미지

다음 그림은 보고서 양식을 Excel로 선택했을 경우 작성된 보고서의 예이다.

Excel로 작성된 파일의 이미지

실시간으로 변하는 실행 정보들에 대한 모니터링 결과를 바로 확인할 수 있도록 하기 위해 제공되는 기능이다. Refresh 링크를 클릭하면 어플리케이션의 현재 상황을 다시 스캔함으로써, 실시간의 모니터링 정보로 갱신할 수 있다.

Reset 기능은 지금까지의 수집된 데이터를 모두 지우고, 초기화하기 위해 사용할 수 있는 기능이다. Reset 링크를 클릭하면 현재까지 수집된 모든 데이터들은 지워지게 됨에 유의하도록 한다.

Anyframe Monitoring Tool에 의해 보여지는 숫자들에 대해 알아보도록 하자. 이 툴을 효과적으로 사용하기 위해 정확한 이해를 필요로 하는 의문점이 존재한다.

일반적인 상황에서는 하위 레벨들의 총 실행 시간의 합은 상위 레벨의 총 실행 시간과 동일하다. 하지만 다음 그림에서는 다른 값을 나타내는 것을 알 수 있다.

총 실행 시간과 실행 시간의 합이 틀림을 보여 주는 이미지

위의 그림들에서 하위 레벨의 총 실행시간을 더한 값은 3125(ms)이나 하위 레벨을 모두 포함한 APPLICATION_SERVICE의 총 실행 시간은 2484(ms)임을 알 수 있다.

이러한 경우 multi threading에 대한 이해가 전제되어야 한다.

각 스레드 별로 처리된 시간을 보여 주는 이미지

위 그림에서 보는 바와 같이 레이어 X에서 시작 지점과 끝 지점이 연결되어 있는 메소드를 가정해보자. 세 개의 메소드가 두 개의 분리된 thread에서 동시에 실행되고 있다. Method A 는 70ms, Method B는 50ms 그리고 Method C 가 30ms의 시간동안 실행된다. 하지만 Layer X의 총 실행시간은 80ms가 된다.(70 + 50 + 30 = 150ms 가 아니다.) 이것은 메소드들이 2 개의 Thread에서 동시에 실행되기 때문이다.