서비스 트랜잭션을 직관적으로 모니터링하자 그래서 XView를 만들었다

애플리케이션 모니터링을 처음 고민하기 시작할때가 
아마도 처음 장애해결에 나갔을 때 인것 같다.
DB,H/W,N/W,그리고 나(APP) 그렇게 4명이 시스템의 장애를
해결하기 위해 사이트에 나간적이 있었다.

첫날 사이트에 도착해서 이런저런 회의를 통해서 
문제가 심각하다는 이야기를 듣고 각자 하루 동안 현상을 수집하기로 했다
DB는 SQL툴을 열어 놓고 SQL문을수행하면서 결과를 수집하기 시작했다.
H/W는 수십개의 쉘을 돌리면서 결과를 수집하기 시작했다.
N/W담당자도 쉘과 몇개의 프로그램을 설치하고는 정보를 수집하였다.
그런데 나는(?) 다른 사람들은 운영서버에서 정보를 수집하는데
나는 개발자에게 소스를 받았다. 그리고는 소스를 읽어나갔다.

다음날... 4명은 탁자에 모였다.. 나를 제외한 모두는 
그래프를 들고서 다른 사람에게 현황을 설명하기 시작했다.
DB도 H/W도 N/W도 그런데 나는 그자리에서 나만 이해하는
소스 코드들을 들고 어쩔줄 몰라했다.. 그 많은 소스 중에서
문제가 쉽게 발견되지 않는 것이 당연하기는 했다..

어쨌거나.. 그때 나에게도 뭔가 툴이 필요하다고 느꼈다..
뭔가 빨리 깔아서 잠깐 모니터링 하고 다음날 이야기 할 수 있는
그런툴.. 문제를 빨리 잡을 수 있는 툴 그런것이 필요했다.

결과적으로 그 사이트의 문제는 EJB 프로그램을 잘못해서
메모리가 급격히 증가하고 그래서 발생한 문제 였다.
정말 운이 좋아서.. 우연히 전혀 비과학적으로 3일째 소스를 넘기다가 우연히 발견하여
문제를 해결하였다..
이런경우 우리는 "소 뒷발로 쥐잡았다"고 한다.

그런데 이러한 나의 고민은 이후에도 계속되었다.
몇개의 사이트에 문제 해결을 나가는 동안
나는 로그와 소스에만 의존해야 했다.
하드웨어의 로그는 구글에서 검색하면 대부분 나온다.
그러나 애플리케이션이 남기는 로그 인터넷 어디에도 없다 그사이트에만 있는 로그이다.
그렇게 힘들게 몇개의 시스템 문제해결에 참가한 후에

상용 툴을 설치해야 겠다고 생각하게되었다.
지금도 있는 몇개의 툴을 설치했다. 아니 정확하게는 
설치를 시도했다.. 하지만 일반적으로 나에게 주어진 시간은
2~3일 정도 그시간이 지나면 모든 사람은 내얼굴을 보면서
빨리 문제를 해결할 것을 종용한다.
나는 툴 설치를 포기하고 다시 로그와 소스에 의존하여
문제를 해결하였다.

그리고 나서는 안되겠다. 내가 필요한 것을 내가 만들어야 겠다고 생각했다
막상 툴을 만들려고 하니..
애플리케이션을 모니터링하려면 어떻게 해야할까..
아니 정확히는 무엇을 모니터링 할까 하는 원론적인
질문이 고민스러웠다.
CPU,MEM 이런것은 시스템 모니터링 툴들이 알려준다
SQL성능 이것은 DB가 잘 알려준다.
그러면 나는? 애플리케이션을 모니터링 해야 한다.
그런데 Application Server에 동작하는 프로그램은
모양이 비슷하다 사용자(브라우저) 요청을 받아서 결과를 리턴한다.
그 결과를 만들기 위해 DB도 가고 턱시도도 호출하고...
우리는 이런것을 트랜잭션이라고 한다. 
아마 서비스 트랜잭션이 더 맞을 것이다.

그래 나는 이 트랜잭션을 모니터링 해야 겠다. 그때만 해도
프로파일 툴이 일반화 되지 않았지만 
트랜잭션 프로파일링이 필요하다는 결론에 이르렀다.
그래서 일단 트랜잭션 별로 프로파일 정보를 로그파일에 
남겼다. 로그파일 명에 서비스 명과 응답시간을 넣어서
디렉토리에서 쉽게 찾을 수있도록 하였다 물론 프로파일링 툴을 적용하면
이것을 툴에서 할 것이다.하지만 원리는 같다.

그런데 문제가 있었다. 트랜잭션성능과 구간별 시간은 보이는데 애플리케이션 전체를
알 수 없었다 그트랜잭션 하나의 문제가 전체의 문제라는 확신을 할 수가 없었다.

만약 트랜잭션 전체의 성능을 보면 애플리케이션을 알 수 있을텐데
볼 수 없었다. 나는 트랜잭션 프로파일 하나하나를 리뷰했지만
동일 서비스가 트랜잭션에 따라 다른 응답시간을 보이고
이것들의 원인을 정확히 알 수 없었고 그것이 문제의 원인이라고
주장할 수 없었다.

문제는 트랜잭션의 성능을 한눈에 볼필요가 있었다.
즉 문제 핵심은 그많은 트랜잭션(초당 몇백개)의 성능을
어떻게 볼 수 잇게 하느냐가 문제였다 나는 그중에서 프로파일을
분석해야할 트랜잭션을 선별하거나 트랜잭션 간의 연관도를 알고 싶었다

서비스명이 같은 트랜잭션 끼리 묶어서 평균 응답시간을
라인 그래프로 보기도 하고 리스트박스에 표현도 해보았지만
한눈에 모든 트랜잭션을 관찰한다는 것은 어려웠다.

그러다가 유래카..^^ 트랜잭션의 성능을 점으로 표현하면될 것 같았다.
프로그램을 만들어서 모든 트랜잭션을 점으로 화면에 표현하였다..
세로축은 응답시간 가로축은 종료시간으로한 점 그래프를 만들고
그 중에서 점을 선택하면 그 점에 대한 프로파일 정보를 
확인할 수있도록 하였다.

이렇게해서 제니퍼의 XVIEW가 만들어졌다.
XVIEW는 모든 트랜잭션을 한눈에 개별적으로 확인할 수 있다.
현재 어떠한 툴도 트랜잭션 모니터링을 이렇게 하지는 않는다.

XVIEW에서는 느린 서비스 혹은 같은 시간대에 수행된 트랜잭션들을 
직관적으로 확인하고 그들간의 상관관계를 확인할 수 있다

동일 서비스에 대해 느릴때와 빠를 때의 차이를 상대비교할 수있으며
트랜잭션간의 락이 발생하거나 자원의 부적이 응답시간에 어떻게
영향을 미치는지도 직관적으로 확인할 수 있다.

그뒤로 나는 애플리케이션 성능 바라보는데 한단계 수준 업이 되었다는 것을 느끼게 되었다.


Posted by sjokim
,