Anyframe Log Manager

Version 1.6.0

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


I. Overview
1. 개발 배경
2. Support
2.1. 기술 지원
2.2. 유지 보수
3. 개발 Concepts
II. S/W 아키텍쳐 구성도 및 기술 구조
4. 아키텍쳐 구성도
III. Installation and Configuration
5. Log Agent 설치
5.1. Plugin 설치
5.2. Agent Service 설치
5.2.1. Agent Service 구동
5.2.2. Agent Service 종료
6. MongoDB 설치
6.1. 다운로드
6.2. 설치파일 준비 및 배포
6.3. data directory 생성
6.4. 서버 구동 및 확인
7. Log Manager Web 설치
8. Configuration
8.1. web.xml과 Logging Policy File(log4j.xml 등) - Legacy Application
8.2. mongo.properties - Log Manager Web
8.3. logagent.ini - Log Agent Service
9. 최초 접근 시 로그인 방법
IV. 기능 설명
10. 전체 화면 구조
11. 로그인/로그아웃
12. Log Analysis
12.1. Log Analysis - Grid Type View
12.2. Log Analysis - Text Type View
12.3. 조회 결과 Export
12.4. Log Analysis 검색 옵션 정리
13. Log Agent Management
13.1. Log Agent Service 화면
14. Log Repository Management
15. Log Application Management
15.1. Log Application 목록
15.2. Log Application 등록
15.3. Log Collection Setting
15.3.1. 기본 사용법
15.3.2. Log Manager Expression과 Regular Expression
15.3.3. Sample 제공
15.3.4. 필수 data field와 권장 data field
15.3.5. Log Collection Result 확인
15.4. Log Application Logging Policy File(log4j.xml 등) 관리
15.4.1. GUI 기반의 정책관리
15.4.2. Text 기반의 정책관리
16. Account Management
16.1. Account 목록
16.2. Account 등록/수정
V. 참고 사이트 링크

Anyframe Log Manager(이하 Log Manager)는 자바기반의 웹 어플리케이션의 개발 및 운영/유지보수 시에 발생하는 여러 로그 데이타를 효율적으로 관리할 수 있도록 설계된 웹 기반의 도구(Tool)이다.

본 장에서는 Log Manager의 개발 배경 및 주요 특징에 대한 간략한 소개를 제공한다.

최근의 자바 기반 어플리케이션 개발환경은 이클립스와 같은 IDE의 발전으로 로컬개발환경 -> 개발서버 -> 스테이징서버 -> 운영서버의 형태로 각 개발된 프로그램과 소스들이 CI 기반으로 배포/관리되는 것이 일반적이다. 이 과정에서 개발/스테이징/운영 서버에서 특별한 오류나 이슈가 발생하는 경우 형상의 통제와 보안 등등의 이유로 일반 개발자들의 서버 로그 접근을 원칙적으로 차단하는 것이 다반사이다. 따라서 일반 개발자들이 웹 기반의 일정한 관리도구를 통해 로그 데이타에 접근할 수 있는 수단이 필요하게 되었다.

시스템 또는 특정 어플리케이션이 개발되어 운영을 시작하게 되면 어플리케이션마다 로그 정책에 따라 다량의 로그 데이타 들이 발생하고 이에 따라 로그 데이타의 효율적인 관리필요성이 대두되며, 또한 주기 또는 비주기의 유지 보수 활동을 수행함에 있어서 로그의 분석을 간편하게 수행할 수 있는 수단을 고려하게 되었다.

