[NestJs]Sentry-Slack 연동 | 실시간 로그모니터링

둥둥이·2023년 1월 13일
0

목표

1) Sentry를 통해 에러 발생시 바로 트래킹
2) Slack으로 에러 전송

설치해야할 라이브러리

$ npm install @sentry/node nest-raven
$ npm install @slack/client

Sentry 연결

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에 저 부분만 넣어주면 끝

Sentry-Slack 연동

슬랙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

0개의 댓글