1) Sentry를 통해 에러 발생시 바로 트래킹
2) Slack으로 에러 전송
$ npm install @sentry/node nest-raven
$ npm install @slack/client
Sentry URL : https://sentry.io/
[Project] - [Create a new Project] - [Node.JS] 선택하여 프로젝트 생성
여기서 DSN을 잘 복사해놓습니다.(환경변수로 설정해주세요)
./main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as Sentry from '@sentry/node';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
Sentry.init({
dsn: process.env.SENTRY_DSN,
});
await app.listen(3000);
}
bootstrap();
센트리를 연동하는건 매우매우매우 쉽다. main.ts에 저 부분만 넣어주면 끝
슬랙api 접속 : https://api.slack.com
여기서 Slack API Incoming Webhooks를 생성해주어야 한다. 아래처럼 따라하자
Slack API홈페이지 -> Create New App -> From scratch -> Name & Workspace 지정 -> Feature/Incoming Webhooks메뉴 -> Activate Incoming Webhooks를 On으로 설정 -> 맨 하단 add 버튼 클릭 -> Webhook URL을 복사
Webhook Interceptor 만들기
(common/logger/webhook.interceptor.ts)
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import * as Sentry from '@sentry/node';
import { IncomingWebhook } from '@slack/client';
import { catchError } from 'rxjs';
@Injectable()
export class SentryWebhookInterceptor implements NestInterceptor {
intercept(_: ExecutionContext, next: CallHandler) {
return next.handle().pipe(
catchError((error) => {
Sentry.captureException(error);
const webhook = new IncomingWebhook(process.env.SLACK_WEBHOOK);
webhook.send({
attachments: [
{
color: 'danger',
text: `🚨${process.env.HOST_URL} API 서버 에러발생🚨`,
fields: [
{
title: error.message,
value: error.stack,
short: false,
},
],
ts: Math.floor(new Date().getTime() / 1000).toString(),
},
],
});
return null;
}),
);
}
}
attachments 내용만 잘 변경해주자
에러를 발생시켜서 테스트를 해보니
오우 잘 되는걸 확인할 수 있다.
https://velog.io/@1yongs_/NestJS-sentry-slack-error%EB%A1%9C%EA%B7%B8-%EC%88%98%EC%A7%91