Log Manager에 대한 기술 지원은 Anyframe 오픈소스 커뮤니티 사이트의 포럼 ( http://www.anyframejava.org/forum )을 통해 이루어지며, 단순 질의 응답에서부터 소스 코드에 대한 구체적인 가이드 및 해결책을 제시한다. 특정 프로젝트를 위한 기술 컨설팅 지원이 필요한 경우 Anyframe 오픈소스 커뮤니티 사이트의 연락처( http://www.anyframejava.org/about/contactus )를 통해 요청할 수 있다. 또한, 이슈관리시스템인 JIRA( http://dev.anyframejava.org/jira )를 통해, Bug Fix, Improvements, New Features 에 대한 이슈들을 요청할 수 있다. 자세한 사용방법은 이곳( http://www.anyframejava.org/development/issue )을 참조하도록 한다.

Anyframe 오픈소스 커뮤니티 사이트( http://www.anyframejava.org )를 통해 릴리즈된 최신버전 및 이전 버전에 해당하는 라이브러리, 매뉴얼 등을 제공받을 수 있으며 패치 및 업그레이드되는 파일의 경우에도 오픈소스 커뮤니티 사이트를 통해 제공된다. 오픈소스 커뮤니티 사이트의 첫페이지를 통해서 공지되므로 필요 시 참조하도록 한다.

  • 개발 및 유지보수 단계에서 로컬 개발 환경이 아닌 서버 개발환경(개발/스테이징/운영) 서버의 로그데이타에 대한 접근성을 높이고, 분석을 위한 필터 및 편의기능 제공을 위한 웹 기반의 도구를 제공

  • 원격에서 Legacy Application의 로그 정책을 변경 및 관리할 수 있는 도구를 제공

  • 최근에 이슈가 되고 있는 경량의 NoSQL 데이타베이스 중 하나인 MongoDB를 Log Repository로 활용

이번 장에서는 Log Manager의 소프트웨어 구성과 기술 구조에 대하여 다이어그램을 통하여 설명한다.

Log Manager는 Log Agent Service, Log Repository, Log Manager Web (Console)으로 구성되며, Log Agent Service는 Anyframe Java Plugin과 osgi 기반 서버, Log Repository는 MongoDB, Log Manager Web은 Anyframe Java 기반 웹 어플리케이션으로 각각 구현되어 있다.

Log Manager 는 Log Agent, Log Repository, Log Manager Web의 세 모듈로 구성된다.

  • Log Agent는 로그를 관리할 대상 어플리케이션(Legacy Application)에 같이 설치되어 원하는 로그 정보를 Log Repository로 저장하는 역할을 수행하는 Log Manager Plugin 부분과 독립적으로 구동되어 로그데이타를 수집하고, 로그 정책정보를 관리하는 Agent Service로 나누어진다.

  • Log Repository는 말 그대로 로그데이타와 로그어플리케이션 정보를 저장하는 역할을 수행하며, 오픈소스 NoSQL DB 제품인 MongoDB를 활용하여 구축된다.

  • 마지막으로 Log Manager Web 모듈은 별도의 웹 어플리케이션으로 구성되며, 저장된 로그정보를 조회(Log Analysis)하거나, 로그 어플리케이션을 관리(Log Application Management)하고, 사용자 정보를 관리(Account Management)등을 수행한다.

Appender를 사용하여 직접 Log를 저장하거나 File 형태로 저장된 로그를 가져와서 parsing 하여 저장하는 Log Manager의 구조를 설명한다.
S/W Architecture Diagram

1.5.0 버전부터 Log Agent Service를 제공함에 따라 원격지에 존재하는 다수의 어플리케이션의 로그를 한 곳에서 관리하는 것이 가능하게 되었다.

Log Manager는 Multi-Server 환경에서도 Log Agent Service를 이용하여 Log Application을 관리할 수 있다.
Multi-Server Service Senario

이번 장에서는 Log Manager의 각 구현체에 대한 설치와 설정 방법에 대한 내용을 설명한다.

Log Agent 는 부가 정보 추출을 위해 Legacy Application 에 Anyframe Java plugin 형태로 배포되는 Log Manager Plugin과 로그 데이타 수집 및 로그 정책 정보 반영을 위해 독립적인 서버 형태로 작동하는 Log Agent Service로 구분된다.

Log Manager Plugin은 Legacy Application에 Anyframe Java plugin 형태로 배포된다.

Command 창에서 다음과 같이 명령어를 입력하여 Anyframe Log Manager plugin을 설치한다.

mvn anyframe:install -Dname=logmanager

installed(mvn anyframe:installed) 혹은 jetty:run(mvn clean jetty:run) command를 이용하여 설치 결과를 확인해볼 수 있다.

Configuration을 참고하여 legacy application의 'web.xml'과 Logging Policy File(log4j.xml 등)을 configuration 한다.

Plugin 수동 설치

Legacy Application이 Anyframe IDE를 지원하지 않거나(즉, Anyframe 기반이 아니거나), 사용할 수 없는 경우에는 여기를 참고하여 수동으로 설치해야 한다.

수동으로 설치하는 경우 Anyframe Java Plugin 에서 제공하는 샘플을 별도 제공되지 않음을 유의하기 바란다.

Plugin 상세정보 안내

Log Manager Plugin은 Anyframe Plugin 형태로 제공되는 만큼 관련 매뉴얼이 별도로 제공되고 있다.

Log Manager Plugin의 설치 뿐만 아니라 보다 상세한 정보가 필요한 경우에는 여기를 참고한다.

Log Agent Service는 Log Manager 1.5.0부터 제공되는 서비스로 OSGi Framework를 기반으로 독립적으로 구동되어 로그 데이타 수집 및 로그 정책 정보 관리를 담당한다.

설치 대상경로에 다운로드 받은 anyframe-logmanager-agent-1.6.0.zip 파일의 압축을 해제한 후 "conf/logagent.ini" 파일을 여기를 참고하여 설정한다.

OS 종류에 따라서 "bin/startup-agent.cmd" 또는 "bin/startup-agent.sh" 파일을 실행하여 구동한다.

D:\mongodb\bin\> startup-agent 

콘솔의 로그 정보를 통해 정상 구동 여부를 확인한다.

Agent Service의 구동 전에 MongoDB가 활성화 되어 있어야 하는 점을 주의하여야 한다.

Agent 구동로그를 확인
Agent Service Startup

콘솔 창에서 'shutdown' 명령을 입력하여 종료시킨다. 또는 해당 프로세스를 kill 하여 종료한다.

MongoDB의 설치 단계는 일반적으로 다음과 같다

  • 다운로드

  • 설치파일 준비 및 배포

  • data directory 생성

  • 서버 구동 및 확인

서버 O/S와 버전에 따라 적합한 설치 파일을 다운로드 받는다.

다운로드 경로 - http://www.mongodb.org/downloads

설치할 경로에 준비된 설치파일의 압축을 해제한다.

데이타가 저장될 데이타 디렉토리를 생성한다.

예) Window인 경우

D:\> mkdir D:\mongodb\data

다음 명령어를 통해 MongoDB를 구동시킨다.

D:\> cd D:\mongodb\mongodb-win32-x86_64-2.2.0\bin
D:\mongodb\mongodb-win32-x86_64-2.2.0\bin> mongod --dbpath D:\mongodb\data
Mongo-DB 구동로그를 확인
구동여부 확인

* MongoDB에 대한 설치관련 상세정보는 http://www.mongodb.org/display/DOCS/Quickstart에서 얻을 수 있다.

Log Manager 1.5.0부터 Log Manager Web의 배포 파일에는 Jetty 7.x 웹 서버가 같이 포함되어 제공된다. 따라서 별도의 was나 servlet container 없이 자체적으로 구동하는 것이 가능하다.

Log Manager Web의 설치 절차는 일반적으로 다음과 같다

  • 아래의 경로에서 배포파일을 다운로드 받는다.

    다운로드 경로 : anyframe-logmanager-web-1.6.0-bin.zip

  • 배포파일 압축 해제

    설치할 경로에 배포할 압축파일을 해제한다.

  • startup.cmd 또는 startup.sh 파일을 열어서 포트 정보와 웹 어플리케이션 명을 설정한다.(기본값은 8089, logmanager)

  • 여기를 참고하여 configuration을 수행한다.

  • startup.cmd 또는 startup.sh를 구동하여 서버를 동작시킨다.

    D:\anyframe-logmanager-web-1.6.0> startup

War 파일 수동 설치

Embed된 Jetty가 아닌 별도의 WAS나 Servlet Container를 활용할 경우 배포 파일에서 anyframe-logmanager-web-1.6.0.war파일을 해당 WAS나 Servlet Container로 배포하면 된다.

WAS 별 배포 방법에 대한 설명은 본 문서 범위를 넘어가므로 생략하였다.

설치 경로 주의사항

설치 경로상에 한글 또는 공백 문자가 포함된 경우 포함된 Jetty 엔진이 정상적으로 구동하지 않을 수도 있으니 한글 또는 공백문자가 설치 경로 상에 포함되지 않도록 주의한다.

여기서는 Log Manager의 각 구성요소들의 설정방법에 대하여 안내하고 있다.

Legacy Application의 web.xml과 Logging Policy File(log4j.xml 등)을 설정하는 방법은 Log Manager plugin 매뉴얼에서 제공하고 있으며 내용은 여기를 클릭하여 참조한다.

war 파일 배포 후 /WEB-INF/classes/mongo.properties 파일을 열어서 mongo.host, mongo.port 등의 MongoDB 관련설정 값을 설치환경에 맞도록 설정한다.

mongo.properties에서 굵은 글씨로 표시된 부분이 수정해야할 대상이다.

mongo.host=localhost #MongoDB 주소
mongo.port=27017 #MongoDB 접속 port 정보
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true 
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.slaveOk=true
mongo.database.name=logs #log data가 저장될 collection 명
mongo.app.collection=LogApplication  #log application 정보가 저장될 collection 명
mongo.agent.collection=LogAgent #log agent service 정보가 저장될 collection 명
mongo.appender.collection=LogAppender #log application 내의 appender 정보가 저장될 collection 명
mongo.logcollection.collection=LogCollection #log application 내의 로그 수집 정보가 저장될 collection 명
mongo.logcollectionresult.collection=LogCollectionResult #log application 내의 로그 수집 결과가 저장될 collection 명
mongo.default.collection=Default #로그 수집시 default 로 사용될 log repository collection 명
mongo.account.collection=Account #account 정보가 저장될 collection 명

logagent.ini는 Log Agent Service의 설정 파일이며, Agent 설치경로의 conf 폴더 아래에 위치하고 있다.

#
# Log Level: Set log level for Anyframe Log Manager Server. This affects Anyframe
# Log Manager system log. (eg. [/path/to/logmanager]/meta/log_[yyyymmdd].log)
#
# Each number means a certain log level, so "1" is "error", "2" is "warning",
# "3" is "info", and "4" is "debug".
log.level = 1 # agent service의 로그 레벨, 일반적으로 1로 설정한다.

# "http.port"
http.port = 9870 # agent service의 http 통신 포트 설정, 기본값은 9870이다.

#################################### MongoDB Info. ######################################################
logmanager.web.url=http://localhost:8089/logmanager/remote/ 
   # 관리 서비스를 제공받을 Log Manager Web의 http url link, ip, port, context root 등을 적절하게 변경하여야 한다.

#################################### MongoDB Info. ######################################################
mongo.host=localhost # MongoDB ip
mongo.port=27017 # MongoDB port
mongo.connectionsPerHost=10
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true 
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.database.name=logs
mongo.app.collection=LogApplication
mongo.agent.collection=LogAgent
mongo.appender.collection=LogAppender
mongo.logcollection.collection=LogCollection
mongo.logcollectionresult.collection=LogCollectionResult
mongo.default.collection=Default
mongo.account.collection=Account

#################################### Log App Info. ######################################################
default.polling.time=1000s # 기본 polling time 정보
#s=sec,m=minute,h=hour,d=day
		

파일 설정 후에는 agent server를 재기동 하여야 한다.

Log Manager Web 모듈이 처음 설치된 경우 등록된 사용자가 없으므로 최초 사용자를 등록하여야 로그인하여 시스템 사용이 가능하다.

최초 사용을 위한 최초 사용자 등록 절차는 다음과 같다.

  • 등록된 사용자가 없는 경우 아래와 같은 최초 사용자 등록 화면을 띄우기 위한 버튼이 display 된다.

최초 접속 시 로그인 화면 이미지
최초 접속 시 로그인 화면

  • 버튼을 클릭하면 아래와 같이 최초 사용자 등록을 위한 팝업화면이 표시된다.

  • 최초 사용자 정보를 입력한다. 최초 사용자는 "Administrator" 타입으로 할 것을 권장한다.

최초 접속 시 사용자 정보 입력 화면 이미지
최초 사용자 정보 입력

  • 최초 사용자 정보가 등록되었으므로 등록한 정보에 따라 로그인 한 후 Log Manager 를 사용한다.

사용자 등록 후 최초 로그인 이미지
사용자 등록 후 최초 로그인

Log Manager Web 모듈은 다음과 같은 화면 구조로 이루어져 있다.

Log Manager Web 모듈을 크게 3단구조로 이루어져 있으며, 웹 표준 및 크로스 브라우징을 제공하도록 구현되었다.

  • 상단에는 현재 로그인한 사용자의 정보와 로그아웃을 위한 링크가 간략하게 제공된다.

  • 좌측은 메뉴 영역으로 로그인한 사용자의 Type(Administrator/Developer)에 따라 표시되는 메뉴의 수가 달라지도록 되어있다.

  • 우측이 주요 업무 화면영역으로 로그 조회나, 관리 등의 업무를 수행하는 영역이다.

로그인 후 첫 화면 이미지
Main Page

여기서는 로그인/로그아웃과 관련된 화면 및 기능을 설명한다.

  • Log Manager Web 모듈을 브라우져를 사용하여 접속할 경우 로그인 페이지가 표시된다.

  • 등록된 사용자가 없는 경우에는 최초 사용자를 등록할 수 있는 기능을 포함하고 있다. 이와 관련하여 상세한 내용은 여기를 참조한다.

  • 아이디&패스워드를 입력한 후 엔터키를 입력하거나 우측의 Login 버튼을 클릭하면 로그인 할 수 있다.

  • 정상적으로 로그인되었다면 로그를 조회할 수 있는 화면이 최초로 제공된다.

  • 로그 조회와 관련한 상세 기능은 다음 chapter에서 설명하고 있다.

여기서는 로그 조회 기능을 상세히 설명한다.

로그 조회 기능은 Grid Type ViewText Type View의 두 가지 형태의 view를 선택하여 사용할 수 있으며, 업무화면 영역 상단의 Tab을 선택하여 각 화면을 전환할 수 있다.

Grid Type View와 Text Type View는 기본적으로 기능이 거의 같으나, Grid Type View에는 Paging 기능과 상세 로그 조회기능이 제공되고, Text Type View에서는 log tailing 기능이 추가로 제공되는 등의 미세한 차이가 있다.

Tab을 이용하여 두 화면의 전환 시에는 기존에 설정한 검색 조건이 동일하게 유지된다.

다음은 Grid Type View 로그 조회 화면의 상세 설명이다.

  • 검색 조건은 기본적으로 5가지 항목이 제공되고 있으나, 검색화면 상단의 "Advanced Options" 체크 박스를 선택함으로써 보다 자세한 상세검색을 수행 할 수 있다.

  • "Advanced Options" 체크 박스 옆의 "Matched Log Only" 체크 박스를 선택하면 App Name과 Appender와 Duration 에 부합되는 내용들 중 나머지 검색조건에 해당하는 내용들을 highlight 처리하여 보여준다. 특정 키워드가 아닌 특정 영역을 검색/조회하고자 하는 경우 유용하게 사용될 수 있다.

  • App Name은 Legacy Application을 나타내며, Repository는 Legacy Application의 로그 데이타가 저장되어 있는 Log Repository를 의미한다.(좀 더 좁은 의미로는 MongoDB의 Collection을 의미함)

  • Duration은 로그 데이타의 검색 기간을 설정할 수 있으며, "Advanced Options"을 선택하면 달력 기반의 검색 UI를 사용할 수도 있다.

  • Message Text는 로그 데이타의 특정 내용을 패턴 검색 할 수 있는 기능이며, "blank"를 통하여 복수의 키워드를 검색 조건으로 활용할 수 있다.

로그 조회화면 (Grid Type) 이미지
Log Data List(Grid Type View)
  • Grid Type View 화면의 경우 pagination 기능이 기본적으로 제공되며, 한 화면에 표시되는 데이타의 수는 10개이다.

  • Grid Type View 목록의 경우에는 Log Level, Time Stamp, Message 만이 표시되며, 상세한 로그데이타가 필요한 경우 해당 로그를 클릭하면 아래 그림과 같은 팝업 형태로 로그 상세 정보를 제공한다.

다음은 Text Type View 로그 조회 화면의 상세 설명이다.

  • Text Type View는 기본적으로 Grid Type View와 그 기능이 거의 동일하지만, pagination 없이 telnet console 에서 tailing 하듯이 모든 로그정보를 순차적으로 표시한다.

  • 또한 Clear 버튼을 통하여 기존에 표시된 로그가 많을 경우 초기화 할 수 있으며, 한 화면에 표시할 최대 row 수를 Line Limit를 통하여 지정할 수 있다.

  • Export는 Text와 Excel 형태를 선택하여 export 가능하며, Excel의 경우에는 POI 오픈소스를 참조하여 구현되었다(Grid Type 동일).

  • Text Type View화면에서는 특별히 Log Tailing 기능이 제공되는데 이는 Duration을 제외한 검색 조건에 해당되는 로그데이타를 실시간으로 검색하여 화면에 표시하여 주는 기능이다(다만 이 기능은 다수의 개발자가 무분별하게 사용할 경우 성능저하 및 서버부하를 유발 할 수 있으므로 사용에 주의하여야 한다; Ajax polling 참조).

로그 조회화면 (Test Type) 이미지
Log Data List(Text Type View)

최대 검색 건수 관련 유의사항

Text Type View 화면은 한 번에 5000건 이상의 데이타가 검색된 경우 경고메시지와 함께 데이타를 출력하지 않는다. 이러한 경우에는 검색조건을 보다 상세히 하여 검색 범위를 좁힐 것을 권고한다.

Advanced Search Option 관련 유의사항

"Advanced Options"의 User ID와 Client IP는 패턴매칭이 아니여서 정확한 User ID와 IP를 넣어야 하지만, Class Name과 Method Name은 역시 패턴 검색이 가능하므로 일부만 입력하여 검색이 가능하다.

Log Analysis 화면에서는 검색된 조회 결과를 'Text'와 'Excel' 형식으로 Export 할 수 있다.

로그 목록 상단 우측의 'Export' 링크를 클릭하여 'Text'와 'Excel' 형식 중 선택하여 export 를 수행한다.

Export 양식 선택 화면 이미지
Export Form Select
Text 형태의 Export Data 샘플 이미지
Text Format Example
Excel 형태의 Export Data 샘플 이미지
Excel Format Example
[표제목-Log Analysis 검색 옵션]
검색 옵션검색 조건설명비고
기본 검색App NameLog Application Name으로 검색을 위한 가장 상위 조건 
 Repository로그의 실제 저장소, MongoDB의 Collection(=Table)에 해당함 
 Duration로그의 기간에 따른 검색 조건Advanced Option 체크 시 달력 UI 사용가능하며, 달력 설정이 더 우선한 검색 조건으로 반영된다.
 Log LevelLog의 레벨과 검색 방향을 설정할 수 있다. 
 Message TextLog Data 내의 특정 키워드를 통하여 검색이 가능blank를 구분자로 하여 여러 개의 키워드를 사용하여 복합 검색이 가능
고급 검색Client IP로그를 유발한 사용자의 client ip검색 시 전체 IP 주소가 일치하여야 한다.
 User ID로그를 유발한 사용자의 user iduser id 값이 없을 경우 'N/A'로 저장
 Class Name로그가 발생한 class에 대한 full package name 정보패턴 검색이 가능
 Method Name로그가 발생한 class의 method name패턴 검색이 가능
Advanced Search Options 이미지
Advanced Search Options

Anyframe Log Manager는 1.5.0 버전 부터 별도의 Log Agent 를 통하여 로그 수집 및 로그 정책(log4j.xml 등) 관리를 수행하도록 제공하고 있다.

Log Agent Service를 사용함으로서 다수의 물리적으로 분리되어 있는 시스템 환경에서도 로그 정책을 수집하거나 관리하는 것이 가능해지게 되었다.

Log Agent Service는 오픈 소스 기반의 OSGi 프레임 워크인 Apache Felix 를 활용하여 개발되었으며, Anyframe 커뮤니티 사이트를 통해 다운로드/배포 받을 수 있다.

Log Agent 배포 및 설치에 대한 내용은 여기 를 참조한다.

* 이전 버전에서의 Anyframe Plug-in 기반의 Log Agent는 Log Manager Plug-in 으로 구분하여 설명한다.

'Log Agent Management'는 다수의 Log Agent Service의 상태를 모니터하고 관리할 수 있는 기능을 제공하고 있으며, 주요 기능은 다음과 같다.

  • Log Agent Service의 현재 상태 모니터링/Refresh

  • Log Agent Service 재시작/변경사항 반영

  • Log Agent Service 등록정보 삭제

Log Agent 관리 화면 이미지
Log Application List
[표제목-Log Agent 관리 정보]
컬럼 명칭설명
Agent ID 해당 agent의 ip 와 포트정보를 조합하여 표시되는 unique 한 agent 식별 정보
Status 가장 마지막으로 보고된 Agent의 상태정보를 표시, 'Refresh' 를 통하여 agent 상태정보를 업데이트 할 수 있다.
Last Update 최근에 구동되었거나 shutdown 된 시간 정보를 표시한다.
Actions > Restart Agent 가 'Active' 상태인 경우에 표시되며, 변경된 Agent 또는 Log Application의 관리 정보를 Agent 에 반영할 수 있다.
Actions > Delete 해당 Agent 정보를 삭제한다. 단, 삭제하더라도 현재 기동중인 Agent의 기능에 영향을 주지는 않으며, Agent의 재기동 시에는 자동으로 재등록된다.

Agent Service 등록

Log Agent Service는 최초 구동 시 스스로의 정보를 지정된 MongoDB Repository(:LogAgent)에 저장하므로 본 화면에서는 별도의 Agent 등록기능은 존재하지 않는다.

'Refresh' 기능

'Refresh' 기능은 단순히 화면을 Refresh 하는 것이 아니라 페이지 로딩 이후 Agent Service의 상태 변경이 있었는지를 확인하여 업데이트 하는 기능이다.

Log Agent 재시작 시 화면 이미지
Log Agent Restart Complete

'Restart' 기능

'Restart' 기능은 agent service의 내부 태스크 엔진을 재구동하여 설정 관련 변경사항을 reload 할 수 있게 하는 기능으로. log applictaion의 정보가 변경된 경우 restart를 해주어야만 agent에 반영할 수 있다.

여기서는 로그 저장소 관리 기능을 상세히 설명한다.

Log Manager 1.6.0 버전 부터는 이전 버전과는 다르게 로그 데이타가 저장될 저장소를 별도로 관리하고 저장소에 부여된 권한 정책에 따라 사용자들이 조회할 수 있는 로그 데이타의 범위가 한정된다.

Log Repository 관리 화면 이미지
Log Repository Management
  • Repository 등록 - 현재는 MongoDB 만 지원하고 있으며, Repository Name은 알파벳과 '0' 이상의 숫자 그리고 '_'만 입력이 허용된다. 'Save' 버튼을 클릭하면 Repository 정보가 생성됨과 동시에 해당 Repository가 존재하지 않을 경우 해당 Repository를 생성한다.

  • Repository 삭제 - 목록 맨 우측의 삭제버튼을 통해 수행가능하며, Repository에 대한 Meta 정보만 삭제할 뿐 실제 Repository를 삭제하진 않는다.

Monitor Level

1.6.0 부터는 Log 조회에 대한 권한을 Repository의 속성으로 부여하고 있다. 따라서 여기서 'Admin Only'로 셋팅하는 경우에는 해당 사용자 권한이 Administrator인 사용자만 로그데이타를 조회할 수 있게 된다.

"Log Application" 이라함은 로그를 관리/수집할 대상 웹 어플리케이션을 의미한다.

Log Manager 1.5.0 버전부터 Log Application 은 별도의 Log Agent Service를 기반으로 관리되고 이에 따라 좀 더 강력한 Logging Policy 관리 기능을 제공한다. 이는 '로그 정책 관리'라는 항목으로 별도 설명한다.

Log Manager 1.5.1 버전부터는 최근에 주목받고 있는 Logging Framework 중 하나인 Logback 에 대한 지원이 추가되었다. 따라서 로그 어플리케이션 등록 시에 Logging Framework 를 선택할 수 있게 되었으며, Logback을 위한 별도의 Log Appender 또한 제공하고 있다.

로그 어플리케이션의 주요 기능은 다음과 같다.

  • 로그 어플리케이션의 등록/수정/삭제

  • 로그 어플리케이션의 로그수집 정책 설정

  • 로그 어플리케이션 Status 관리(Active/Inactive/Failed)

  • 로그 어플리케이션의 로그 정책 변경

다음은 로그 어플리케이션의 목록화면이다.

로그 어플리케이션의 목록화면에서는 다음과 같은 기능을 제공한다.

  • 로그 어플리케이션의 등록 화면 호출

  • 로그 어플리케이션의 상세조회 및 수정화면 호출

  • 로그 어플리케이션 Status 관리 : Active to Inactive, Inactive to Active

  • 로그 어플리케이션의 로그수집 정책 화면 호출

  • 로그 정책 관리 화면 호출

  • 로그 어플리케이션의 삭제

Log Application 관리 화면 이미지
Log Application List

Log Application Status

로그 어플리케이션의 status는 'Log Analysis'화면에서의 로그 데이타 조회시 조회가능여부를 결정할 때 사용되는 것으로 Active 상태이면 조회가능하다는 의미로 보면 된다.

다음은 로그 어플리케이션의 등록화면이다.

등록화면은 목록 우측 하단의 'Add' 버튼을 클릭하면 표시된다.

다음은 로그 어플리케이션의 등록 방법에 대한 설명이다.

  • 로그 어플리케이션의 아이디 입력(웹 어플리케이션의 Context Name과 동일해야 함)

  • 담당 Agent를 선택 후 로그 어플리케이션의 Logging Policy File(log4j.xml 등) 경로 입력(접근 가능한 UNC 경로만 입력가능, 상대경로 불가)

  • Log4j와 Logback 중에서 적절한 Logging Framework을 선택

  • Agent 를 통해 해당 어플리케이션의 Logging Policy File(log4j.xml 등) 정보를 분석하여 그림과 같이 관리 가능한 Appender 목록이 표시된다.

  • 'Save' 버튼을 클릭하여 Log Application을 등록한다.

Log Application 등록 화면 샘플 이미지
Log Application Regist Form

Log Application 수정

수정 및 상세 조회의 경우 어플리케이션 아이디 변경만 불가능하고 나머지 기능은 동일하다

또한 해당 어플리케이션의 Agent가 Offline(=Inactive) 상태인 경우 수정은 불가능하며 조회만 가능하다. 그리고 화면상에 해당 Agent가 'Offline' 임을 표시해 준다.

Log Manager 1.6.0 부터는 Log Data의 수집(=Log Collection)에 관한 설정을 별도의 화면에서 지정하도록 변경되었다.

한 개의 Log Application 내에서 다 수의 Log Collection을 설정하고 데이타를 수집하도록 할 수 있다.

Log Collection 을 정의하기 위한 화면은 상단의 기 등록된 Log Collection을 표시하는 영역과 하단의 Log Collection을 정의하거나 수정할 수 있는 영역으로 구분되어 진다.

신규로 등록할 경우에는 'New'를 선택하여 입력화면을 초기화 한 후 설정한다. 기존의 정책을 수정하고자 할 경우에는 상단 목록에서 해당 항목을 클릭하면 하단 편집 영역에서 수정이 가능하다.

Log Application 로그 데이터 수집 설정 화면 이미지
Set Log Data Collection Form

다음은 신규 등록 및 수정 시 입력해야 하는 항목에 대한 상세설명이다.

  • Path of Log - 로그 데이타가 저장되는 경로명

  • Log File Name - 저장경로 하위에 실제로 저장되는 로그 파일명 또는 로그 파일명의 정규식 패턴(로그 파일이 여러 개인경우) ex) commmon.+?[.log|.log.\d{2}]

  • Collection Term - 로그 데이타 수집 주기(초 단위 수집은 권장하지 않습니다)

  • Log Data Format - 수집할 대상 로그 데이타 파일의 data format, 정규식 또는 log manager expression 사용가능

  • regular exp. - Log Data Format에 정규식을 사용하는 경우 체크

  • Log Data Sample - 대상 로그 데이타 파일의 실제 샘플(1 row), Validate 기능을 통해 Log Data Format을 검증하기 위한 용도

  • Validate - Log Data Format와 Log Data Sample의 입력값을 검증, 검증이 성공하면 하단 Columns Info.에 파싱된 결과값이 표시

  • Columns Info. - 검증되어 파싱된 결과 값이 표시되는 영역, 파싱된 데이타가 Repository에 어떻게 저장될 지를 결정, level, timestamp, message는 반드시 포함해야 함

  • Log Repository - 실제 파싱된 로그데이타가 저장될 repository name

  • Active - 체크상태가 아니면 Log Agent가 수집(Log Collection)을 수행하지 않음

