 |
비즈니스 중심적인 트랜잭션 모니터링 및 관리, Part 3: E2E 서버 구현
|
 |


박용우 yongwoopark@paran.com
건국대학교 전자계산학과와 동대학원 박사과정을 졸업하고 펜타시스템테크놀러지, XCE 등에서 XML 및 모바일 분야 개발에 전념해 왔다. 신한은행 차세대 프로젝트에서 통합운영관리 거래추적 시스템을 개발했으며 최근 현대해상 차세대 프로젝트에 참여해 ITSM 기반 통합운영관리 시스템을 개발했다. JCO 초대 회장을 역임했고 현재 JCO 고문으로 활동하고 있으며 '이클립스 SWT: 리치 클라이언트 개발을 위한', '프로그래머 그들만의 이야기', 'BREW Mobile Programming', '모바일 자바 프로그래밍' 외 여러 권의 책을 썼다.
난이도 : 중급
2008년 3월 11일
|
|
 |
|
[오픈 디벨로퍼웍스]는 여러분이 직접 필자로 참가하는 코너입니다. 이번 회 역시 지난 회 E2E 에이전트 구현과 같은 방식으로 E2E 서버를 구현하는 방법에 대해 하나씩 살펴보겠습니다.
E2E 서버
E2E 서버는 각 E2E 에이전트가 수집하여 전달하는 E2E 로그 데이터를 취합해 업무별/채널별 성능 분석 데이터 생성, E2E 데이터베이스에 업로드, 연결되어 있는 E2E 클라이언트에 전송하는 등의 작업을 수행한다. 또한, E2E 서버에서는 로그 데이터에 대해 서버의 처리 시간(STIME)과 데이터베이스 처리 시간(DTIME) 등을 추가하여 E2E 로그 시간, E2E 에이전트 처리 시간, E2E 서버 처리 시간, E2E 데이터베이스 처리 시간 등을 추적할 수 있도록 하는 것이 가능하게 한다.
E2E 서버의 작업을 효율적으로 수행하려면 로그 수신자(Log Receiver), 로그 분석기(Log Analyzer), DB 로더(DB Loader), 클라이언트 전송자(Client Sender), 메인 스레드 등으로 나눠 스레드 단위로 구현하는 것이 효율적이며, 각각에 대해 더 자세히 살펴보면 다음과 같다.
- 로그 수신자: 로그 수신자는 E2E 에이전트로부터 TCP/IP 네트워크를 통해 로그 데이터를 수신하는 모듈이다. 또한, 이렇게 수신한 로그 데이터를 DB 로더, 로그 분석기, 클라이언트 전송자 등의 모듈의 큐에 삽입함으로써 각 모듈에 배포하는 작업을 수행한다.
- 로그 분석기: 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터에 대해 업무별, 채널별 초당 처리 건수 및 소요 시간 등과 같은 성능 데이터를 생성해 초당 파일로 저장하는 작업을 수행한다. 이렇게 생성된 초당 성능 데이터 파일은 실시간 모니터링에 쓰인다.
- DB 로더: DB 로더는 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터를 시작/종료, 에러, 정보성 등 각 타입에 따라 주기적으로 파일에 저장하는 작업을 수행한다. 이렇게 저장된 로그 데이터들은 데이터베이스에서 제공하는 DB 로더 도구(오라클의 경우 SQL로더)를 이용해 데이터베이스에 로드된다.
- 클라이언트 전송자: 클라이언트 전송자는 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터를 연결된 E2E 클라이언트에 TCP/IP 네트워크를 통해 전송한다. E2E 클라이언트는 이클립스 SWT를 이용해 개발한 윈도우 프로그램으로서, 서버에서 전달 받은 로그 데이터를 트랜잭션 단위로 묶어 보여준다. 또한, 사용자가 하나의 트랜잭션의 흐름 또는 수행 시간을 직관적으로 구간별로 알아볼 수 있도록, 각 트랜잭션에 해당하는 로그들을 분석해 구간별 수행 성능 분석을 위한 차트뷰 또는 구간별 수행 흐름 분석을 위한 플로우뷰 등을 제공한다.
지금까지 설명한 E2E 서버의 구성도를 살펴보면 다음과 같다.

