피드로 돌아가기
Node.js 15.1.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 15.1.0이 diagnostics_channel 모듈을 추가해 애플리케이션 진단 데이터를 발행-구독 방식으로 수집 가능

Node.js 15.1.0 (Current)

2020년 11월 4일10intermediate

Context

Node.js 애플리케이션의 내부 동작 상태를 추적하고 진단하기 위해 핵심 모듈과 서드파티 라이브러리가 실시간 메트릭 데이터를 노출할 표준화된 채널이 필요했다.

Technical Solution

  • diagnostics_channel 모듈 도입: dc.channel(name)으로 이름이 지정된 채널을 생성하고, channel.publish(data)로 메시지 발행
  • 리스너 구독 메커니즘: channel.subscribe(listener)로 채널에 구독 등록해 발행된 데이터를 수신
  • 성능 최적화 설계: 아무도 청취하지 않는 채널의 발행 오버헤드를 최소화하도록 개별 채널 객체로 분리
  • ChildProcess spawn 이벤트 추가: 자식 프로세스 생성 완료 시점에 'spawn' 이벤트 발행 (stdout/stderr 수신 전)
  • Resolver 로컬 주소 지정 기능: setLocalAddress() 메서드로 다중 호스트 환경에서 DNS 요청의 발신 인터페이스 지정 가능
  • V8 커버리지 제어 메서드: v8.takeCoverage()로 온디맨드 커버리지 리포트 작성, v8.stopCoverage()로 수집 중단
  • Worker 이벤트 루프 모니터링: Worker 인스턴스에 performance.eventLoopUtilization() 메서드 추가
  • 힙 스냅샷 자동 생성: --heapsnapshot-near-heap-limit=max_count 플래그로 V8 힙 사용량이 한계 접근 시 자동 스냅샷 생성

Key Takeaway

Node.js 핵심 모듈에 표준화된 진단 채널을 내장함으로써 애플리케이션 개발자가 데이터베이스 쿼리, 네트워크 활동, 파일시스템 작업 등을 일관된 인터페이스로 추적할 수 있게 되었다.


데이터베이스 쿼리나 마이크로서비스 호출을 수행하는 라이브러리에서 diagnostics_channel을 통해 메타데이터(호스트, 쿼리 문자열, 타이밍)를 발행하면, 애플리케이션 단에서 추가 코드 수정 없이 APM 도구나 커스텀 모니터링 스크립트가 트레이싱 데이터를 강화하거나 성능 분석을 수행할 수 있다.

원문 읽기