Log Collection을 등록한 후에는 반드시 Log Agent Management에서 'Restart'를 해야만 변경된 Log Collection이 반영된다.

Log Manager에서 제공하는 Log Collection은 기본적으로 정규식(Regular Expression)을 기반으로 구현되어 있다.

하지만, 정규식은 그 표현법이 복잡한 관계로 쉽게 사용하기 어렵다는 단점이 존재한다. 따라서 Log Manager는 Log Manager Expression이라고 해서 별도의 Log Data Format을 정의할 수 있는 표현법을 제공하고 있다.

'$' + 컬럼명(알파벳만 가능) + {날짜 형식(timestamp나 date 형식인경우)} 형태로 지정하게 되면 내부적으로 이를 적당한 형태의 정규식으로 변환하여 실제 parsing 작업을 수행하게 된다.

Log Manager Expression으로 작업이 불가능하거나 보다 세밀한 파싱작업이 필요한 경우에는 regular exp. 옵션을 체크하여 정규식을 직접 입력하는 것도 가능하다. 단, 이 경우에는 컬럼명이 지정되지 않으므로 Columns Info. 항목에서 일일히 지정해 주어야 한다.

Log Manager는 사용 상의 편의를 위해 Log Manager Expression과 Regular Expression, 각 2개 씩의 사용예를 Sample로 제공하고 있다.