그림 1. E2E 서버 구성도
지금부터 로그 수신자, 로그 분석기, DB 로더, 클라이언트 전송자, 메인 스레드 등을 어떻게 구현하는지에 대해 자세히 살펴보자.
로그 수신자 구현
먼저, 로그 수신자는 E2E 에이전트에서 TCP/IP 네트워크를 통해 전송한 로그 데이터를 수신하는 네트워크 서버 역할을 수행한다. 또한, 이렇게 수신한 로그 데이터를 DB 로더, 로그 분석기, 클라이언트 전송자 등 E2E 서버의 다른 모듈에 배포하는 작업 역시 로그 수신자의 주요 작업이다. 이러한 로그 수신자의 수행 흐름을 살펴보면 다음과 같다.

그림 2. 로그 수신자의 수행 흐름도
로그 수신자는 주기적으로 E2E 에이전트와 연결된 TCP/IP 네트워크를 통해 전달된 로그 데이터가 있는지 확인하는데 새로운 로그 데이터가 존재하지 않을 경우 스레드는 다시 주어진 시간 동안 sleep한다. 새 로그 데이터가 있으면 네트워크에서 로그 데이터를 한 줄씩 읽어 들인다. E2E 에이전트에서 로그 데이터를 전송할 때, 줄 단위로 전송하므로 각 라인은 하나의 로그 데이터다. 이렇게 읽어 들인 로그 데이터를 DB 로더와 로그 분석기 큐에 추가하고, 접속한 클라이언트에 전달할 수 있도록 클라이언트 전송자 큐에 추가하는 등의 작업을 수행한다.
로그 분석기 구현
다음으로 로그 분석기는 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터에 대해 업무별, 채널별 등과 같은 기준에 따라 초당 처리 건수 및 소요 시간 등 성능 데이터를 생성해 정해진 시간(초) 단위로 파일에 저장하는 작업을 수행한다. 이렇게 생성된 성능 데이터 파일은 실시간 모니터링을 위해 사용된다. 이러한 로그 분석기의 수행 흐름을 살펴보면 다음과 같다.

그림 3. 로그 분석기의 수행 흐름도
로그 분석기는 큐에 로그 데이터가 있는지 확인한 후 로그 데이터가 없을 경우, 주어진 시간만큼 sleep한다. 로그 데이터가 있으면 하나씩 가져와 큐에서 제거한 후 로그 데이터를 분석해 업무별, 채널별 등 분류에 따라 초당 처리 건수 및 소요 시간 등을 계산해 파일에 저장한다. 이렇게 저장된 통계 데이터 파일은 E2E 클라이언트에서 실시간 모니터링을 위해 사용된다.
DB 로더의 구현
DB 로더는 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터를 시작/종료, 에러, 정보성 등 각 타입에 따라 정해진 시간 단위(1초)로 파일에 저장한다. 저장된 파일은 E2E 데이터베이스에서 제공하는 DB 로더를 이용해 데이터베이스에 로드된다. 물론 파일에 저장할 때, 데이터베이스에서 제공하는 로더와 약속한 포맷을 따라야 한다. DB 로더의 수행 흐름을 살펴보면 다음과 같다.

