피드로 돌아가기
Node.js BlogBackend
원문 읽기
Joyent가 로그를 JSON 형식으로 저장하고 Bunyan 라이브러리로 파싱하여 정규표현식 기반 파서 제거 및 구조화된 로그 분석 실현
Service logging in JSON with Bunyan
AI 요약
Context
기존 로그 시스템은 Apache, syslog, 애플리케이션마다 다른 텍스트 포맷을 사용하고 있었으며, 로그 파싱을 위해 정규표현식 기반의 일회성 파서를 반복적으로 작성해야 했다. 20년 이상 로그 파싱 가능성이 개선되지 않아 grep, awk, Perl 등 다양한 도구를 임시로 조합해야 했고, 이는 다중 노드·다중 서비스 환경에서 로그 수집 및 상관관계 분석을 어렵게 만들었다.
Technical Solution
- 로그 포맷을 JSON으로 통일: 단일 텍스트 형식 대신 구조화된 JSON 레코드(name, hostname, pid, level, msg, time, v 필드 포함) 사용
- Bunyan Node.js 모듈 도입: Logger 객체 생성 후 log.info() 등의 메서드로 JSON 로그 기록
- 로그 필터링을 애플리케이션 외부로 이동: 로그 메시지 작성 시 의미론적 정보를 포함하고, 포맷팅은 bunyan CLI 도구에서 처리
- 공통 필드 표준화: 시간 동기화를 위해 time 필드 통일, 다중 서비스 추적을 위해 req_id 필드 전달
- 단일 로그 파일 구조: Apache의 access/error 분리 방식을 폐지하고 모든 로그를 하나의 JSON 스트림으로 기록
Key Takeaway
JSON 로그 도입으로 정규표현식 파서 작성 비용을 제거하고, 구조화된 로그가 ad hoc 필드 추가, Splunk/loggly 연동, statsd 메트릭 수집을 즉시 가능하게 만든다. 첫번째 로그 수신자를 사람에서 기계로 변경하면 다중 노드·다중 서비스 환경의 로그 분석이 근본적으로 단순화된다.
실천 포인트
Node.js 기반 마이크로서비스 아키텍처에서 Bunyan을 도입하면 정규표현식 기반 로그 파싱 코드를 제거할 수 있고, JSON.parse() 만으로 모든 로그를 프로그래밍 방식으로 처리할 수 있다. 특히 req_id를 로그 레코드에 포함시켜 다중 서비스 호출 체인을 추적하고, 단일 로그 파일로 통합하면 분산 시스템의 요청 흐름 디버깅이 획기적으로 간편해진다.