각각의 샘플은 Log Data Sample 하단의 'Sample 1', 'Sample 2' 버튼을 클릭하면 확인 할 수 있다.

로그 데이타가 수집되어 조회하기 위해서는 level, timestamp, message의 세 가지 컬럼(=date field)가 반드시 정의되어야만 한다.

'level'은 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'FATAL'의 상태값을 가지고 있는 string 타입의 컬럼

'timestamp'는 로깅된 시간정보를 포함하는 파싱가능한 형태의 시간정보를 포함하고 있는 data 타입의 컬럼

마지막으로 'message'는 logging data의 body에 해당하는 string 타입의 데이타 컬럼이다.

그 외에도 다음의 컬럼을 사용하면 해당 컬럼을 Log Analysis 화면에서 검색조건으로 하여 검색이 가능하므로 적극 활용할 것을 권장한다.

  • clientIp - 로깅 이벤트를 발생시킨 Client의 IP Address

  • userId - 로깅 이벤트를 발생시킨 User의 ID

  • className - 로깅 이벤트가 발생한 Java Class Name

  • methodName - 로깅 이벤트가 발생한 Java Class의 Method Name

검색 조건의 자세한 사용법은 Log Analysis의 Advanced Search Options 항목을 참조하기 바란다.

등록된 Log Collection 목록 중 status 를 클릭하면 해당 Collection 아래로 현재까지 수행된 Log Collection 내역을 확인 할 수 있다.(최근 3건까지)

