구조화된 이벤트와 텍스트 로그
텍스트 로그는 프로그램이 수행한 작업을 설명합니다. 구조화된 이벤트는 워크플로에 대한 안정적인 사실을 기록합니다. 둘 다 유용하지만 서로 다른 질문에 맞게 최적화됩니다.
텍스트 로그는 시작 메시지, 예기치 않은 분기, 라이브러리 출력 및 스택 추적과 같은 로컬 진단에 적합합니다. 자유 형식 메시지는 좁은 시간 범위를 읽는 사람의 맥락을 보존합니다. 경로별 실패율, 모델별 비용, 소스별 활성화 또는 대기열별 재시도 등 여러 요청에서 동일한 질문에 반복적으로 답변해야 하는 경우 구조화된 이벤트가 더 적합합니다.
쿼리의 차이점
애플리케이션이 invoice sync failed for team_123 in 940ms를 작성한다고 가정합니다. 검색을 통해 해당 문장을 찾을 수 있지만 차트는 먼저 팀, 기간 및 결과를 추출해야 합니다. 구조화된 필드를 사용하면 쿼리가 직접 작동할 수 있습니다.
SELECT
error_type,
COUNT(*) AS failures,
approx_percentile_cont(duration_ms, 0.95) AS p95_duration_ms
FROM billing_syncs
WHERE status = 'failed'
AND timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY error_type
ORDER BY failures DESC;
이벤트 계약은 필드 유형과 범주를 명시적으로 만듭니다. 또한 작은 단어 변경으로 인해 저장된 쿼리가 중단되는 것을 방지합니다.
모든 것을 복제하지 않고 둘 다 사용
엔지니어가 사고를 조사할 수 있도록 상세하고 단기적인 진단 로그를 보관하세요. 워크플로 경계에서 더 작은 내구성 있는 구조적 이벤트 집합을 내보냅니다. 요청 ID, 추적 ID, 작업 ID 또는 기타 안전한 상관 관계 값을 사용하여 두 가지를 연결합니다. 전체 스택 추적을 복사하거나 모든 분석 이벤트에 본문을 요청하지 마세요.
JSON라고 해서 이벤트가 자동으로 좋아지는 것은 아닙니다. 변경된 키와 임의의 문자열로 구성된 가방은 여전히 분석하기 어렵습니다. 가치는 안정적인 이름, 문서화된 필드, 제어된 범주, 변경 사항을 검토하는 소유자 등 의도적인 계약에서 비롯됩니다.
실용적인 선택 규칙
데이터를 집계, 비교, 알림하거나 대시보드를 구축하려는 경우 구조화된 이벤트를 선택하세요. 특정 조사 중에 자세한 맥락을 읽는 것이 주요 용도인 경우 텍스트 로그를 선택합니다. 둘 다 필요한 경우 상관 관계 식별자를 공유하는 압축 이벤트 하나와 진단 레코드 하나를 내보냅니다.
대용량 이벤트를 추가하기 전에 이벤트 스키마 설계를 읽어본 후 구조화된 로깅 가이드를 사용하여 계측하고 확인하세요.