pm2-logrotate

PM2

PM2(Process Manager 2)는 Node.js 애플리케이션을 운영 환경에서 안정적으로 실행하고 관리해주는 프로세스 매니저입니다.

서버가 재부팅되거나 JavaScript 특성상 에러로 인해 애플리케이션이 종료되더라도 자동으로 재시작해주며, 백그라운드 실행과 프로세스 모니터링 등 다양한 운영 편의 기능을 제공합니다.

PM2에서 제공해주는 기본 로깅 기능은 별도의 설정 없이도 표준 출력(stdout) 과 에러(stderr) 를 파일로 저장해 주기 때문에

별도의 로깅 라이브러리 설정 없이도 pm2 logspm2 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 * * *

참조