[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 구성을 통해 비용 최적화 가능해야 함
- 목표
- SigNoz 기반 분산 추적 및 APM 체계 구축
- OpenTelemetry 표준 기반으로 벤더 종속성 제거
- 기존 Sentry 대비 비용 효율성 확보
- 장기적으로 Shared VPC 기반의 Self-hosted SigNoz 클러스터 운영
3. 기술 선정 기준 및 비교
- 평가 항목
- APM 기능 (슬로우 쿼리, 트랜잭션, 외부 호출 시각화)
- 로그/메트릭/트레이스 통합 여부
- 오픈 표준(OpenTelemetry) 지원
- 운영 편의성 (클라우드 & 셀프호스팅 유연성)
- 비용 최적화 가능성
대안 | 장점 | 단점 |
---|---|---|
Sentry | 예외 기반 알림 우수, UI 간결 | APM 기능은 유료, 벤더 종속 |
Datadog | 통합 관측 기능 풍부 | 비용 매우 높음 |
SigNoz | OpenTelemetry 기반 통합 관측, Self-hosted 가능, 무료 티어 | UI 일부 러프, 설치 학습 필요 |
4. 도입 기술 개요
- 기술명: SigNoz (Cloud + OpenTelemetry Java Agent)
- 버전 / 제품
- Java Agent: v2.16.0
- SigNoz Cloud URL: https://ingest.us.signoz.cloud:443
- 주요 기능
- 트랜잭션 단위 성능 분석
- DB 쿼리 실행 시간 추적
- 예외 발생 트레이스 추적
- 컨테이너·호스트 메트릭 통합 수집
- 서비스 맵 및 호출 흐름 시각화
- 아키텍처 구성요소
- OpenTelemetry Java Agent (-javaagent 방식)
- Gradle 기반 Spring Boot 애플리케이션
- Cloud Build 환경변수로 OTEL 관련 값 주입
- SigNoz Cloud 대시보드 및 알림 설정
5. 도입 이유 및 기대 효과
- Sentry → SigNoz 전환 이유
- 예외 기반 모니터링만으로는 성능 병목의 원인 파악에 한계
- OpenTelemetry 기반의 트랜잭션 전체 흐름 시각화 필요
- 벤더 종속 없이 Self-hosted로 전환 가능한 유연성 확보
- 통합 APM + 로그 + 메트릭 → 단일 플랫폼으로 운영 효율 개선
- 기대 효과
- 서비스 호출 흐름, 외부 API, DB 병목 지점 직관적 파악
- 트랜잭션 단위 지연 요소 분석 → 성능 최적화 방향 도출
- 예외 발생 시 연관 트레이스 확인으로 디버깅 시간 절감
- 클라우드와 Self-hosted 전환이 모두 가능한 이중 운영 전략
6. 구현 및 운영 계획
- 아키텍처 다이어그램
-
구현 단계 요약
-
Secret Manager에 signoz_ingestion_key 등록
-
Dockerfile 내 Java Agent 다운로드 및 -javaagent 설정 추가
-
Gradle 기반 애플리케이션 빌드 및 Agent 포함 런타임 이미지 구성
-
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는 트레이스/메트릭/로그를 통합 지원하며, 비용 측면에서도 유연한 구조 제공
- 향후 과제
- Shared VPC 환경에 Self-hosted SigNoz 배포 (Kubernetes or GCE 기반)
- 서비스별 label/tag 기반 세분화된 트레이스 구성
- 로그 수집까지 포함한 완전한 Observability 플랫폼 구축
- SigNoz Alert → Discord 연동 및 운영 정책 수립
10. 부록
- 용어 정의
- OTEL: OpenTelemetry, 오픈소스 관측 표준 프레임워크
- APM: Application Performance Monitoring
- Ingestion Key: SigNoz Cloud 수집용 인증 토큰