수행 내역 중 waring이나, error이 1건 이상인 경우 클릭하여 상세내용을 확인 할 수 있다.

로그 수집 현황 조회 이미지
Log Collection Result

Last Time Stamp

'Last Time Stamp'는 Log Agent Service가 마지막으로 수집한 로그 데이타의 time stamp 정보이다.

모든 Log Collection 작업은 Last Time Stamp를 통해 수행된다.

수집 대상 로그 파일 중 최근 변경일자가 last time stamp 이후인 파일 들을 대상으로 로그를 파싱한 후 last time stamp이후에 생성된 데이타만 식별하여 Repository에 저장하게 된다.

Log Manager 1.5.0 부터는 Log Application의 등록/수정과 해당 어플리케이션의 로그 정책관리 기능이 분리되었다.

어플리케이션의 로그 정책을 관리하기 위해서 'Logging Policy File' 아이콘을 클릭한다.

Text Editor 기반의 로그 정책 관리를 수행할 지 GUI 기반의 로그 정책관리를 수행할지 선택할 수 있다. 단, 이 때 해당 어플리케이션의 Log Agent가 Active(=Online) 상태이어야 한다.

로그 정책 편집 방법 선택 화면 이미지(GUI or Text)
Log Policy Edit

GUI 기반의 로그정책관리 화면은 log4j framework의 명세를 기반으로 구현되어 있으며, 사용빈도가 낮은 일부 명세에 대한 지원은 제공하지 않을 수 있으므로 이러한 경우에는 text 기반 UI를 사용하여 로그 정책을 관리할 수 있다.

