📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드 - NestJS + APM: 모니터링 및 성능 추적 시스템 도입
📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드
37. NestJS + APM: 모니터링 및 성능 추적 시스템 도입
고도화된 SaaS 서비스 운영에서 필수적인 것은 서비스 상태에 대한 가시성 확보입니다.
NestJS는 다양한 APM (Application Performance Monitoring) 도구와 잘 통합되며,
에러 트래킹, 성능 모니터링, 로그 수집, 사용자 행동 추적까지 모두 연동할 수 있습니다.
이번 글에서는 NestJS 프로젝트에 Datadog, Sentry, Prometheus, Grafana 등을 통합하는 방법과 실전 적용 전략을 다룹니다. 📈
✅ 1. APM이란?
Application Performance Monitoring
실행 중인 애플리케이션의 상태, 성능, 오류, 리소스 사용률 등을 추적하여
문제 조기 탐지 및 운영 효율성 향상을 목표로 함.
✅ 2. APM 도구 비교
도구 장점 용도
Sentry | 에러 추적에 특화, stack trace, 사용자 세션 추적 | 예외 추적, 사용자 분석 |
Datadog APM | 트레이싱 + 로그 + 인프라 통합 | 전체 서비스 추적 및 대시보드 |
Prometheus | 오픈소스, 커스텀 메트릭 수집 가능 | 지표 수집 및 Grafana 연동 |
Grafana | 시각화 도구로 Prometheus와 궁합 좋음 | 대시보드 |
✅ 3. Sentry 통합
📦 설치
npm install @sentry/node @sentry/integrations
📂 main.ts
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 1.0,
});
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new AllExceptionsFilter()); // Sentry 연동된 에러 필터
await app.listen(3000);
}
📂 filters/all-exceptions.filter.ts
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
Sentry.captureException(exception);
throw exception;
}
}
✅ 4. Datadog APM 연동 (Node.js)
📦 설치
npm install dd-trace
📂 main.ts
import 'dd-trace/init'; // 최상단에서 import
import { NestFactory } from '@nestjs/core';
Datadog Agent는 별도 Docker 또는 시스템 서비스로 구동 필요.
✅ 5. Prometheus + Grafana 통합
📦 설치
npm install prom-client
📂 metrics/metrics.service.ts
import { Injectable } from '@nestjs/common';
import * as client from 'prom-client';
@Injectable()
export class MetricsService {
private readonly requestCounter = new client.Counter({
name: 'http_requests_total',
help: 'Total number of requests',
});
countRequest() {
this.requestCounter.inc();
}
getMetrics(): Promise<string> {
return client.register.metrics();
}
}
📂 metrics.controller.ts
@Controller('metrics')
export class MetricsController {
constructor(private readonly metricsService: MetricsService) {}
@Get()
async get() {
return this.metricsService.getMetrics();
}
}
Prometheus가 주기적으로 /metrics 엔드포인트를 수집하면 Grafana에서 시각화 가능.
✅ 6. 운영 환경에서 APM 적용 시 고려사항
항목 설명
성능 오버헤드 | 트레이싱 비율 조정 (sampling rate) 필수 |
보안 및 마스킹 | 로그에 개인정보 포함되지 않도록 주의 |
멀티 테넌시 대응 | 로그/메트릭에 tenant_id 포함하도록 확장 |
Slack/Email 연동 | 오류 알림 자동화 (Sentry, Datadog 가능) |
✅ 7. APM 활용 예시
상황 해결 방식
특정 요청에서만 지연 발생 | Datadog 트레이스 분석 |
고정된 API 호출에서 자주 오류 발생 | Sentry로 발생 경로 파악 |
서비스 CPU 급증 | Prometheus로 리소스 추적 |
테넌트별 트래픽 분석 필요 | tenant_id 메트릭 분기 수집 |
✅ 결론: 안정적인 SaaS 운영을 위한 필수 전략
✅ 에러는 Sentry로 즉시 트래킹
✅ 리소스/지표는 Prometheus + Grafana로 실시간 대시보드 구성
✅ 전체 트레이싱은 Datadog APM으로 통합
✅ 모든 분석은 tenant_id, user_id 기준으로 세분화
다음 글에서는 NestJS 마이크로서비스 기반 아키텍처에서의 NATS, RabbitMQ, Kafka와 같은 메시지 브로커 도입 전략과 예제를 다룹니다! 🧩
🔍 다음 글 예고: NestJS + 메시지 브로커 실전 – NATS, Kafka, RabbitMQ 비교 및 적용
📌 다음 편: 38. NestJS 메시지 브로커 도입 가이드
NestJS APM,NestJS Sentry 연동,NestJS Datadog 사용법,NestJS Prometheus 지표,NestJS Grafana 대시보드,NestJS 성능 모니터링,NestJS 로그 수집,NestJS 에러 추적,NestJS SaaS 운영,NestJS 모니터링 시스템