Service
Cabi - 사물함 대여 서비스

모니터링 시스템 구축 과정

진행일
2023/08/01 → 2023/09/01
태그
Spring Actuator
Micrometer
Prometheus
Grafana
NodeExporter
Docker
Pinpoint
기여도
40%
상태
완료
역할
인프라 엔지니어

배경 및 문제

개발 서버 부하 테스트에서 평균 응답 시간 9초로 매우 저조
→ 문제의 원인 파악의 어려움
서버에 장애가 발생하거나 다운 시, 신속하게 인지 불가
오류 발생 시, 원인 추적 어려움

해결 방안

프로젝트의 안정성과 장애 상황 발생 시 신속한 문제 해결을 위해, Spring Actuator(Micrometer)와 프로메테우스, 그라파나를 활용한 모니터링 서버를 구축하였습니다.
이를 통해 예기치 못한 서버 오류나 다운타임 발생 시 즉각적인 대응이 가능해졌습니다.

그라파나 대시보드

비정상적인 CPU 사용량, JVM 메모리 사용량, Hikari CP 사용량의 변동을 그라파나 대시보드에서 시각적으로 모니터링할 수 있게 되었습니다.
이상 징후나 서버 다운의 경우 Discord Web Hook을 통해 팀의 Discord 서버로 즉시 알림이 전송되도록 설정하였습니다.

핀포인트 구성

클라이언트의 요청과 외부 시스템간의 연계를 쉽게 구조도로 파악할 수 있게 되었습니다.
클라이언트의 요청에 대한 응답 시간을 점 그래프를 통하여 쉽게 파악하여 오류가 발생하거나 응답시간이 지연된 요청을 쉽게 확인할 수 있게 되었습니다.
해당 요청에 대한 Call Stack을 코드 수준의 정보까지 확인할 수 있어 병목 지점이나 장애 발생 구간을 확인하기 용이해졌습니다.
실제로 층 별 사물함 조회 API에서 심각한 병목 현상이 발견되었던 적이 있었습니다. 해당 모니터링 시스템을 통해 N + 1 쿼리 발생이 문제임을 진단하였고, 백엔드 개발자 분과의 협업을 통해 N + 1 쿼리 문제를 해결하기도 했었씁니다.

느낀점

도전적인 목표를 설정하고 이를 해결하는 과정에서 팀원들과의 끊임없는 의사소통과 협력의 중요성을 배울 수 있었습니다.
Cabi 개발과 서비스를 운영하면서 마주했던 문제 중 가장 막막하고 어려운 문제였지만, 의사소통이 원활하게 이루어지고 역할 분배가 잘 이루어진 덕분에 성공적으로 문제를 해결할 수 있었습니다.

프로젝트 진행과 미래 계획

prometheus_grafana_quickstart
이 프로젝트에서 모니터링 시스템을 만드는 과정에서 많은 시행착오를 거치며 수동으로 구축했습니다.
나중에 시스템을 마이그레이션해야 하는 상황이 발생하거나 다른 프로젝트에 적용해야 할 때 이런 작업을 반복한다면 너무 비효율적일 것 같다고 느꼈습니다.
이러한 불편을 해결하기 위해 쉘 스크립트와 도커를 활용하여, 환경변수를 넣고 명령어 한 줄만 입력하면 모니터링 시스템을 쉽게 구축할 수 있는 라이브러리를 개발하게 되었습니다.
더 나아가, 이 라이브러리를 활용하여 자동화된 부하 테스트와 API 성능 진단을 할 수 있는 도구를 개발할 계획입니다!

관련 아카이브