화면은 섹션별로 아코디언 형식의 UI를 제공하고 있으며, 각각 Root Logger, Appender, Logger(s) 등으로 각 섹션을 구분하여 표시한다.

각각의 섹션은 기본적으로 섹션 내 하단 버튼을 이용하여 하위 구성요소를 추가하거나 섹션 자체를 삭제할 수 있으며, 각 하위 구성요소들은 우측의 아이콘들을 통해 자신들을 수정/삭제할 수 있다.

Root Logger는 삭제가 불가능하며 로그 레벨을 변경하거나, appender-ref를 추가/변경/삭제할 수 있다.

appender-ref는 현재 화면 상에 등록된 appender를 기준으로 select box 형태로 표시되며, 이미 참조된 appender는 선택이 불가능하도록 되어있다.

GUI 편집기의 Root Logger edit 화면 이미지
Root Logger Info. Section

Appender는 하단의 'Add Appender' 버튼을 클릭하여 추가할 수 있다.

등록된 Appender는 자신의 삭제 및 Class 요소의 수정, Param 요소의 추가/수정/삭제가 가능하여, Appender의 Layout에 대해서 다시 Class 요소를 수정하고 Param 요소를 추가/수정/삭제할 수 있다.

GUI 편집기의 Appender edit 화면 이미지
Appender Info. Section

  • ConsoleAppender : 가장 기본적으로 제공되는 Console 화면에 로그를 출력하는 Appender, Root Logger의 Appeneder로 많이 사용된다.

    GUI 편집기의 Dailly Rolling File Appender edit 화면 이미지
    Console Appender

  • DaillyRollingFileAppender : 정해진 DatePattern에 따라 log file을 rolling 하는 appender, file로 로그를 남기는 file appender이므로 Log Manager Patternlayout을 사용가능함.

    GUI 편집기의 Root Logger edit 화면 이미지
    Dailly Rolling File Appender

  • RollingFileAppender : 정해진 file size에 따라 log file을 rolling 하는 appender, file appender이므로 역시 Log Manager Patternlayout을 사용가능함.

    GUI 편집기의 Rolling File Appender edit 화면 이미지
    Rolling File Appender

  • MongoDBAppender : Anyframe 에서 제공하는 appender로서 Anyframe Log Manager Plugin을 설치하면 사용가능하다. MongoDB에 직접 로그데이타를 저장하므로 db정로를 설정하여야 하며, conversion pattern은 MongoDB에서 사용하는 BSON(Binary JSON) 형식으로 작성하여야 한다.

    GUI 편집기의 Mongo DB Appender edit 화면 이미지
    Mongo DB Appender

