본문 바로가기
Back-end/Node-NestJS

[NestJS] LOG에 요청 transation-id 추가하기

by 꼬바리 2022. 9. 13.

Nest JS에서 LOG에 요청 하나에 대한 트랜잭션 ID 를 넣어 구분 하고자 한다.

NEST 에서 logging 은 인터셉션, 가드, 미들웨어 등에서 출력을 한다.

 

transation-id 를 넣지 않으면

같은 시간에 요청이 올경우 , 응답이나 에러 가 어떤 요청 인지 구분하기 어렵다.

위에 표시된 숫자 ID는 프로세스 ID (=pid)로

다른 요청이 들어와도 같은 ID가 출력된다.

 

😎install

npm i elastic-apm-node

 

 

😎import

import * as apm from 'elastic-apm-node'

 

 

APM 이란

APM은 Application Performance Monitoring의 약어로, Application에 대한 성능정보 및 발생한 Error정보 그리고 Application이 동작중인 서버의 기본적인 Metric정보를 수집 할 수 있는 기능을 지원합니다.
또한 MicroService 환경에서 서비스를 구성하는 여러 Application간의 Request를 하나의 Trace로 묶어서 추적 할 수 있는 분산 Tracing(distributed tracing)에 대한 기능도 지원합니다.
APM은 위와 같이 수집된 여러 데이터를 바탕으로 하여 Application에 지연이 발생하였을때 지연에 대한 병목 구간을 찾아 낼 수 있는 모니터링 서비스 입니다.

 

APM으로 다양한 정보를 수집 할수 있지만, 나는 logging에 트랜잭션 ID 만 일단 넣어주겠다.

APM의 경우 express로 많이 사용한다. Nest에선 typeScript문법을 사용

 

 

😎code

//트랜잭션 ID 응답 헤더 세팅
const transaction = apm.startTransaction()
res.setHeader('transactionId', transaction.ids['transaction.id'])

apm 을 시작해주고 응답 헤더에 transactionId를 세팅해준다.

 

LOG를 찍는 부분에

const trasId = res.getHeader('transactionId');
this.logger.log(`[${trasId}] 블라블라블라`);

요청 마다 다른 ID가 찍혀 

요청을 구분할수있다.

 

log에 하나하나 넣어줘야하는 귀찮음이있다.

pino라이브러리도 활용하지만

피노를 사용시, logger가 개인적으로 지져분해 보였으며 따로 설정을 해줘야 함으로 apm을 사용 출력 해주었다.

 

728x90
반응형

댓글