JENNIFER 연동으로 서비스 상태 모니터링 하기

🕑 리딩타임: 5

1. 프롤로그


안녕하세요.  JCC 1기 이청규 입니다.

현재 제가 근무중인 원스토어 에서는 JENNIFER (이하 제니퍼) 라는 어플리케이션 성능 모니터링 서비스 APM(Application Performance Monitoring)을 사용하고 있습니다.

원스토어 서비스의 안정적인 운영을 위해, 특히 장애 감지 및 모니터링 용도로 제니퍼를 활용 중 입니다. 저의 JCC 스마트비법은 제니퍼를 잔디에 연동해 서비스 상태를 실시간으로 모니터링하는 시스템을 만들었다는 것입니다.

지난 여름, 예기치 않은 장애들로 원스토어도, 제니퍼도 모두 바빴습니다…

 

2. JENNIFER X JANDI 연동의 시작


문제가 발생한 이후 장애 회고(Post Review)를 거듭하면서 협업 프로세스를 정비하는 담당자로서 장애 트라우마가 생길 무렵, 최초 장애를 인지하는 것이 24시간 근무 교대하는 상황실에서 체크한다는 것을 알게 되었습니다.

우선 ‘요즘 OP(Operator Person)분들도 진짜 힘들겠다!’ 라는 걱정이 들었고, ‘국내 APM No.1이라는 제니퍼를 우리 팀은 사용중인데, 이를 다시 사람이 재 모니터링하면서 문제가 발생하면 직접 이 사실을 팀에게 전파를 해야하나?’라는 의구심도 생겼습니다.

이 질문에 대해서 ‘슬랙에서는 자동 모니터링이 된다는데요?’ 라는 답변을 듣자마자 JCC인 저는! 슬랙이란 단어를 들으면 방어기제부터 발동되는데요, 그래서인지 바로 제니퍼와 Slack의 연동 모듈을 확인하기 시작했습니다.

Slack은 된다는데요.

 

그렇게 JENNIFER X JANDI 연동이 시작되었습니다.

 

3. 연동 설계 및 구현


연동 아이디어는 다음과 같았습니다.

  1. 사전에 ‘설정값’을 정의해놓고, 그 ‘설정값’을 초과하는 경우, 서비스 이상 현상이 발생했다고 가정하고 로그 파일을 생성합니다.  
  2. 지속적으로 (1분 단위) 로그 파일 생성 유/무를 체크합니다.
  3. 로그 파일이 발생되면, 로그 파일을 읽어 잔디 메시지 알림을 발생 시킵니다.
  4. 알림이 발생한 해당 시점의 제니퍼의 스크린샷도 메시지에 포함합니다.
    제니퍼의 모니터링 화면 스크린샷도 잔디에 같이 보이도록해 멤버들이 더 편하게 서비스 성능 모니터링을 하도록 한 것이 + a 로 해결한 부분입니다.

사용된 기술 스택은 *Jenkins와 *Selenium 입니다.

* 참고

  • Jenkins : 소프트웨어 통합 빌드 자동화 도구.  2단계 Cron 설정에 쓰임
  • Selenium : 웹 브라우저 테스트 자동화 도구.  4단계 스크린샷 생성에 쓰임

 

4. 모니터링 메시지 알림 화면


알림 메시지 화면은 잔디 PC 클라이언트 프로그램과 잔디 모바일 어플의 경우로 나눠서 표현되도록 고민하였습니다.

4-1) 잔디 PC 클라이언트 프로그램

  • 모니터링 메시지인 ‘로그 메시지’의 가독성을 높이고자 로그 파일을 Parsing해서 ‘[이슈 발생시간]/ 문제 발생 서버/ 인스턴스명/ 에러 이벤트값’ 의 순서로 메시지가 표시되도록 합니다.
  • 잔디 인커밍 웹훅의 ‘imageUrl’ 필드를 통해서 스크린 샷 미리보기를 제공합니다.
  • 예) OOO 서버가 지연되는 문제가 발생해서 자동으로 잔디에 연동된 제니퍼 서비스 모니터링 알림 메시지가 도착했습니다. 아래 그림의 주황색 띠(=장애를 뜻함) 부분이 문제가 있네요!
  • 직접 담당자가 수동으로 알려주지 않더라도, 서비스에 이상 신호가 나타나면 제니퍼 서비스 모니터링 스크린샷과 함께 잔디에 알림 메시지가 들어옵니다.