Logger는 하단의 'Add Logger' 버튼을 클릭하여 추가할 수 있다

등록된 Logger는 자신의 삭제 및 Additivity, Level 의 수정과 Appender-Ref의 추가/수정/삭제가 가능하다.

단, Logger의 등록 시에는 Appender-Ref의 설정이 불가능하며, 등록 후 해당 Logger의 수정을 통하여 작업이 가능함을 주의하기 바란다.

GUI 편집기의 Logger Info Section edit 화면 이미지
Logger Info Section

GUI 편집기의 Logger Regist Form edit 화면 이미지
Logger Regist Form

Logback에 대한 GUI 에디터 미지원 관련

Logback은 Logging Policy File(logback.xml) 자체에 Programmable한 특징을 가지고 있어서 가변적이기 때문에 GUI 형식의 Editor를 제공하지 않는다.

따라서 Editor를 선택하는 popup이 뜨지 않고 바로 text editor로 연결되어 진다.

text 편집기의 logback 정책 edit 화면 이미지
Logger Regist Form

text 편집기의 logback 정책 edit 화면 이미지
Text 기반의 정책관리

사용자가 Logging Framework 및 Logging Policy File(log4j.xml 등)에 대하여 기본적인 지식을 가지고 있으며, 원격지의 어플리케이션에 대하여 GUI 기반 정책관리에서 할 수 없는 보다 상세한 작업을 수행하려고 할 경우 Text 기반의 로그정책관리를 수행할 수 있다.

