ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elastic Search, Kibana를 사용하여 이슈 관리하기
    2017. 7. 11. comments
    반응형

    올해의 목표

    올해 새롭게 꾸려진 우리 팀은 Stable 버전의 유지보수(버그 수정)를 담당하고 있다. 개인적으로 오랫동안 유지보수 일도 해왔고 그 동안 쌓인 노하우를 실험해보고 싶었다. 이런 저런 이유로 새로운 목표를 계획했는데, 목표를 그대로 적기에는 배경 설명이 길어지니 요약하면 "적은 인원으로 최대한의 유지보수 효과내기" 또는 "유지보수 비용 줄이기"라 말할 수 있다. 

     

    아래는 목표를 달성하기 위한 일부 내용들이다.

     

    • 문제 재현을 빨리 할수 있는 테스트 도구를 만들거나 현실적으로 고치기
    • 기존에 만들기 어려워했던 유닛테스트에 대해서 mock을 활용하여 기본 틀 제공하기
    • 이전에 발생한 주요 이슈들을 추적해서 유닛테스트가 있는지 검토하고 없으면 신규로 작성하기
    • 주요 모듈에서 발생한 이슈는 유닛테스트 작성을 강제하기
    • (잘 고쳐졌는지) 코드 리뷰하기, 테스트하기, (유닛테스트가 작성되었는지) 코드 리뷰하기, ...

    나는 유닛테스트를 맹신하는 편에 속한다. 테스트 코드가 없는 기능들에 대해서 테스트 코드를 만들다 보면 코드가 어떻게 동작하는지 더 자세히 이해할 수 있다. 그 과정에서 내재되어 있던 문제들을 찾은 경우도 꽤 있다. Stable 코드는 최소한의 수정으로 버그를 고치는게 원칙이지만 문제들이 반복적으로 나타나 어쩔수 없이 수정을 많이 했는데 결과론적으로는 꽤 잘한 선택인 것 같다.

     

    제품을 안정화하기 위한 이런한 시도들은 매년 어느정도는 계획되지만 우리가 한 일이 제품에 어떤 영향을 끼쳤는지 정작 측정을 하지 않는 것 같다. 그래서 이번에는 단순히 이슈 개수를 줄이는 것을 넘어 우리가 노력한 작업들이 긍정적인 결과를 보여주고 있는지 측정하기로 했다.

    mantis 이슈 트래커

     

     

     

    우리는 mantis라는 이슈관리 시스템을 사용한다. mantis는 이슈를 등록하고 관리하는데 좋은 도구이지만 내가 필요한 통계 기능들은 부족하다. 예를 들어 내가 필요한 정보들은,

     

    • 일일 신규 이슈 개수
    • 일일 종료된 이슈 개수
    • 기간에 따른 누적 신규/종료 이슈 현황
    • 진행 중인 전체 이슈 개수 현황
    • 제품 버전별 진행 중 이슈 현황
    • 팀별 진행 중인 이슈 현황
    • 제품 버전별, 팀별 진행 중인 이슈 현황

    이런 정보들인데 사람이 일일이 수집하기에는 시간이 아까운 작업이다. 기간, 신규/종료된 이슈, 팀, 버전이 통계 데이터를 만드는데 있어 중요한 단어들이다. 그 외 중요도나 어떤 모듈에서 발생했는지를 더하게 되면 조합은 더 복잡해진다. MantisStats이란 plug-in가 있어 그걸 사용해볼까 했었지만 결국 ElasticSearch와 데이터 시각화 도구인 Kibana를 사용하게 되었다. 내가 적극적으로 Kibana를 사용하는데 있어 Elastic을 이용한 서울시 지하철 대시보드 글이 동기부여가 되었다.

     

    또한 Inflearn 사이트의 ELK 스택(ElasticSearch, LogStash, Kibana)로 데이터 분석 인터넷 강의가 기본 감을 잡는데 충분한 도움이 되었다. 댓글에도 남겨두었지만 심심한 감사를 드린다.

     

    Elastic Search로 데이터 수집하기

     

     

    mantis에서 필요한 데이터를 빼내는 방법은 어렵지는 않았지만 생각만큼 쉽게 풀리지도 않았다. 당연히 RESTful webAPI를 지원하나 했지만 mantis에서는 SOAP webAPI를 지원한다. 최신버전에서도 SOAP을 계속 지원하는거 보니 영원히 SOAP webAPI만을 지원하려나 보다.

     

    그래서, Python으로 데이터를 수집할 수 있는 스크립트를 만들었다. mantis에 SOAP webAPI로 접근해서 필요한 정보를 가져오는 동작을 한다. 또한 모든 이슈 정보를 매번 가져올 수 없으니 "Filter" 기반으로 가공된 데이터만 갖고 오도록 설계하였다. 이 도구는 github에 등록해두었으니 필요한 분들은 사용하시길.

     

     

     

    이렇게 가져온 데이터는 REST webAPI를 사용하여 ES(Elastic Search)에 데이터를 저장한다. ES에 신규 이슈/해결된 이슈를 저장하기 위한 index를 만들었고, 별도로 현재 진행 중인 이슈를 저장하기 위한 index를 만들었다. 매일 밤 11시에 오늘 신규로 등록된 이슈와 해결된 이슈를 수집해서 저장하고, 현재 진행 중인 이슈를 따로 수집해서 저장하도록 하였다. 

     

    Kibana를 사용하여 데이터를 시각화하기

     

    첫 번째로 만든 대쉬보드는 "일일 이슈 정보" 묶음이다. 버전별, 팀별, 이슈 현황에 대한 상세히 알 수 있다. 히트맵을 사용하면 특정 팀이 어느 버전 이슈가 많은지 손쉽게 식별할 수 있다. 참고로 팀이나 제품 관련된 용어들은 모자이크 처리를 하였다. 

     

     

     

    두번째로 만든 대시보드는 기간별로 살펴볼 수 있게 만들었다. 이 그래프는 꽤 의미가 있다. 우리가 유지보수하는 버전의 이슈 개수가 줄어들고 있고, 신규로 등록되는 개수가 점차적으로 줄어들고 있어야 우리가 계획한 일들이 의미 있는 일인지 가늠할 수 있기 때문이다.

    • 우선 왼쪽 파란색 라인 그래프를 보면 "진행 중 이슈" 개수가 꾸준히 줄고 있음을 확인할 수 있다.
    • 오른쪽 누적 그래프에서는 노란색 부분이 "신규 등록" 이슈 개수를 의미하는데 점차 완만해져야 한다. 

    3월부터 도입했으니 약 4개월 정도 측정한 것인데, 현재까지는 괜찮은 결과를 보여주고 있긴 하지만 생각보다 측정 기간이 짧은 편이긴 하다. 올 하반기까지는 꾸준히 실험하고 측정 및 회고를 통해서 최종 결론을 내려야 하지 않을까 싶다.

     

    Elastic 제품군은 데이터 저장과 시각화 및 분석을 무료로 이용할 수 있다는 점이 대단한 것 같다. 네트워크 데이터와 DB 정보를 수집하여 시각화할 수 있는 PakcetBeat 또한 제공된다. 무엇을 저장하고 어떤 정보를 시각화할 것이냐에 대한 고찰이 좀 필요하지만 나머지 부분은 기술적으로 어렵지 않고 웹에서 많은 사례와 예제들을 구할 수 있는 장점이 있으니 실험적으로 도입해보는 것을 추천한다.

    반응형

    댓글

Designed by Tistory.