웹 애플리케이션 모니터링은 크게 네 가지 텔레메트리 데이터 유형을 통해 이루어집니다.
텔레메트리의 4대 요소
-
메트릭 (Metrics): 응답 시간, 오류율, CPU 사용량 등 정기적으로 측정되는 수치 데이터로, 대시보드 및 알림에 적합합니다.
-
로그 (Logs): 이벤트 발생 시 상세한 오류 메시지, 스택 트레이스, 사용자 ID 등 컨텍스트를 제공하여 문제의 원인을 파악하는 데 유용합니다.
-
트레이스 (Traces): 사용자 요청이 브라우저부터 백엔드 API, 데이터베이스에 이르기까지 전체 여정을 시각화하여, 병목 현상을 식별하는 데 도움을 줍니다.
-
실제 사용자 모니터링 (Real User Monitoring, RUM): 실제 사용자 브라우저에서 로드 시간, JavaScript 오류 등 성능 데이터를 직접 수집하여 사용자 관점의 정확한 정보를 제공합니다.
모니터링 아키텍처 및 성능 목표 설정
모니터링 아키텍처는 애플리케이션에 모니터링 에이전트를 추가하는 계측(Instrumentation), 원시 데이터를 중앙 수집기로 보내는 집계(Aggregation), 데이터를 인덱싱하고 저장하는 저장(Storage), 그리고 대시보드 구축 및 알림 규칙 설정하는 시각화(Visualization) 단계로 구성됩니다.
수집된 텔레메트리 데이터의 효과적인 활용을 위해 SLO (Service Level Objective)를 정의하는 것이 중요합니다. SLO는 SLI (Service Level Indicator), 즉 요청 지연 시간이나 오류율과 같은 측정 가능한 지표에 대해 설정하는 목표치입니다. 예를 들어, /api/v1/products 엔드포인트에 대해 “99%의 요청이 300ms 미만으로 처리”되는 지연 시간 SLO와 “99.9%의 요청이 성공”하는 가용성 SLO를 설정할 수 있습니다. 이는 “충분히 좋은” 서비스 품질에 대한 명확하고 측정 가능한 정의를 제공합니다.
Rails 및 React 환경에서의 실용적인 설정
-
Rails 백엔드:
opentelemetry-sdk를 사용하여 ActiveRecord, Rack, Faraday를 자동 계측하고, JSON 형식으로 구조화된 로그를 구성하여 기계 판독성을 높입니다. -
React 프론트엔드: OpenTelemetry for JavaScript SDK를 활용하여 LCP, FID, CLS와 같은 핵심 성능 지표 및 사용자 상호작용 데이터를 캡처하여 백엔드 트레이스와 연결합니다.
-
PostgreSQL 데이터베이스:
pg_stat_statements확장을 통해 SQL 문 실행 통계를 추적하여, 총 실행 시간, 빈번한 쿼리, 높은 I/O 대기 시간 쿼리 등을 식별함으로써 요청 수명 주기에 대한 완전한 종단 간 가시성을 확보합니다.