[나만무] 시스템 모니터링 이해해보기

Curric·2025년 7월 5일
2

들어가며

준비하는 프로젝트가 대용량 트래픽을 견뎌내는 것이 핵심 과제 중 하나다보니, 시스템 모니터링 환경을 구축하는 게 필요했고, 내가 맡게 됐다.

컴퓨터 공학을 하면서, 이를 통해 하나의 소프트 웨어를 만든다고 할 때, 하나의 선순환을 만들고 싶었다.

실험 → 진행상황 모니터링 → 문제 발견 및 진단 → 대응 실시 → 재실험 → 결과 모니터링 → ...... →

시스템의 상태를 실시간으로 파악함으로써 전체 시스템에서 문제가 되는 지점을 찾아내고, 문제의 원인을 밝혀낸다. 이는 대응방안의 근거가 될 것이며 이러한 과정이 곧 공학적 깊이를 더해줄 것이라 생각한다.

시스템 상태 진단을 위한 모니터링 전략

성공적인 product 운영은 단순히 기능을 만드는 것을 넘어, 시스템의 상태를 실시간으로 파악하고 문제의 징후를 조기에 발견하여 대처하는 능력에 달려있다. 이를 위해 시스템 메트릭, 애플리케이션 메트릭으로 층위로 나누어 시스템을 입체적으로 진단할 수 있다.

1. 시스템 지표: 서버의 물리적 건강

  • 의미하는 바:
    - 코드가 실행되는 서버(EC2 인스턴스) 자체의 근본적인 상태를 나타낸다. 하드웨어 자원이 얼마나 효율적으로 사용되고 있는지, 한계에 도달하지 않았는지 확인한다.
  • 주요 확인 지표:
    • CPU 사용률
    • 메모리 사용률
    • 디스크 I/O (Input/Output)
    • 네트워크 트래픽
  • 무엇을 추론하고 어떤 조치를 취할 수 있는가?
지표 (Symptom)진단 (Diagnosis)조치 (Action)
CPU 사용률 90% 이상 지속쿼리/코드의 계산 로직이 비효율적이거나, 처리 용량을 초과하는 요청이 유입되고 있다.DB: 쿼리 튜닝, 인덱스 재설계
API 서버: 비효율적 루프 등 코드 개선
공통: EC2 인스턴스 사양 업그레이드
메모리 사용률 지속적 증가애플리케이션 코드에 메모리 누수(Memory Leak)가 발생했을 가능성이 매우 높다.API 서버: 코드 리뷰를 통해 메모리 해제 로직을 검토하고 버그 수정.
디스크 읽기(Read) I/O 급증메모리가 부족하여 필요한 데이터를 디스크에서 계속 읽어오는 '스왑(Swap)' 현상일 수 있다.
아니면 한번 사용된 데이터가 메모리에 머무르지 않아서 캐싱을 못하고 있을 수 있다.
DB/API 서버: EC2 인스턴스의 RAM 용량을 증설하여 메모리 캐싱 효율을 높인다.
혹은 인메모리 캐시 기법을 도입한다.
네트워크 출력(Egress) 과다API 응답에 불필요하게 크거나 중복된 데이터가 포함되어 있다.API 서버: 응답 데이터 포맷을 최적화하거나, Gzip 등 데이터 압축 적용을 검토한다.

2. 애플리케이션 지표: 서비스의 논리적 성능 진단

  • 무엇을 의미하는가?
    • 서버의 건강을 넘어, "우리 서비스가 사용자의 요청을 얼마나 빠르고, 정확하게, 잘 처리하고 있는가?"에 대한 직접적인 답을 준다. 사용자 경험(UX)과 가장 밀접한 지표다.
  • 주요 확인 지표:
    • API 요청 수 (RPS, RPM)
    • 에러율 (Error Rate, %)
    • 쿼리 요청 수 (QPS)
    • 응답 시간 (Latency, p95/p99)
  • 무엇을 추론하고 어떤 조치를 취할 수 있는가?
지표 (Symptom)진단 (Diagnosis)조치 (Action)
특정 API의 RPS만 유독 높음해당 기능이 사용자들에게 핵심 기능으로 자주 사용되고 있다.해당 API의 성능 최적화에 우선순위를 두고 리소스를 집중 투자하는 의사결정을 내린다.
p99 응답 시간만 비정상적으로 높음대부분의 요청은 빠르지만, 특정 사용자 그룹이나 복잡한 조건의 요청만 매우 느리게 처리되고 있다.분산 추적(Distributed Tracing) 도구를 활용해 느린 요청의 경로를 추적하고, '슬로우 쿼리(Slow Query)'를 찾아내 튜닝한다.
약어의미간단 설명
p9595번째 백분위수 (95th percentile)측정값 중 상위 5%(느린 5%)를 제외한 지연 시간.
“전체 요청 중 95%는 이 시간 이내에 처리된다”는 의미.
p9999번째 백분위수 (99th percentile)측정값 중 상위 1%(가장 느린 1%)를 제외한 지연 시간.
“99%의 요청이 이 시간 이내에 처리된다”는 의미.
RPSRequests Per Second초당 처리하는 HTTP/API 요청 수.
QPSQueries Per Second초당 처리하는 데이터베이스 쿼리(또는 기타 질의) 수.

이걸 데이터들을 어떻게 얻어내고 어떻게 보는지는 다음 포스팅에...

profile
curric

2개의 댓글

comment-user-thumbnail
2025년 7월 6일

많이 배워갑니다

1개의 답글