개요
SW아카데미 수업 중 모니터링에 관한 수업을 들었다. 교수님께서 진행중인 서비스에도 모니터링 시스템을 도입하면 좋을 것 같았다.
수업에서 들은 모니터링, 옵저빙 툴은 여러 종류가 있었지만, Datadog의 경우 많이 들어보기도 했고, 팀원의 강추가 있었다.
또한, Next와의 연결 문서도 나름 잘 정리되어있는 Datadog을 선택했다. (비용이 세다는 말이 많아 좀 걸리긴 했다..)
Datadog?
클라우드 기반 애플리케이션과 인프라를 모니터링하고 분석하는 종합적인 모니터링 및 데이터 분석 플랫폼으로
주요 기능은 다음과 같다.
1. 모니터링 및 관찰성 : 애플리케이션, 서버, 컨테이너, 데이터베이스, 네트워크 등 모든 인프라와 애플리케이션 계층에서 데이터를 수집하고 시각화
2. 로그 관리 : 중앙 집중화된 로그 수집 및 검색 기능 제공
3. APM(Application Performance Monitoring): 애플리케이션의 성능을 추적하고 병목 현상을 분석
4. 대시보드 및 알림 : 사용자 정의 대시보드로 데이터 시각화 + 특정 조건 충족 시 알림을 전송해 즉각 대응 가능
5. RUM(Real User Monitoring) : 실제 사용자 경험을 실시간으로 모니터링하고 분석
이중 나는 APM, RUM을 중점적으로 사용해보려고 한다.
개발을 진행하면서 APM을 통해 애플리케이션의 성능을 지속적으로 모니터링하면서 문제 및 오류를 분석하고,
RUM을 통해 향후 서비스 사용자의 행동을 추적하고 대시보드를 통해 성능(페이지 로딩, UI응답, 오류 발생률)을 확인하는 것이 목표이다.
Datadog 연동
기본설정
1. github student developer pack 등록
- Datadog은 기본적으로 2주 무료기회를 제공하나 학생의 경우 무료계정을 이용 할 수 있다.
- 학생인증은 깃허브에서 하면되고 dataDog을 제외한 다른 혜택들도 많이 제공한다.
- 학교 정보 및 인적사항을 입력 후 신청을 누른다.
- 근데 이거 인증되는데 최대 10일이 걸린다. 기다려야한다..
2. 14일 계정으로 일단 생성해서 연결을 해보자 지역은 Japan으로 이후 인적사항 기입 후 가입
3. 다음은 사용하는 기술을 선택하는 건줄 알았지만 설문조사다. 가볍게 선택 후 넘어가자
4. Datadog Agent 설치
- Datadog Agent는 서버, 컨테이너, 애플리케이션 등 다양한 환경에서 데이터를 수집 및 Datadog로 전송해 모니터링하려는 시스템 간의 브리지 역할을 하는 프로그램이다
- 이건 APM이나 백엔드 통합 분석을 사용하려는 경우 필요하다고 하다. 난 APM을 사용하니까 설치해보자.
- 적혀진 명령어 대로 설치를 진행한다.
- 주의할 점은 첫 bash문의 비밀번호의 경우 Datadog의 계정 비밀번호가 아닌 시스템 비밀번호를 의미한다.
정상적으로 설치가 되었다면 상단 바 위에 뼈다귀 모양이 보인다. start 혹은 Open Web UI를 통해 들어간다.
- web UI에선 내가 설치한 Datadog Agent의 버전 및 정보조회가 가능하다.
APM 연결
APM : 서버 사이드 애플리케이션의 성능을 모니터링하고 최적화 (요청 처리시간, 에러 발생지점 추적)
1. dd-trace설치 : 분산 트레이싱 라이브러리로 애플리케이션 요청을 추적 및 분석이 가능함.
npm install dd-trace
2. instrumentation.ts를 /app위치에 생성 (src경로를 사용하는 경우 src/위치에 생성)
export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
const { tracer } = await import('dd-trace');
tracer.init({
logInjection: true,
env: 'dev',
service: 'nextjs-with-datadog',
});
tracer.use('next');
}
}
3. next.config.mjs에 다음코드 추가 후 로컬에서 실행
experimental: {
instrumentationHook: true,
serverComponentsExternalPackages: ["dd-trace"],
},
4. datadog으로 돌아가 infrastructure에서 실행된 것을 조회
클릭해서 APM의 상세 정보화면으로 들어가면 다음과 같이 활성화된 APM 서비스 목록을 볼 수 있다.
- 서비스이름은 내가 지정해준 서비스 이름으로 지정된다.
- Deployments, Error Tracking, SLOs, INCIDENTS같은 항목들을 조회 가능하다.
- 배포의 과정에서 문제, 안정성 검사, 오류 추적, 시스템 가용성(서비스 품질), 서비스 중단, 성능 저하를 관리 가능하다.
RUM 연결
RUM : 사용자 측면에서 웹 애플리케이션의 성능을 모니터링하고 분석 (웹 페이지 로딩 속도, 상호작용, 오류 추적)
1. Digital Experience - Real User Monitoring으로 이동 후 + New Application 선택
2. application 이름 지정, type지정 후, Create Application을 선택
- 나의 경우 Type은 JS를 지정하고 하단 옵션의 경우 모두 동의 했다.
- 생각보다 앱에 대한 지원을 많이하는 것을 볼 수 있다.
3. Instrument Your application 기입
- dd.env를 dev를 지정 (향후 프로덕션도 모니터링과의 분류, 개발환경에서 발생하는 트래픽과 혼동이 없도록)
4. 프로젝트로 돌아가 datadogRum 설치
npm install @datadog/browser-rum
5. 위에서 주어진 코드로 컴포넌트 생성 (클라이언트 컴포넌트 : 초기화 코드는 브라우저에서 실행)
- applicationId와 클라이언트 토큰의 경우 환경변수로 선언해 넣어주었다
//Rum.tsx
import { datadogRum } from '@datadog/browser-rum';
import { PropsWithChildren } from 'react';
datadogRum.init({
applicationId: process.env.NEXT_PUBLIC_APPLICATION_ID || '',
clientToken: process.env.NEXT_PUBLIC_CLIENT_TOKEN || '',
site: 'ap1.datadoghq.com',
service: 'nextjs-with-datalog',
env: 'dev',
sessionSampleRate: 100,
sessionReplaySampleRate: 20,
trackUserInteractions: true,
trackResources: true,
trackLongTasks: true,
defaultPrivacyLevel: 'mask-user-input',
});
const Rum = ({ children }: PropsWithChildren) => {
return <div>{children}</div>;
};
export default Rum;
6. layout.tsx에서 Rum.tsx 컴포넌트 삽입 후 실행하기
- 공식문서에선 layout에서 위의 Rum.tsxfmf를 바로 선언해 랩핑해서 사용하는데 나는 잘 안되서 컴포넌트를 따로 빼 Provider로 감싸는 것처럼 작성했다.
7. 이후 프로젝트 다시 실행 + 오류발생
- 프로젝트를 진행했지만 계속 Waiting for data.. 만 뜨고 화면이 변하질 않았다.
- 빌드 후 실행도 해보고 브라우저 강력 새로고침, 캐시삭제, 환경변수 NEXT_PUBLIC...으로 변경
- 해결
- 포기하고 다음날 일어나서 다시 키니까 정상적으로 동작되고 있었다.... ?
- Stack Overflow랑 issue찾아보니까 오래걸리는 사람도 많다해서 아마 내가 로딩이 될 때쯤에 바꾸고 실행하고 해서 그런게 아닐까 싶다.. 다른 분들은 프로젝트 다시 실행 후 최소 10분은 대기해보는걸 추천
8. 결과화면 : RUM이 성공적으로 연결되어 여러가지 정보를 볼 수 있었다.
RUM 조회 항목
- Largest Contentful Paint (LCP) P75 : 콘텐츠를 화면에 렌더링하는데 걸리는 시간(75번째 백분위수 값) 195.41ms: 매우 빠른 로딩 속도를 나타냄.
- Cumulative Layout Shift (CLS) P75 : 페이지 로딩 중 요소의 예기치 않은 레이아웃 변경 정도를 측정하는 값. 0: 레이아웃 변경이 없음을 의미(이상적 상태).
- Interaction to Next Paint (INP) P75 : 사용자 인터랙션(클릭 등) 후 다음 화면이 렌더링되기까지 걸리는 시간.40.25ms: 반응 속도가 매우 빠른 상태.
- Errors : 에러와 관련된 여러 데이터 및 지표로 총 에러 수, 에러 비율이 발생하는 url
- Deployments : 코드 배포 이벤트 수와 문제 식별
- User Analytics : 사용자의 탐색과 관련된 데이터 (페이지 방문 수, 이탈 지점, 전환율 등)
결론
생각보다 연결도 쉬운데다가 개발중에도 에러 추적이나, 데이터 송수신에 대한 모니터링이 가능하니 편할 것 같다.
추가로, 유저가 주기적으로 들어오는 서비스라면 정말 유용하게 사용할 수 있지 않을까 싶다. 기회가 되면 백엔드도 연결을 해 서비스 전체의 모니터링이 가능하게 만들어 보고 싶다.
다만 무료가 2주라는 기간과 가격이 비싸다는 점이 걸리지만 학생 계정이 승인이 난다면 Datadog에 대해서 좀 더 자세히 알아보면서 다시 연결해보려 한다.
'코딩 > Flex프로젝트' 카테고리의 다른 글
재테크 블로그 프로젝트 (8) - 리팩토링 [번들 사이즈 측정] (1) | 2024.12.28 |
---|---|
재테크 블로그 프로젝트 (7) Lighthouse 성능 측정 및 개선 (0) | 2024.11.24 |
재테크 블로그 프로젝트 (5) - Next.js의 API 사전 연결 (3) | 2024.11.20 |
재테크 블로그 프로젝트 (4) - 중간 개발 점검 NextJS 폴더구조 재구성 (4) | 2024.10.28 |
재테크 블로그 프로젝트 (3) - KIS(한국투자증권) API연동 (12) | 2024.10.03 |