반응형
해당 글에서는 PM2를 이해하고 특징에 대해서 상세히 알아봅니다.
💡 [참고] 아래의 Socket.io와 관련된 글들을 참고하시면 도움이 됩니다
분류 | 링크 |
Socket.io 기반 소켓 서버 구축 방법 -1 : 구성 요소 및 흐름 + React 기반 채팅 화면 구성 | https://adjh54.tistory.com/548 |
Socket.io 기반 소켓 서버 구축 방법 -2 : Room, Namespace 별 소켓 통신 방법 | https://adjh54.tistory.com/549 |
Socket.io 기반 소켓 서버 구축 방법 -3: PM2 클러스터링 + Redis 기반 분산 처리 | https://adjh54.tistory.com/567 |
PM2(Process Manager 2) 이해하고 주요 특징 알아보기 | https://adjh54.tistory.com/551 |
Github : Socket.io 기반 웹 소켓 소스코드 | https://github.com/adjh54ir/blog-codes/tree/main/node-wss-server |
Github : Socket.io를 이용하는 웹 클라이언트 소스코드(채팅) | https://github.com/adjh54ir/blog-codes/tree/main/react-chatting |
1) PM2(Process Manager 2)
💡 PM2(Process Manager 2)
- Node.js 기반의 애플리케이션의 프로세스 관리를 위한 ‘프로세스 관리자’를 의미합니다.
- 이는 내장된 로드 밸런서(Load Balancer)를 기반으로 애플리케이션이 계속 유지되고, 다운타임 (Downtime) 없이 다시 로드하여 시스템 관리를 용이하게 할 수 있습니다.
[ 더 알아보기 ]
💡 로드 밸런서(Load Balancer)
- 네트워크 트래픽을 여러 서버나 리소스에 분산시키는 장치 또는 소프트웨어를 의미합니다.
- PM2에서는 내장된 로드 밸런서의 클러스터 모드에서 작동하며 Node.js 애플리케이션의 여러 인스턴스 간에 요청을 분산시켜 성능을 최적화합니다.
- 또한, 로드 밸런서는(Round Robin) 방식을 기본적으로 사용하며 순차적으로 다음 가용 워커에게 전달하는 방식을 이용합니다.
💡 다운타임 (Downtime)
- 시스템, 서버 또는 네트워크가 계획되었거나 예기치 않게 작동하지 않는 시간을 의미합니다.
- 이는 서비스 중단, 유지보수, 업그레이드 또는 장애로 인해 발생할 수 있습니다.
- PM2의 무중단 재로드 기능은 애플리케이션을 업데이트하거나 재시작할 때 다운타임을 최소화하거나 없애는 데 도움을 줍니다. 이는 사용자에게 지속적인 서비스를 제공하고 비즈니스 연속성을 유지하는 데 중요합니다.
1. 라이브러리 설치
💡 라이브러리 설치
- pm2의 경우는 전역으로 설치하여 pm2 xxx 명령어를 수행할 수 있도록 global로 설치를 해줍니다.
# 전역으로 pm2 설치
$ npm install pm2 -g
2. 주요 명령어 요약
💡주요 명령어 요약
- PM2를 활용하기 위한 주요 명령어에 대해 알아봅니다.
명령어 | 분류 | 설명 |
pm2 list | 목록 | 실행 중인 애플리케이션의 목록을 표시합니다. |
pm2 update | 업데이트 | PM2를 최신 버전으로 업데이트합니다. |
pm2 status | 상태 | 실행 중인 애플리케이션의 상태를 표시합니다. |
pm2 startup | 상태 갱신 | 시스템 시작 시 PM2가 자동으로 시작되도록 설정합니다. |
pm2 save | 상태 저장 | 현재 실행 중인 애플리케이션의 상태를 저장합니다. |
pm2 resurrect | 상태 복원 | 저장된 애플리케이션 상태를 복원합니다. |
pm2 ecosystem | 설정 | 애플리케이션 설정을 위한 ecosystem.config.js 파일을 생성합니다. |
pm2 start <id | app_name> | 시작 | 특정 ID 또는 이름을 가진 애플리케이션을 시작합니다. |
pm2 start api.js -i <processes> | 시작 | 지정된 수의 인스턴스로 애플리케이션을 클러스터 모드로 시작합니다. |
pm2 stop <id | app_name> | 중지 | 특정 애플리케이션을 중지합니다. |
pm2 restart <id | app_name> | 재시작 | 특정 애플리케이션을 재시작합니다. |
pm2 reload all | 재시작 | 실행 중인 모든 애플리케이션을 무중단으로 재로드합니다. |
pm2 scale app +3 | 스케일링 | 실행 중인 애플리케이션의 인스턴스 수를 3개 증가시킵니다. |
pm2 kill | 삭제 | 실행중인 모든 프로세스를 종료하고 PM2 데몬을 중지합니다. |
pm2 delete <id | app_name> | 삭제 | 특정 애플리케이션을 프로세스 목록에서 삭제합니다. |
pm2 delete all | 삭제 | 모든 애플리케이션을 프로세스 목록에서 삭제합니다. |
pm2 reset <id | app_name> | 초기화 | 특정 애플리케이션의 메타 데이터를 초기화합니다. |
pm2 describe <id | app_name> | 목록 | 특정 애플리케이션의 상세 정보를 보여줍니다. |
pm2 set pm2:sysmonit true | 모니터링 | 시스템 모니터링을 활성화합니다. |
pm2 monit | 모니터링 | 실시간으로 애플리케이션의 상태를 모니터링합니다. |
pm2 monitor | 모니터링 | PM2에서 제공하는 웹 기반 대시보드를 실행합니다. 실시간 모니터링, 로그 관리, 알림 설정 등 고급 기능을 제공합니다. |
pm2 logs | 로그 | 애플리케이션의 실시간 로그를 표시합니다. |
pm2 flush | 로그 | 모든 애플리케이션의 로그를 비웁니다. |
3. PM2 실행 구성 요소
💡 PM2 실행 구성 요소
- PM2 내에서 인스턴스 별로 관리되는 항목에 대해 각각 요소들에 대해 확인해 봅니다.
# pm2의 상태를 확인합니다
$ pm2 status
# or
# pm2의 리스트를 확인합니다.
$ pm list
요소 | 설명 |
id | 프로세스의 고유 식별자 |
name | 애플리케이션의 이름 |
namespace | 애플리케이션의 네임스페이스 |
version | 애플리케이션의 버전 |
mode | 실행 모드 (예: fork, cluster) |
pid | 프로세스 ID |
uptime | 프로세스의 실행 시간 |
↺ | 재시작 횟수 |
status | 프로세스의 현재 상태 |
cpu | CPU 사용량 |
mem | 메모리 사용량 |
user | 프로세스를 실행한 사용자 |
watching | 파일 변경 감시 여부 |
4. PM2 구성요소
용어 | 설명 |
인스턴스(Instance) | 실행 중인 애플리케이션의 개별적인 복사본으로, 각각 독립적으로 작동합니다. |
클러스터 모드(Cluster Mode) | 여러 개의 워커 프로세스를 생성하여 부하를 분산시키는 PM2의 실행 모드입니다. |
프로세스(Process) | 실행 중인 프로그램의 인스턴스로, 메모리와 CPU 자원을 사용합니다. |
데몬 프로세스(Daemon Process) | 백그라운드에서 지속적으로 실행되며 다른 프로세스를 관리하는 프로세스입니다. |
마스터 프로세스(Master Process) | 클러스터 모드에서 워커 프로세스를 생성하고 관리하는 주 프로세스입니다. |
워커 프로세스(Worker Process) | 실제 애플리케이션 코드를 실행하는 자식 프로세스로, 마스터 프로세스에 의해 관리됩니다. |
에코시스템(Ecosystem) | PM2에서 여러 애플리케이션의 설정과 환경을 정의하는 구성 파일입니다. |
2) PM2 특징 -1: 프로세스 관리
💡 PM2 특징 -1: 프로세스 관리
- PM2에서는 PM2 데몬을 통해서 프로세스에게 명령을 수행하며, 각 프로세스에 대해 상태를 지속적으로 감시하는 ‘중앙 제어 시스템’ 역할을 수행하며, 필요시에는 자동으로 재시작을 수행합니다.
- 이 과정은 백그라운드에서 지속적으로 실행이 되며, 자동 재시작 기능을 제공하여 애플리케이션이 충돌하거나 시스템이 재부팅된 후에도 자동으로 시작이 됩니다.
1. 프로세스 관리 과정
💡프로세스 관리 과정
1. PM2 CLI → PM2 데몬
- Node.js 애플리케이션에서 PM2 CLI를 기반으로 PM2 데몬으로 생성, 삭제, 재시작 등의 명령을 수행시킵니다.
2. PM2 데몬 → 프로세스
- PM2 데몬에서는 프로스세들에게 명령을 내리고 프로세스의 상태를 지속적으로 감시하며, 필요시 자동으로 재시작을 수행합니다.
2. 프로세스 사용 예시
💡 프로세스 사용예시
- 아래와 같이 pm2 start namespaceApp.js라는 파일을 pm2를 이용하여 PM2 CLI를 통해서 데몬 프로세스에 명령을 실행하였습니다.
- 데몬은 namespaceApp.js라는 프로세스를 생성하고, 백그라운드에서 실행이 됩니다
# pm2를 기반으로 namespaceApp.js 파일의 프로세스를 생성합니다.
$ pm2 start namespaceApp.js
💡 사용예시
- 백그라운드에서 실행이 되는지 확인하기에 다시 한번 pm2 start로 해당 프로레스를 실행하면 이미 실행 중을 이야기하고 있습니다.
- 또한 pm2 list 명령어를 입력하면 이전에 실행한 namespaceApp.js 프로세스가 실행됨을 확인하였습니다.
# pm2를 기반으로 namespaceApp.js 파일의 프로세스를 생성합니다.
$ pm2 start namespaceApp.js
# pm2 실행 목록을 확인합니다.
$ pm2 list
💡 실제 IDE 툴을 종료하고 다시 실행하더라도 백그라운드로 실행되기에 역시 실행이 되어 있음을 확인할 수 있습니다.
# pm2 실행 목록을 확인합니다.
$ pm2 list
[ 더 알아보기 ]
💡 mode 중에서 fork 모드는 무슨 모드인가?
- 단일 인스턴스 애플리케이션에서 이용되며 멀티스레딩이 필요하지 않은 애플리케이션에서 사용되는 모드입니다.
- 클러스터 모드와 달리 각 인스턴스가 완전히 독립적이므로 메모리 사용량을 줄이고 프로세스 간 격리를 강화할 수 있습니다.
3) PM2 특징 -2 : 클러스터 모드(Cluster Mode)
💡 PM2 특징 -2 : 클러스터 모드(Cluster Mode)
- Node.js의 클러스터 모듈을 활용하여 여러 프로세스를 생성합니다. 이를 통해 멀티 코어 시스템에서 애플리케이션의 성능을 최적화할 수 있습니다.
- 단일 스레드인 Node.js에서 클러스터 모드를 사용하여 멀티 스레드와 유사한 성능을 낼 수 있게 해 줍니다.
1. nodemon(node montior)
💡 nodemon
- 노드가 실행하는 파일이 속한 디렉터리를 감시하고 있다가 파일이 수정되면 자동으로 노드 애플리케이션을 재시작하는 확장 모듈을 의미합니다.
- pm2를 이용하는 경우에는 개발 환경에서는 nodemon을 이용하며 이외의 환경에서 클러스터 모드가 아닌 pm2를 이용합니다.
[ 더 알아보기 ]
💡 개발 단계에서는 클러스터를 사용하지 않고 nodemon을 이용하는 이유는?
1. 간편성: nodemon은 설정이 간단하고 빠르게 적용할 수 있어 개발 과정에서 더 효율적입니다.
2. 리소스 효율성: 개발 중에는 일반적으로 많은 트래픽을 처리할 필요가 없어, 단일 프로세스로도 충분합니다.
3. 디버깅 용이성: 단일 프로세스에서 디버깅하는 것이 여러 프로세스를 동시에 디버깅하는 것보다 간단합니다.
4. 빠른 재시작: nodemon은 파일 변경을 감지하여 빠르게 재시작하므로, 개발 중 변경사항을 즉시 확인할 수 있습니다.
5. 메모리 사용: 개발 환경에서는 클러스터 모드를 사용할 때보다 메모리 사용량이 적습니다.
# nodemon을 개발 단계에서 사용하도록 설치합니다.
$ npm install nodemon --save-dev
# package.json 파일 내에 실행 명령어를 구성합니다.
"scripts": {
"start:loc": "nodemon app.js",
"start:dev": "pm2 start ./config/ecosystem.config.js --only app-dev",
},
💡 아래와 같이 nodemon을 통해서 개발 서버를 실행하였습니다.
2. 마스터 프로세스(Master Process)와 워커 프로세스(Worker Process)
💡 마스터 프로세스(Master Process)와 워커 프로세스(Worker Process)
- 클러스터 모드에서는 하나의 마스터 프로세스와 여러 개의 워커 프로세스가 실행이 됩니다.
- 마스터 프로세스(Master Process)는 클러스터 모드에서 중앙 관리 역할을 수행합니다. 이 프로세스는 워커 프로세스를 생성, 관리, 필요한 경우 재시작을 수행하는 역할을 합니다.
- 워커 프로세스(Worker Process)는 실제로 클라이언트의 요청을 처리하는 역할을 합니다. 각 워커 프로세스는 독립적으로 실행되며, 특정 요청을 처리하고 응답을 반환합니다.
- 이를 통해서 단일 스레드 모델의 Node.js 애플리케이션이 여러 CPU 코어를 활용할 수 있게 되어, 결과적으로 멀티 스레드와 유사항 성능을 얻을 수 있습니다.
- Node.js의 단일 스레드 특성을 유지하면서도, 시스템 리소스를 더 효율적으로 활용하여 멀티 스레드와 유사한 성능을 제공합니다.
[ 더 알아보기 ]
💡 데몬 프로세스랑 마스터 프로세스는 같은 것 아닌가?
- 마스터 프로세스의 경우는 클러스터 모드에서 워커 프로세스들을 관리하는 ‘중앙 프로세스’입니다.
- 즉, 워커 프로세스의 생성, 관리, 재시작을 담당합니다.
- 데몬 프로세스의 경우는 백그라운드에서 실행되는 프로세스입니다. 즉, 전체 Node.js 애플리케이션을 관리합니다.
- 결론적으로, 데몬 프로세스는 전체 Node.js 애플리케이션을 관리하는 한편, 마스터 프로세스는 클러스터 모드에서 워커 프로세스들을 관리하는 역할을 수행합니다.
3. 클러스터 모드 사용예시
💡 사용예시
- pm2로 실행할 때, roomApp.js 파일을 4개의 인스턴스로 엽니다.
# 클러스터 모드로 시작 (4개의 인스턴스)
$ pm2 start roomApp.js -i 4
[ 더 알아보기 ]
💡 인스턴스와 프로세스는 동일한 의미 같은데?
- PM2 컨텍스트에서 "인스턴스"와 "프로세스"는 실질적으로 같은 것을 가리키며, 둘 다 독립적으로 실행되는 애플리케이션의 복사본을 의미합니다.
4. 에코시스템(ecosystem)
💡 에코시스템(ecosystem)
- 클러스터 모드를 각각 파일 별로 관리하기 위한 설정 파일을 의미합니다. 이는 ecosystem.config.js 이름 형태로 관리가 됩니다.
- 이를 설정하면 PM2가 클러스터 모드로 애플리케이션을 실행하며, 여러 인스턴스를 생성하여 로드 밸런싱과 성능 향상을 제공합니다.
설정 옵션 | 설명 |
name | 애플리케이션의 이름 |
script | 실행할 애플리케이션의 진입점 파일 |
instances | 생성할 인스턴스 수 ("max"는 CPU 코어 수만큼 생성) |
exec_mode | "cluster"로 설정하여 클러스터 모드 활성화 |
watch | 파일 변경 감지 시 자동 재시작 (예: true) |
max_memory_restart | 메모리 제한 초과 시 재시작 (예: "1G") |
env | 환경 변수 설정 |
module.exports = {
apps: [{
name: "app",
script: "./app.js",
instances: 4,
exec_mode: "cluster"
}]
}
💡 사용예시 : ecosystem.config.js
- 아래와 같이 ecosystem.config.js 파일을 만들어서 클러스터 설정 파일을 구성하였습니다.
💡 사용예시 : package.json
- 아래와 같이 pm2 start를 할 때 ecosystem.config.js를 호출하도록 구성하였습니다.
"scripts": {
"start:loc": "nodemon app.js",
"start:dev": "pm2 start ./config/ecosystem.config.js",
},
💡 사용예시 : 터미널
- 위에서 지정한 npm start 명령어를 수행하면 지정한 설정 파일이 실행되면서 pm2 클러스터링이 됨을 확인하였습니다.
5. 에코시스템(ecosystem) 기반 환경 파일 분리
💡에코시스템(ecosystem) 기반 환경 파일 분리
- 각각의 로컬(loc), 개발(dev), 스테이징(stg), 운영(prd) 환경에서 각각 에코 시스템을 실행하여 환경을 분리합니다.
-이를 분리하게 되면 아래와 같은 이점이 있습니다.
- 각 환경에 맞는 최적화된 설정 적용
- 환경별 독립적인 스케일링 관리
- 환경 변수를 통한 설정 분리로 보안성 향상
- 스테이징 환경에서의 안전한 테스트 후 운영 환경 배포 가능
💡 로컬, 개발(loc), 스테이징(stg), 운영(prd) 환경에서의 각각 실행 파일을 수행하기 위한 package.json 스크립트입니다.
"scripts": {
"start:loc": "nodemon app.js",
"start:dev": "pm2 start ./config/ecosystem.config.js --only app-dev",
"start:stg": "pm2 start ./config/ecosystem.config.js --only app-stg",
"start:prd": "pm2 start ./config/ecosystem.config.js --only app-prd",
},
💡 각각에 맞는 실행 파일들이 수행됨을 확인하였습니다.
# 실행 명령어
# develop Start
$ npm run start:dev
# Staging Start
$ npm run start:stg
# Production Start
$ npm run start:prd
4) PM2 특징 -3 : 로드 밸런서 (Load Balancer)
💡 PM2 특징 -3 : 로드 밸런서 (Load Balancer)
- 로드 밸런서는 네트워크 트래픽을 여러 서버나 리소스에 분산시키는 장치 또는 소프트웨어를 의미합니다.
- PM2에서는 내장된 로드밸런서의 클러스터 모드에서 작동하며, Node.js 애플리케이션의 여러 인스턴스 간에 요청을 분산시켜 성능을 최적화합니다.
- 또한, 로드 밸런서는 라운드 로빈(Round Robin) 방식을 기본적으로 사용하며 순차적으로 다음 가용 워커에게 전달하는 방식을 이용합니다.
1. 라운드 로빈(Round Robin)
💡라운드 로빈(Round Robin)
- 작업 스케줄링과 부하 분산을 위해 널리 사용되는 알고리즘을 의미합니다. 이 방식을 사용하여 여러 프로세스에 요청을 균등하게 분배합니다.
1. 순차적 분배
- 요청이 들어오면 순서대로 각 프로세스에 하나씩 할당합니다.
- 예를 들어, 4개의 프로세스가 있다면 첫 번째 요청은 1번 프로세스, 두 번째 요청은 2번 프로세스... 이런 식으로 진행됩니다.
2. 공평성
- 모든 프로세스가 동일한 수의 요청을 처리하게 되므로, 부하가 균등하게 분산됩니다. 이는 리소스 활용을 최적화하고 특정 프로세스에 과부하가 걸리는 것을 방지합니다.
3. 단순성
- 구현이 간단하고 이해하기 쉬워 많은 시스템에서 기본적으로 사용됩니다. 복잡한 로직이나 상태 추적이 필요 없어 오버헤드가 적습니다.
4. 효율성
- 프로세스의 처리 능력이 비슷할 경우 매우 효율적으로 작동합니다. 각 프로세스가 비슷한 시간 동안 요청을 처리한다면 전체적인 시스템 성능이 향상됩니다.
2. 라운드 로빈 작동 방식
💡라운드 로빈 작동 방식
1. 요청 도착: 새로운 요청이 로드 밸런서에 도착합니다.
2. 프로세스 선택: 로드 밸런서는 현재 차례인 프로세스를 선택합니다.
3. 요청 전달: 선택된 프로세스에 요청을 전달합니다.
4. 포인터 이동: 다음 프로세스를 가리키도록 내부 포인터를 이동합니다.
5. 반복: 새로운 요청이 올 때마다 2-4 단계를 반복합니다.
3. 로드 밸런서 수행과정
💡로드 밸런서 수행과정
1. Node.js의 내장 클러스터 모듈을 활용하여 로드 밸런싱을 구현합니다.
2. 클러스터 모드를 활성화하면 여러 워커 프로세스가 생성됩니다.
3. 마스터 프로세스는 워커 프로세스에게 요청을 분배합니다.
4. 분배 과정에서는 라운드 로빈 알고리즘을 사용합니다.
5. 수행이 완료된 프로세스에 대해서는 다음 워커로 요청을 전달합니다.
6. 워커 프로세스가 종료되거나 새로운 워커가 추가될 때, PM2는 자동으로 로드 밸런싱을 조정합니다.
- 이러한 과정을 통해 PM2는 효율적인 로드 밸런싱을 수행하며, 애플리케이션의 성능과 안정성을 향상합니다.
5) PM2 특징 - 4: 모니터링(Monitoring)
💡 PM2 특징 - 4: 모니터링(Monitoring)
- 각 프로세스의 CPU 사용량, 메모리 사용량, 요청 처리량 등을 실시간으로 모니터링합니다. 이 정보는 CLI나 웹 인터페이스를 통해 확인할 수 있습니다.
1. CLI를 통한 모니터링
명령어 | 설명 |
pm2 list | 실행 중인 모든 프로세스의 상태를 표 형식으로 표시. 프로세스 ID, 이름, 모드, CPU/메모리 사용량, 업타임 등 정보 제공. |
pm2 monit | 대화형 터미널 기반 대시보드 제공. CPU 사용량, 메모리 사용량, 로그 등을 실시간으로 모니터링. 각 프로세스의 상세 정보와 실시간 로그 확인 가능. |
pm2 show [app-name] | 특정 애플리케이션의 상세 정보 표시. 프로세스 ID, 버전, 경로, 환경 변수, 메트릭 등 다양한 정보 제공. |
pm2 logs | 모든 애플리케이션의 로그를 실시간으로 확인. 특정 애플리케이션의 로그만 보려면 'pm2 logs [app-name]' 사용. |
1.1. pm2 list
💡pm2 list
- 실행 중인 모든 프로세스의 상태를 표 형태로 표시하는 명령어입니다.
# 프로세스 상태 조회
$ pm2 list
1.2. pm2 show [app-name]
💡 pm2 show [app-name]
- 실행 중인 특정 애플리케이션의 상세 정보를 표시하는 데 사용되는 명령어입니다.
- 이는 프로세스 프로세스 ID, 버전, 경로, 환경 변수, 메트릭 등 다양한 정보를 제공합니다.
# 실행중인 앱에 대해 상세 표시를 수행합니다.
$ pm2 show [app-name]
💡 아래와 같이 pm2 list를 통해서 실행 중인 프로세스와 앱 이름을 알 수 있습니다.
💡 아래와 같이 ‘app-staging’이라는 앱에 대한 상세를 확인하였을 때 아래와 같이 출력이 됩니다.
# 실행중인 앱에 대해 상세 표시를 수행합니다.
$ pm2 show [app-name]
1.3. pm2 monit
💡 pm2 monit
- 대화형 터미널 기반 대시보드를 제공하며 CPU 사용량, 메모리 사용량, 로그 등을 실시간으로 모니터링. 각 프로세스의 상세 정보와 실시간 로그 확인 가능합니다.
2. 웹 인터페이스를 통한 모니터링
💡 웹 인터페이스를 통한 모니터링
- PM2에서 제공하는 웹 기반 대시보드로, 실시간 모니터링, 로그 관리, 알림 설정 등 고급 기능을 제공합니다.
명령어 | 설명 |
pm2 monitor | PM2에서 제공하는 웹 기반 대시보드를 실행합니다. 실시간 모니터링, 로그 관리, 알림 설정 등 고급 기능을 제공합니다. |
# pm2 모니터링을 실행합니다
$ pm2 monitor
💡 아래와 같은 링크가 실행이 됩니다.
💡 PM2에 회원가입을 하게 되면 아래와 같이 출력이 됩니다.
💡 Create new buket을 누르고 새로운 버킷을 생성합니다.
💡 실행 명령어를 따라 수행합니다.
💡 터미널에서 이에 맞게 수행합니다.
💡 아래와 같이 연결이 잘됨을 확인하였습니다.
6) PM2 특징 -5 : 로그 관리
💡 PM2 특징 -5 : 로그 관리
- 각 프로세스의 표준 출력(stdout)과 표준 에러(stderr)를 파일로 저장합니다. 이를 통해 애플리케이션의 로그를 쉽게 관리하고 분석할 수 있습니다.
- 기본적으로 ~/.pm2/logs 디렉터리에 저장이 됩니다.
1. 로그 확인
명령어 | 설명 |
pm2 logs | 모든 애플리케이션의 로그 확인 |
pm2 logs [app-name] | 특정 애플리케이션의 로그 확인 |
pm2 logs [app-name] --raw | 특정 애플리케이션의 로그를 실시간으로 확인 (--raw 옵션으로 타임스탬프 제거) |
pm2 flush | 모든 애플리케이션의 로그 클리어 |
pm2 flush [app-name] | 특정 애플리케이션의 로그 클리어 |
1.1. pm2 logs
💡 pm2 logs
- 해당 명령어를 수행한 경우 아래와 같이 로그파일이 출력되었습니다.
💡 아래와 같이 경로를 따라서 가보면 로그파일들이 출력이 됨을 확인하였습니다.
2. 로그 로테이션
💡 로그 로테이션
- PM2에서는 로그 로테이션을 수행하여 로그 파일의 크기를 관리합니다.
# 로그 파일의 최대 크기를 10MB로 설정합니다. 로그 파일이 이 크기에 도달하면 새 파일이 생성됩니다.
$ pm2 set pm2:logrotate:max_size 10M
# 최대 30개의 로그 파일을 유지하도록 설정합니다. 이보다 오래된 로그 파일은 자동으로 삭제됩니다.
$ pm2 set pm2:logrotate:retain 30
# 오래된 로그 파일을 압축하도록 설정합니다. 이를 통해 디스크 공간을 절약할 수 있습니다.
$ pm2 set pm2:logrotate:compress true
3. 로그 클리어
💡 로그 클리어
- PM2에서 로그 클리어는 저장된 로그 파일을 비우는 작업입니다.
- 이 기능은 로그 파일이 너무 커져서 디스크 공간을 많이 차지하거나, 오래된 로그를 정리하고 싶을 때 유용합니다.
# 모든 애플리케이션의 로그 클리어
$ pm2 flush
# 특정 애플리케이션의 로그 클리어
$ pm2 flush [app-name]
4. 로그 포맷 설정
💡로그 포맷 설정
- PM2 설정 파일(ecosystem.config.js)에서 로그 포맷을 지정할 수 있습니다
module.exports = {
apps: [{
name: "app",
script: "./app.js",
log_date_format: "YYYY-MM-DD HH:mm Z"
}]
}
💡 [참고] 해당 구성 환경은 아래의 Repository 내에서 확인이 가능합니다.
오늘도 감사합니다. 😀
반응형
'Node > 이해하기' 카테고리의 다른 글
[Node] Socket.io 기반 소켓 서버 구축 방법 -3: PM2 클러스터링 + Redis 기반 분산 처리 (1) | 2024.09.15 |
---|---|
[Node] Socket.io 기반 소켓 서버 구축 방법 -2 : Room, Namespace 별 소켓 통신 방법 (1) | 2024.08.25 |
[Node] Socket.io 기반 소켓 서버 구축 방법 -1 : 구성 요소 및 흐름 + React 기반 채팅 화면 구성 (0) | 2024.08.18 |
[Node] Node 버전 상황에 따라 변경 방법 : 라이브러리 n 활용 (0) | 2024.04.22 |
[Node] 자바스크립트 패키지 매니져(npm/yarn) 이해하기 -1 (2) | 2022.06.26 |