모범 사례
계측 모범 사례
효과적인 계측은 Observability 데이터에서 가치 있는 인사이트를 얻는 핵심입니다. 다음 모범 사례를 따라 오 버헤드를 최소화하면서 최대 가치를 제공하는 계측을 구현하세요.
무엇을 계측해야 하는가
애플리케이션에서 가장 중요한 부분을 계측하는 데 집중하세요:
높은 우선순위:
- 공개 API 엔드포인트 및 사용자 대면 오퍼레이션
- 데이터베이스 쿼리 및 외부 서비스 호출
- 비즈니스 크리티컬 워크플로우 및 트랜잭션
- 오류 경로 및 예외 처리
중간 우선순위:
- 내부 서비스 간 통신
- 백그라운드 작업 및 예약된 태스크
- 캐시 작업
낮은 우선순위:
- 단순 유틸리티 함수
- 정적 콘텐츠 서빙
- 헬스 체크 엔드포인트
네이밍 규칙
일관된 네이밍은 trace를 검색하고 필터링하기 쉽게 만들어줍니다:
Span 이름:
- 소문자와 하이픈 사용:
http-get-user-profile - 오퍼레이션 유형 포함:
db-query-users,redis-get-session - 간결하되 설명적으로: "process"나 "handle"과 같은 범용적인 이름은 피하세요
서비스 이름:
- 환경 전반에 일관된 서비스 네이밍 사용
- 다중 환경 설정에서는 서비스 이름에 환경 포함
- 조직의 네이밍 규칙 준수
Attribute 및 태그
Attribute를 사용하여 span과 trace에 컨텍스트를 추가하세요:
표준 Attribute:
http.method- HTTP 메서드 (GET, POST 등)http.url- 요청 URL (PII 주의)http.status_code- HTTP 응답 상태db.system- 데이터베이스 유형 (mysql, postgres 등)db.name- 데이터베이스 이름db.operation- 데 이터베이스 오퍼레이션 (SELECT, INSERT 등)
커스텀 Attribute:
user.id- 사용자 식별자 (PII인 경우 해시)business.operation- 비즈니스 오퍼레이션 유형version- 애플리케이션 버전environment- 배포 환경
PII 및 보안 고려사항
텔레메트리에서 민감한 데이터를 보호하세요:
절대 포함하지 말 것:
- 비밀번호, API 키 또는 인증 토큰
- 이메일, 전화번호와 같은 개인 식별 정보(PII)
- 민감한 데이터가 포함된 쿼리 파라미터가 있는 전체 URL
- 신용카드 번호 또는 금융 정보
안전한 대안:
- 해시된 또는 토큰화된 식별자 사용
- URL의 경로 부분만 포함
- 특정 값 대신 일반적인 상태 표시자 사용
- 계측 수준에서 데이터 마스킹 구현
샘플링 전략
샘플링은 Observability 커버리지를 유지하면서 비용을 제어하는 데 도움을 줍니다.
샘플링 전략 선택
비율 기반 샘플링:
- 요청의 고정 비율 샘플링 (예: 10%)
- 구현 및 이해가 간단
- 중요하지만 드문 이벤트를 놓칠 수 있음
Tail 샘플링:
- Trace 데이터를 수집한 후 샘플링 결정
- 오류나 높은 지연 시간이 있는 trace를 우선 처리 가능
- 더 복잡하지만 더 지능적
규칙 기반 샘플링:
- 특정 조건(사용자, 엔드포인트 등)에 따라 샘플링
- 중요한 경로가 항상 추적되도록 보장
- 신중한 규칙 정의 필요
권 장 샘플링 비율
- 개발 환경: 완전한 가시성을 위해 100% 샘플링
- 스테이징: 테스트를 위해 50~100% 샘플링
- 프로덕션: 비용 효율적인 커버리지를 위해 10~20%
- 고트래픽 서비스: 볼륨 제어를 위해 1~5%
- 크리티컬 경로: 다른 규칙에 관계없이 100% 샘플링
성능 최적화
계측의 성능 영향을 최소화합니다.
오버헤드 감소
- 가능하면 비동기 span 처리 사용
- 네트워크 호출을 줄이기 위해 span 내보내기를 일괄 처리
- 적절한 버퍼 크기 구성
- 계측 성능 메트릭 모니터링
리소스 관리
- span 내보내기에 적절한 타임아웃 설정
- 백엔드 장애에 대한 서킷 브레이커 구현
- Collector에 대한 커넥션 풀링 사용
- 적절한 재시도 정책 구성
알림 및 모니터링
효과적인 알림을 설정하여 애플리케이션 상태를 파악합니다.
모니터링할 핵심 메트릭
- 지연 시간: P95/P99 응답 시간
- 오류율: 실패한 요청의 비율
- 처리량: 초당 요청 수
- 포화도: 리소스 사용률
- Trace 볼륨: 수집된 trace 수
SLO 기반 알림
Service Level Objectives를 정의하고 위험 시 알림을 설정합니다:
- 지연 시간 SLO: 요청의 95%가 500ms 미만
- 오류 SLO: 99.9% 성공률
- 가용성 SLO: 99.95% 가동 시간
비용 관리
가치를 유지하면서 Observability 비용을 제어합니다.
비용 최적화 전략
- 적절한 샘플링 비율 구현
- 데이터 보존 정책 사용
- 불필 요한 span 및 attribute 필터링
- 오래된 데이터를 저렴한 스토리지로 아카이브
- 데이터 볼륨 모니터링 및 최적화
데이터 보존 정책
- Hot 스토리지: 최근 데이터 (7~30일) — 활성 트러블슈팅용
- Warm 스토리지: 히스토리컬 데이터 (30~90일) — 트렌드 분석용
- Cold 스토리지: 아카이브 데이터 (90일 이상) — 규정 준수 및 간헐적 쿼리용