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
반응형
'Back-end > Node-NestJS' 카테고리의 다른 글
helmet 보안 xss 필터 추가 (0) | 2022.11.23 |
---|---|
[XSS] Nest js에 xss 필터를 넣어서 보안 강화 XSS 방지, Cross Site Scripting (0) | 2022.11.10 |
[Node/Nest] shell 글자 꾸미기 사용하여 큰 글씨 주석 달기 figlet (0) | 2022.09.14 |
[NestJS] 상황에 따른 logger level 분기 나누기 (0) | 2022.09.14 |
[Nest.js] Interceptor VS Filter VS Middleware 차이점 (0) | 2022.09.07 |
댓글