[cloud] APM 도입 ‐ SigNoz - 100-hours-a-week/5-yeosa-wiki GitHub Wiki

프로젝트 인프라 기술 도입 보고서

1. 문서 개요

  • 작성자: 이유성
  • 작성일: 2025-06-17
  • 목적
    • Spring Boot 애플리케이션의 성능 모니터링 및 예외 분석을 위해 SigNoz 기반 Observability 체계를 구축하고,
    • 기존 Sentry에서 SigNoz로의 전환 이유와 구성 방식을 문서화하여 운영팀의 관측성 수준 향상과 비용 최적화 전략 수립에 기여하고자 함.

2. 도입 배경

  • 기존 환경 및 이슈
    • Sentry를 통해 예외 기반 알림은 가능했으나, 성능 병목에 대한 트랜잭션 단위 추적이 어려움
    • APM(성능 모니터링) 기능은 유료 플랜 대상이거나 기능 제한 존재
    • Cloud 환경에서 트래픽 규모 증가에 따른 비용 부담 우려
  • 비즈니스 요구사항
    • 실시간 트랜잭션 모니터링, 슬로우 쿼리 추적, 분산 추적 기능 확보
    • 하나의 플랫폼에서 메트릭, 로그, 트레이스를 통합 관리
    • 향후 Self-hosted 구성을 통해 비용 최적화 가능해야 함
  • 목표
    1. SigNoz 기반 분산 추적 및 APM 체계 구축
    2. OpenTelemetry 표준 기반으로 벤더 종속성 제거
    3. 기존 Sentry 대비 비용 효율성 확보
    4. 장기적으로 Shared VPC 기반의 Self-hosted SigNoz 클러스터 운영

3. 기술 선정 기준 및 비교

  • 평가 항목
    1. APM 기능 (슬로우 쿼리, 트랜잭션, 외부 호출 시각화)
    2. 로그/메트릭/트레이스 통합 여부
    3. 오픈 표준(OpenTelemetry) 지원
    4. 운영 편의성 (클라우드 & 셀프호스팅 유연성)
    5. 비용 최적화 가능성
대안 장점 단점
Sentry 예외 기반 알림 우수, UI 간결 APM 기능은 유료, 벤더 종속
Datadog 통합 관측 기능 풍부 비용 매우 높음
SigNoz OpenTelemetry 기반 통합 관측, Self-hosted 가능, 무료 티어 UI 일부 러프, 설치 학습 필요

4. 도입 기술 개요

  • 기술명: SigNoz (Cloud + OpenTelemetry Java Agent)
  • 버전 / 제품
  • 주요 기능
    • 트랜잭션 단위 성능 분석
    • DB 쿼리 실행 시간 추적
    • 예외 발생 트레이스 추적
    • 컨테이너·호스트 메트릭 통합 수집
    • 서비스 맵 및 호출 흐름 시각화
  • 아키텍처 구성요소
    1. OpenTelemetry Java Agent (-javaagent 방식)
    2. Gradle 기반 Spring Boot 애플리케이션
    3. Cloud Build 환경변수로 OTEL 관련 값 주입
    4. SigNoz Cloud 대시보드 및 알림 설정

5. 도입 이유 및 기대 효과

  • Sentry → SigNoz 전환 이유
    • 예외 기반 모니터링만으로는 성능 병목의 원인 파악에 한계
    • OpenTelemetry 기반의 트랜잭션 전체 흐름 시각화 필요
    • 벤더 종속 없이 Self-hosted로 전환 가능한 유연성 확보
    • 통합 APM + 로그 + 메트릭 → 단일 플랫폼으로 운영 효율 개선
  • 기대 효과
    1. 서비스 호출 흐름, 외부 API, DB 병목 지점 직관적 파악
    2. 트랜잭션 단위 지연 요소 분석 → 성능 최적화 방향 도출
    3. 예외 발생 시 연관 트레이스 확인으로 디버깅 시간 절감
    4. 클라우드와 Self-hosted 전환이 모두 가능한 이중 운영 전략

6. 구현 및 운영 계획

  • 아키텍처 다이어그램
  • 구현 단계 요약

    1. Secret Manager에 signoz_ingestion_key 등록

    2. Dockerfile 내 Java Agent 다운로드 및 -javaagent 설정 추가

    3. Gradle 기반 애플리케이션 빌드 및 Agent 포함 런타임 이미지 구성

    4. cloudbuild.yaml에서 환경 변수 삽입:

      --container-env=OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.us.signoz.cloud:443
      --container-env=OTEL_EXPORTER_OTLP_HEADERS=signoz-ingestion-key=$$SIG_NOZ_KEY
      --container-env=OTEL_RESOURCE_ATTRIBUTES=service.name=ongi-backend,service.version=${_IMAGE_TAG}
      
  • 운영 절차

    • SigNoz Web UI에서 트랜잭션 및 쿼리 분석
    • 알림 설정: 슬로우 트랜잭션, 에러율 기준 트리거
    • Slack/Discord 등 연동 가능

7. SigNoz에서 중점적으로 모니터링할 항목

항목 설명
서비스 성능 지연 전체 트랜잭션 시간, 외부 API 호출 지연
DB 슬로우 쿼리 쿼리 실행 시간 > 1초, N+1 감지
예외 연관 트레이스 오류 발생 시 호출 경로 자동 추적
서비스 맵 마이크로서비스 간 의존 관계 시각화
애플리케이션 지표 요청 수, 오류율, 응답 시간 평균값 등

8. 결과 및 평가

지표 Sentry 사용 시 SigNoz 도입 후
예외 탐지 O (단일 이벤트) O (트랜잭션 기반)
트랜잭션 시각화 X O
슬로우 쿼리 감지 일부 O
비용 구조 무료 + 유료 기능 제한 클라우드 무료 티어 → 향후 자가 구축 가능
Vendor lock-in 있음 없음 (OpenTelemetry 기반)
  • 학습 및 개선 사항
    • Java Agent의 환경 변수 주입 시 문자열 이스케이프 오류 대응
    • 초기 Cloud Build에서 Secret 호출 제한 → IAM 권한 재설정

9. 결론 및 향후 계획

  • 요약
    • Sentry 중심의 예외 모니터링에서 SigNoz 기반 APM 중심의 성능 모니터링 체계로 전환
    • SigNoz는 트레이스/메트릭/로그를 통합 지원하며, 비용 측면에서도 유연한 구조 제공
  • 향후 과제
    1. Shared VPC 환경에 Self-hosted SigNoz 배포 (Kubernetes or GCE 기반)
    2. 서비스별 label/tag 기반 세분화된 트레이스 구성
    3. 로그 수집까지 포함한 완전한 Observability 플랫폼 구축
    4. SigNoz Alert → Discord 연동 및 운영 정책 수립

10. 부록

  • 용어 정의
    • OTEL: OpenTelemetry, 오픈소스 관측 표준 프레임워크
    • APM: Application Performance Monitoring
    • Ingestion Key: SigNoz Cloud 수집용 인증 토큰