pm2-logrotate
PM2
PM2(Process Manager 2)는 Node.js 애플리케이션을 운영 환경에서 안정적으로 실행하고 관리해주는 프로세스 매니저입니다.
서버가 재부팅되거나 JavaScript 특성상 에러로 인해 애플리케이션이 종료되더라도 자동으로 재시작해주며, 백그라운드 실행과 프로세스 모니터링 등 다양한 운영 편의 기능을 제공합니다.
PM2에서 제공해주는 기본 로깅 기능은 별도의 설정 없이도 표준 출력(stdout) 과 에러(stderr) 를 파일로 저장해 주기 때문에
별도의 로깅 라이브러리 설정 없이도 pm2 logs 나 pm2 monit 혹은 생성된 로그파일을 통해서 백그라운드에서 실행중인 프로세스의 로그를 확인 할 수 있습니다.
하지만 로그 파일의 크기와 개수에 대한 관리가 자동으로 이루어지지 않는다는 점 때문에 용량이 무한히 증가할 수 있습니다.
pm2-logrotate
npm isntall pm2 -g
pm2 install pm2-logrotate
pm2 conf
pm2-logrotate는 PM2에서 생성되는 로그 파일을 자동으로 관리해주는 모듈입니다.
위에서 언급한것처럼 로그파일이 관리되지 않아 지속적으로 용량이 증가하는 문제가 있어 로그 저장 옵션을 끄고 로깅 라이브러리를 사용하거나 pm2-logrotate 를 설치합니다.
로그 비활성화
bash
pm2 (생략) -o "/dev/null" -e "/dev/null"
ecosystem.config.js
module.exports = {
apps : [{
(생략)
out_file: "/dev/null",
error_file: "/dev/null"
}]
};
Configure
pm2 set pm2-logrotate:<param> <value>
# ex) pm2 set pm2-logrotate:max_size 10M
-
max_size (Default:
10M)
로그 파일 크기가 설정한 값을 초과하면 로그를 회전합니다.
단위:K,M,G -
retain (Default:
30)
유지할 회전 로그 파일의 최대 개수입니다.
설정된 개수를 초과하면 오래된 로그부터 삭제됩니다. -
compress (Default:
false)
로그 회전 시 gzip 압축 여부를 설정합니다. -
dateFormat (Default:
YYYY-MM-DD_HH-mm-ss)
회전된 로그 파일 이름에 사용되는 날짜 포맷입니다. -
rotateModule (Default:
true)
PM2 모듈의 로그도 함께 회전할지 여부를 설정합니다. -
workerInterval (Default:
30)
로그 파일 크기를 확인하는 주기(초 단위)입니다.
최소값:1 -
rotateInterval (Default:
0 0 * * *)
크론 표현식을 사용해 강제로 로그 회전을 수행합니다.
기본값은 매일 자정에 실행됩니다. -
TZ (Default: system time)
로그 파일 이름에 적용될 타임존을 설정합니다.
Cron Expression (rotateInterval)
rotateInterval 옵션은 크론(Cron) 표현식을 사용해 특정 시점에 로그 회전을 강제로 실행합니다. pm2-logrotate는 node-schedule 형식의 크론 표현식을 사용합니다.
크론 표현식은 시간 기반 작업을 예약하기 위한 형식으로, 각 위치의 값은 다음 의미를 가집니다.
- 분 (0–59)
- 시 (0–23)
- 일 (1–31)
- 월 (1–12)
- 요일 (0–7, 0 또는 7은 일요일)
필요에 따라 초(second) 필드를 포함한 확장 형식도 사용할 수 있으며, 이 경우 가장 앞자리에 초 값이 추가됩니다.
예시
- 매일 자정에 실행: 0 0 * * *
- 매시간 정각에 실행: 0 * * * *
- 10분마다 실행: */10 * * * *
- 매일 새벽 3시에 실행: 0 3 * * *