4-2) 잔디 모바일 어플 

  • 아쉽게도 현재 잔디 모바일 어플에서는 ‘imageUrl’을 통한 제니퍼 스크린샷 미리보기 기능이 불가합니다. 따라서 별도 이미지 업로드 서버에 스크린샷을 업로드 한 후, [모바일 보기] 링크로 대체해서 그 글씨를 터치하면 해당 화면이 보이도록 했습니다.

 

5. 한 걸음 더


지금까지의 모니터링 메시지 알림을 구현하는 과정은 잔디 커넥트의 인커밍 웹훅 (Incoming Webhook)을 기반으로 하고 있습니다. 잔디에 알림이 들어올 때만 메시지가 표시되니까 아쉽게도(?) 이벤트(=장애)가 발생되어야 확인 가능합니다. 그래서 장애를 기다리게 됩니다. (뭔가 좀 이상하죠?!)

보통 서비스 장애 상황은 ‘이상 신호 감지 → 문제 처리 → 해결’ 절차로 진행해야 하기에 저는 이상 신호를 언제든지 확인하고 싶어하는 * 팀원들의 내부적 니즈 해결을 위해 아웃고잉 웹훅 (Outgoing Webhook)으로도 제니퍼를 통한 서비스 모니터링이 잔디에서 가능한 잔디 커넥트를 구현하게 되었습니다.

  • 팀원들의 내부적 니즈 : 최초 발생한 장애를 해결한 이후에도 장애 해결 재확인, 재재확인, 재재재확인, 재재재재확인….하고 싶어요. 

아웃고잉 웹훅 활용법은 아래 이미지를 봐주세요. 이미지와 같이 서비스 모니터링을 하고 싶을 때 사전에 지정해놓은 키워드를 /슬래쉬로 시작하는 잔디 메시지로 입력하면 제니퍼 상황을 확인해주는 알림 메시지가 발생됩니다.

  • 예) /제니퍼 -> 실시간 제니퍼 현황을 보여주는 메시지가 나타납니다. (OK Google 같은거라고.. 보시면 됩니다.)

인커밍 웹훅과 아웃고잉 웹훅을 서비스 모니터링에 콜라보한 최초 사례가 아닐까 싶네요. 하핫 ^^

 

6. 혜택


JENNIFER X JANDI 연동을 통해 저희 팀이 얻은 점은 아래와 같습니다.

  • 서비스 운영 담당자 OP(Operator Person)에게 심리적 안정 제공
  • 눈으로만 확인하는 Eye Checking으로는 놓칠 수 밖에 없었던 간헐적인 에러를 발견하게 되면서 서비스 장애 예방 활동을 시작
  • 기존 실시간 서비스 상태 모니터링 시스템과 더불어 +팀원들이 원할 때 마다 서비스 상황을 체크한 잔디 메시지를 보내는 신규 사내 서비스 모니터링 시스템 구축

이 정도면 JCC의 스마트워크 비법이라고 자랑스럽게 말씀드리기에 충분하겠죠?!

 

7. 에필로그 & 기타 하고픈 말


개인적으로 잔디는 다른 도구를 더 가치있게 만들어주는 감초라고 생각합니다.

JENNIFER X JANDI 연동 외에도 꽤 재미난(?) 잔디 활용 사례들이 원스토어 잔디 토픽에는 많습니다.

  • 원체커 : 잔디 RSS 구독 기능과 유사합니다. 국내 유명 커뮤니티에 ‘원스토어’ 관련 신규 글이 생성되면 10분 내로 잔디 토픽에 알림 메시지가 갑니다. 현재 뽐뿌클리앙 게시판 글에 적용되어 있습니다. 사용자들의 소리를 가감없이 들을 수 있습니다.
  • 화장실 빈칸 알림 봇 : 화장실 빈칸은 빠르게 찾아야하니까요~

이번 제니퍼 연동으로 잔디 서비스 모니터링 포스팅의 반응이 좋다면, 재미난 잔디 활용 비법들을 추가로 공개하도록 하겠습니다.

참! 가장 중요한! 하고픈 말

잔디가 장애나면 안 돼요.