본문 바로가기
프로그래밍/Java-토이프로젝트

서버 상태 확인 시각화 툴(vmstat,sar와 같은 명령어의 결과 차트화)-1【전체구조와 설계】

by 코이킹 2021. 7. 12.
반응형

1. 문제 인식

요즘에는 서버의 상태를 모니터링하는 툴이 잘되어있어서 한눈에 실시간으로 버서의 부하를 확인하는 것도 가능합니다. 
하지만 때때로 서버에 직접 접속해서 상태확인 커맨드를 통해 서버의 상태를 확인해야하는 경우도 있습니다. 
서버 모니터링 툴을 도입하지 못하는 소규모의 기업 또한 서버의 상태확인 커맨드를 통해서 서버의 상태를 확인합니다. 

이제부터 이야기할 사례는 회사에서 맡은 업무중 특정 API를 신규서버에 마이그레이션할때 일어난 일입니다.
API를 배포한 후 기능테스트에서 결합테스트까지 마치고나니 부하테스트라는 한가지 과제가 남아 있었습니다. 

부하테스트는 Jmeter라는 툴을 사용해서 API에 리퀘스트를 많이 보내서 부하를 주었고, 부하를 주는 타이밍의 서버상태를 확인하면 되는 작업이었습니다.

제가 다니고 있는 회사에서는 운영중인 서버의 경우 감시툴에 의해서 서버의 상태가 실시간으로 감시되고 있으며, 서버의 상태를 실시간으로 차트를 통해서 보여주므로, 감시툴에서 제공하는 차트정보를 출력하기만 하면 될거라고 생각했는데 신규 서버의 경우에는 감시툴에 의해 감시되지 않는다는 사실을 뒤늦게 알게되어 일이 조금 복잡해졌습니다. 

 

일단 부하를 주기 전 , 부하를 줄때, 부하가 끝난 후의 시점의 서버의 상태를 vmstat나 sar, iostat 같은 커맨드를 사용하여 확인하였고 커맨드의 결과값을 기준으로 리뷰를 받았습니다.

여기에서 문제가 하나 발생했습니다.
기술부서의 상사분께서는 제가 사용한 커맨드가 무엇을 의미하고, 커맨드의 결과값이 무엇인지 
알고 계셨기 때문에 문제없이 리뷰를 통과할 수 있었지만, 기술부서가 아닌분께 받은 리뷰에서는 다시 준비해서 설명해달라는 말을 들었습니다. 
이유는 커맨드의 결과값이 이해하기 어렵다는 것이 었습니다. 

물론 아무것도 모르는 사람이라도 이해할 수 있게 설명하지 못한 저의 잘못이크므로, 더 쉽게 설명하려면 아직 제 실력으로는 준비시간이 필요했습니다. 
여유시간이 많으면 좋겠지만 업무량 자체가 많고, 제 시간을 설명을 준비하는 시간에 할당하기 보다는 더 중요한 업무에 할당하고 싶었으므로, 커맨드의 결과값을 시각화하여(그래프를 만들었음)보여드리는 것으로 무사히 리뷰를 마칠 수 있었습니다. 
 
제가 리뷰에 사용한 시각화 자료를 만들때 사용할 것은 vmstat그래프화군이라는 엑셀메크로 였습니다. 
이 툴자체로도 편한 기능이 많지만, 
1) 편리한 기능을 제 입 맛에 맞게 추가하기 위해 그리고 
2) 위에서 이야기한 저의 사례와 같은 일이 일어났을 때 비슷한 상황으로 어려움을 겪으실 분들을 위해서 
이 토이프로젝트를 진행하게 되었습니다.  

 

2. 요구 조건 및 서비스 사양

 1) Linux서버 성능체크 커맨드의 결과값을 엑셀파일(차트 출력)로 출력한다.
 
 ※ 시각화 대상 리눅스의 성능체크 커맨드의 기준은? 
  vmstat, iostat, sar등등 지정한 시간을 간격으로 서버의 상태를 출력하는 커맨드를 대상으로함. 

 

3. 상세 사양

 1) 결과 값입력 

  (1) vmstat의 결과값 파일을 기동변수로 하여 프로그램을 실행한다.

   - NG조건 확인
    a. 기동변수가 Null일 경우
    b. vmstat결과값 파일이 존재하지 않음
    c. vmstat결과값 파일의 형식이 .txt가 아닐경우
    d. vmstat결과값 파일의 용량이 0일 경우 
    e. vmstat결과값 파일의 권한이 제한될 경우 

   - NG조건에 해당하지 않으면 다음 프로세스(2)로 이동
   

  (2) vmstat결과값 파일을 읽어오기 

   - NG조건 확인
    a. vmstat결과값 파일의 값이 Null일 경우
    b. vmstat결과값 파일의 값의 포맷이 일치하지 않을경우
    ※ 결과 값의 포멧 

       (리눅스 서버에서 다음 명령어 실행; vmstat 1 > 20210614_vmstat.txt)


   - NG조건에 해당하지 않으면 다음 프로세스(3)로 이동

 

  (3) (2)의 프로세스에서 읽어온 값을 바탕으로 Data시트 생성하기

   - Data시트 포멧
  

  (4) (3)에서 작성한 Data시트를 바탕으로 그래프 생성


  (5) 그래프가 그려진 엑셀파일을 지정한 디렉토리에 출력

 

4. 순서도

순서도 1) 명령어 결과 파일읽어오기
순서도  2) 데이터 시트 작성
순서도 3) 차트 작성하기

 

 

6. 소스코드

https://github.com/leeyoungseung/java-tools/tree/master/src/main/java/tools/loadvisualization

 

leeyoungseung/java-tools

Contribute to leeyoungseung/java-tools development by creating an account on GitHub.

github.com

 

반응형

댓글