개요
Search 도메인은 Elasticsearch 기반의 로그 저장 기능을 제공합니다. 시스템 로그, 사용자 활동 로그 등을 Elasticsearch에 저장하여 빠른 검색과 분석을 가능하게 합니다.Types
JSON / JSONObject
JSON 데이터를 나타내는 스칼라 타입입니다.모든 JSON 타입 (객체, 배열, 문자열, 숫자, 불리언, null)
JSON 객체 타입만 허용
ElasticResult (Enum)
Elasticsearch 작업 결과를 나타냅니다.created: 새로운 문서가 생성됨updated: 기존 문서가 업데이트됨deleted: 문서가 삭제됨not_found: 문서를 찾을 수 없음noop: 변경 사항 없음
ErrorCause
Elasticsearch 에러 원인 정보를 나타냅니다.에러 타입
에러 원인
스택 트레이스
직접적인 원인
근본 원인 목록
억제된 에러 목록
ShardFailure
샤드 실패 정보를 나타냅니다.인덱스 이름
노드 ID
실패 원인
샤드 번호
HTTP 상태 코드
ShardStatistics
샤드 통계 정보를 나타냅니다.실패한 샤드 수
성공한 샤드 수
전체 샤드 수
실패 상세 정보
건너뛴 샤드 수
Mutations
addElasticSearchLog
Elasticsearch에 로그 문서를 저장합니다.GraphQL Signature
파라미터
Elasticsearch 인덱스 이름인덱스 명명 규칙:
- 소문자만 사용
- 하이픈(-)으로 단어 구분
- 날짜 기반 인덱스:
logs-YYYY-MM-DD - 기능별 인덱스:
user-activity,system-events등
저장할 JSON 문서문서에는 다음 필드를 포함하는 것을 권장:
timestamp: 로그 발생 시각 (ISO 8601 형식)level: 로그 레벨 (info, warn, error 등)message: 로그 메시지userId: 관련 사용자 ID (있는 경우)accommodationId: 관련 숙박 시설 ID (있는 경우)
응답
저장 성공 여부
예제
사용 사례
사용자 활동 추적
사용자의 로그인, 로그아웃, 페이지 방문 등을 기록합니다.시스템 이벤트 로깅
예약 생성, 수정, 취소 등의 중요 이벤트를 기록합니다.에러 및 예외 추적
시스템 에러와 예외 상황을 상세히 기록합니다.성능 모니터링
API 응답 시간 및 성능 지표를 기록합니다.인덱스 명명 규칙
기능별 인덱스
user-activity: 사용자 활동 로그reservation-events: 예약 관련 이벤트payment-events: 결제 관련 이벤트system-events: 시스템 이벤트error-logs: 에러 및 예외 로그performance-metrics: 성능 지표audit-logs: 감사 로그
날짜 기반 인덱스
대량의 로그를 관리하는 경우 날짜별로 인덱스를 분리합니다.logs-2025-01-10: 2025년 1월 10일 로그user-activity-2025-01: 2025년 1월 사용자 활동 로그
권장 필드
모든 로그 문서에 다음 필드를 포함하는 것을 권장합니다:필수 필드
로그 발생 시각 (ISO 8601 형식)예:
"2025-01-10T15:30:00Z"로그 레벨
debug: 디버깅 정보info: 일반 정보warn: 경고error: 에러fatal: 치명적 에러
로그 메시지 (사람이 읽을 수 있는 형태)
선택 필드
관련 사용자 ID
관련 숙박 시설 ID
요청 추적 ID (분산 추적용)
클라이언트 IP 주소
클라이언트 User-Agent
에러 처리
인덱스 생성 실패
존재하지 않는 인덱스에 문서를 추가하면 Elasticsearch가 자동으로 인덱스를 생성합니다. 단, 인덱스 이름이 유효해야 합니다. 유효하지 않은 인덱스 이름:- 대문자 포함:
UserActivity(❌) - 특수문자 포함:
user_activity*(❌) - 공백 포함:
user activity(❌)
user-activity(✅)logs-2025-01-10(✅)reservation.events(✅)
문서 크기 제한
Elasticsearch는 기본적으로 100MB까지의 문서를 지원하지만, 대부분의 로그는 1MB 이하로 유지하는 것을 권장합니다.타임아웃
대량의 데이터를 한 번에 저장하는 경우 타임아웃이 발생할 수 있습니다. 이 경우 벌크 API 사용을 고려하세요.베스트 프랙티스
1. 구조화된 로그
JSON 형식으로 구조화된 로그를 사용하여 검색 및 분석을 용이하게 합니다.2. 일관된 필드명
동일한 타입의 데이터는 일관된 필드명을 사용합니다.userId(✅),user_id(❌),uid(❌)timestamp(✅),time(❌),createdAt(❌)
3. 적절한 로그 레벨
debug: 개발 및 디버깅용info: 정상적인 동작 기록warn: 잠재적 문제error: 에러 발생 (복구 가능)fatal: 치명적 에러 (복구 불가능)
4. 민감 정보 제외
비밀번호, 개인정보, API 키 등 민감한 정보는 로그에 포함하지 않습니다.5. 인덱스 라이프사이클 관리
오래된 로그는 정기적으로 삭제하거나 아카이브하여 스토리지를 관리합니다.관련 API
- 사용자 API - 사용자 활동 로그 저장
- Core Service - 예약 이벤트 로그 저장
- Audit Service - 감사 로그 관리