피드로 돌아가기
Your PHP Logs are Lying to You
Dev.toDev.to
Backend

NDJSON 기반 Structured Logging 도입을 통한 로그 분석 효율 및 시스템 결합도 최적화

Your PHP Logs are Lying to You

Mike Georgeff2026년 6월 16일7intermediate

Context

단순 텍스트 기반의 Unstructured Logs는 시스템 규모 확장 시 Field Filtering 및 Aggregation 불가라는 한계 노출. 기존 Stream 기반 플랫폼의 단순 Grep 방식으로는 DORA Metric과 같은 엔지니어링 효과 측정 및 트렌드 분석 수행 불가.

Technical Solution

  • 12-Factor App 원칙에 따라 로그를 Event Stream으로 정의하고 stdout으로 출력하여 애플리케이션과 전송 대상의 Decoupling 구현
  • NDJSON(Newline Delimited JSON) 형식을 채택하여 각 로그 라인을 독립적으로 파싱 가능한 Self-describing 데이터 구조로 설계
  • PSR-3 인터페이스 기반의 Logger 구현을 통해 구체적인 로깅 구현체로부터 비즈니스 로직을 분리하는 Decoupling 전략 적용
  • PSR-3의 8단계 Level은 유지하되, 분석 플랫폼의 호환성을 위해 5단계로 정규화한 Severity 필드를 추가한 Dual-layer 구조 설계
  • Kubernetes Operator(Fluentd, Vector 등)를 통한 Fan-out 구조를 구축하여 단일 stdout 스트림을 Elastic, S3, PagerDuty로 동시 라우팅
  • RFC 3339 Extended 표준 타임스탬프와 일관된 Context 객체 필수 포함으로 데이터 인덱싱 신뢰성 확보

- 로그 포맷을 단순 문자열에서 NDJSON으로 전환하고 모든 라인에 일관된 Schema 적용 여부 검토 - 애플리케이션 내부에서 파일 핸들러나 로테이션 로직을 제거하고 stdout으로 출력하는 구조로 변경 - 분석 플랫폼의 필터링 효율을 높이기 위해 원본 Level과 별개로 정규화된 Severity 필드 도입 고려 - RFC 3339 UTC 타임스탬프 적용으로 분산 환경에서의 시간 동기화 및 정렬 문제 해결

원문 읽기