로그정책을 직접 수정하고 'Save' 버튼을 클릭하면 Log Agent Service에 의하여 수정한 내용이 그대로 저장된다.

만약 해당 어플리케이션이 실시간으로 로그 정책을 변경가능하다면, 수정한 내용을 저장한 즉시 반영될 것이다. 그렇지 않다면, 어플리케이션 재시작 등의 방법을 통하여 변경된 로그정책을 반영할 수 있다.

1.5.1 부터는 기존의 text area 대신에 오픈소스인 ACE Editor를 적용하여 로깅 정책을 용이하게 편집할 수 있도록 하고 있다. 다만, ACE Editor가 Internet Explorer(IE)를 지원하지 않는 관계로 IE에서는 종전처러 ㅁtext area로 표시하고 있다.

Log Agent 상태에 따른 어플리케이션 관리기능의 제한

Log Application 을 등록/수정하기 위해서는 해당 어플리케이션을 관리해줄 Log Agent Service가 Online(=Active) 상태여야 한다.

따라서 Log Agent Service가 Online 상태가 아닌 경우에는 로그정책관리 등의 Application 관리기능의 상당부분이 제한된다.

Log Agent 상태에 따른 어플리케이션 관리기능의 제한
Log Agent 상태에 따른 어플리케이션 관리기능의 제한

로그 정책 변경 시 실시간 반영

Anyframe Log Manager Plugin을 설치하게 되면 해당 로그에 대한 정책설정을 주기적으로 watch 하도록 Application 설정이 변경된다.

또한 Log Manager Web 모듈에서 로그 정책을 수정하게 되면 실제로 해당 로그 어플리케이션의 Logging Policy File이 변경되며, 결과적으로 변경된 로그 정책이 실시간으로 반영되게 된다.

Text UI의 활용

GUI 편집기는 다소 어려울 수 있는 log4j 관련 설정을 템플릿 기반으로 쉽게 설정하고 변경할 수 있도록 하고 있다.

다만, log4j의 모든 기능을 다 제공하고 있지는 않기에 보다 상세한 설정을 위해서는 GUI 편집기로 기본적인 설정을 하고 text UI를 사용해서 상세설정을 보강하는 방법을 권장한다.

어플리케이션 설정 변경 후 Log Agent Service 반영

Log Application의 설정을 변경한 후에는 Log Agent Service를 재시작 하거나 Log Agent Service Management 화면에서 해당 Agent Service를 'Restart' 해 주어야만 변경된 정보가 반영된다.

Account Management에서는 로그 조회 및 로그 정책을 관리할 수 있는 사용자 계정을 생성/관리한다.

본 기능은 목록 화면과 등록/수정 화면으로 구성되어 있다.

Account 목록화면에서는 다음과 같은 기능을 제공한다.

  • Account 등록 화면 호출

  • Account 상세조회 및 수정화면 호출

  • 등록된 Account의 검색 기능 제공

Account 등록/수정화면에서는 다음과 같은 기능을 제공한다.

  • Account 정보 입력

  • Account Type 설정 - Administrator/Developer

  • Account 삭제

Account Management 화면 이미지
Account Management Regist/Update

Account Type

Log Manager에서는 Account Type에 따라 로그에 대한 조회권한 및 로그 정책 및 사용자 관리 등의 기능에 대한 권한을 제한하고 있다.

  • Administrator - 해당 시스템의 운영자 또는 개발 책임자에게 부여되는 타입으로 Log Manager의 모든 기능을 사용가능

  • Developer - 일반 개발자 또는 단위 시스템 운영담당자에게 부여되는 타입으로 Log Analysis 기능만 사용가능하며, Administrator가 볼 수 있도록 허락한 Log 데이타에만 접근이 가능하다.