그림 4. DB 로더의 수행 흐름도
DB 로더는 큐에서 로그 데이터를 읽어와 특정 주기로 각 타입에 따라 파일에 저장하는 작업을 수행한다. 저장된 각 파일은 데이터베이스에서 제공하는 로더를 이용해 파일 단위로 E2E 데이터베이스에 로딩한다. 이렇게 파일로 떨구고 데이터베이스의 로더를 이용해 E2E 데이터베이스에 저장하는 이유는 그 속도가 가장 빠르기 때문이다.
클라이언트 전송자 구현
클라이언트 전송자는 로그 수신자로부터 큐를 통해 전달 받은 로그 데이터를 연결된 E2E 클라이언트에 TCP/IP 네트워크를 통해 전송하는 작업을 수행한다. 클라이언트 전송자의 수행 흐름을 살펴보면 다음과 같다.

그림 5. 클라이언트 전송자의 수행 흐름도
클라이언트 전송자는 큐에 로그 데이터가 있는지 확인한 후 로그 데이터가 없을 경우, 주어진 시간만큼 sleep한다. 로그 데이터가 있으면 하나씩 가져와 큐에서 제거한 후, 로그 데이터를 TCP/IP 네트워크를 통해 연결된 E2E 클라이언트에 하나씩 전송한다. E2E 클라이언트는 이클립스 SWT를 이용해 개발한 윈도우 프로그램으로, 서버에서 전달 받은 로그 데이터를 거래(GID) 단위로 화면에 보여준다. 또한, 사용자가 거래 흐름이나 수행 시간을 직관적으로 알아볼 수 있도록, 각 거래 단위의 로그를 분석해 차트뷰나 플로우뷰 등 그래픽 화면을 제공한다.
E2E 서버의 메인 스레드 구현
E2E 서버의 메인 스레드의 수행 흐름을 살펴보면 다음과 같다.

그림 6. 메인 스레드의 수행 흐름도
E2E 서버의 메인 스레드는 명령행 매개변수로 전달 받은 프로퍼티 파일에서 각 프로퍼티 값을 읽어 들여 로그 수신자, DB 로더, 로그 분석기, 클라이언트 전송자 등의 스레드를 생성하고 시작한다. 그리고 스레드는 주기적으로 로그 수신자, DB 로더, 로그 분석기, 클라이언트 전송자 등의 스레드의 상태를 체크하고 프로세스 로그를 생성해 E2E 서버에 전송한다. 또한, 각 모듈에 해당하는 스레드가 정상적으로 동작하는지 헬스체크(Health Check)를 하고, 어떤 스레드가 정지되었을 경우 이 스레드를 다시 구동하는 것 역시 메인 스레드의 중요한 작업 중 하나다. 마지막으로 스레드가 종료될 때는 로그 수신자, DB 로더, 로그 분석기, 클라이언트 전송자 스레드를 정지하는 작업을 수행한다.
마치며…
이번 회에서는 지난 회에서 E2E 에이전트의 구현에 대해 살펴보았듯이, 종단간 구간별 거래 추적 시스템을 구성하는 E2E 서버의 아키텍처와 함께 각 모듈을 어떻게 구현할지에 대해 그 수행 흐름을 살펴보았다. E2E 에이전트 및 E2E 서버 구현에 대한 소개가 종단간 구간별 거래 추적 시스템에 대한 공론화 계기가 되었으면 하는 게 필자의 바람이다. 따라서 필자와 같은 고민을 하고 있는 독자들에게는 필자가 소개한 아키텍처 및 수행 흐름도가 구현을 위한 하나의 참조 모델이 되기를 바란다. 다음 마지막 회에서는 E2E 클라이언트를 통한 비즈니스 뷰를 어떻게 보여주는지와 사후 분석 기능을 통해 다른 성능관리 솔루션과 어떻게 연계할지에 대해 살펴보기로 하자.

|
| 이제 전문가의 글을 단순히 ‘보는 것’에서, 직접 여러분이 developerWorks의 필자가 될 수 있습니다. IBM developerWorks를 통해 공유하고 싶은 지식이 있으신 분들은 원고 기획안을 접수해주세요. 채택되신 분께는 소정의 원고료를 드립니다. |
|
|
|
[지난 Open dW 보기] |
|
 |
|