nodejs express 서버를 AWS에서 무중단 서비스로 구동하기 위해 PM2를 사용중에 있습니다.
https://pm2.keymetrics.io/
npm install pm2 -g 명령어로 손쉽게 설치가 가능하며 pm2 list 로 현재 리스트업된 목록을 확인가능하고 pm2 monit 명령어로 구동중인 서버 로그를 확인도 가능합니다.
다만 로그를 하나씩 확인하는게 너무 불편하고 모니터링 하기엔 부적절하다는 판단하에 모니터링 툴을 알아보던 중 pm2 자체에서 제공해주는 모니터링 웹서비스가 있음을 확인해서 설치하게 되었습니다.
기존 스프링에서 진행했었던 프로메테우스와 Grafana를 그대로 차용해서 활용해보고 싶었으나 일단 빠르게 시작할 수 있는 PM2를 먼저 건드려 보게 되었습니다.
기본적으로 PM2 모니터링은 서비스는 무료입니다만 더 많은 기능을 제공해주는 프리미엄 구독 서비스도 존재합니다.
회원가입을 해야 사용이 가능한데 Github나 구글계정으로 쉽게 가입이 가능합니다. 전 구글 계정으로 가입하니 오류가 발생해 Github 계정으로 가입을 했습니다.
로그인하게 되면 Buckets 를 보여주는데 아무것도 없어서 비어 있습니다. Create New Bucket 를 통해 새로운 버킷을 만들어 줍니다. 이 버킷이 관리하고자 하는 하나의 대상 서버가 되는 것입니다.
버킷이 생성되면 해당 버킷을 서버에 설치하는 명령어에 대한 설명이 나옵니다.
기본적으로 Server, Docker, AWS 3종류의 타입으로 제공이 되며 저는 AWS 서비스이지만 Server 설치 명령어로 진행했습니다. 최대 4개의 서버를 무료로 연결할 수 있다고 합니다.
각 서비스에 설치하는 명령어입니다.
Server
1- Install PM2 Runtime on your server:
npm install -g pm2
file_copy
2- Then link PM2 to PM2.io:
pm2 link cglbwsff0i148f2 5q3fl9lhgo7ehze
file_copy
3- You're set. Now start a Node.js application:
pm2 start app.js
Docker
Edit your Dockerfile and replace the node by pm2-runtime:
RUN npm install pm2 -g
ENV PM2_PUBLIC_KEY 5q3fl9lhgo7ehze
ENV PM2_SECRET_KEY cglbwsff0i148f2
CMD ["pm2-runtime", "app.js"]
file_copy
Finally, start the container.
AWS
First, add pm2 as a dependency:
npm install pm2
file_copy
Edit your package.json:
"scripts": {
"prod:start": "pm2-runtime app.js"
}
file_copy
Set the env variables:
PM2_PUBLIC_KEY=5q3fl9lhgo7ehze
PM2_SECRET_KEY=cglbwsff0i148f2
file_copy
Finally, deploy your application.
AWS 에서 서비스되고 있어서 전 AWS 서버에 Server 설치 명령어로 진행을 했습니다.
설치하고 난 뒤에는 다음과 같이 운영중인 서비스를 웹상에서 확인할 수 있게 되었습니다.
기본적으로 Process Overview 를 통해 CPU, 메모리, Event Loop Lag, Http Latency 등의 정보를 보여줍니다.
Condensed Mode
심플한 정보만 보여주고 있습니다.
Extended Mode
좀 더 상세한 정보를 보여주고 있습니다.
다만 막 유용하게 쓸수 있는 정보들은 아닙니다. 서버 상태가 이정도구나 정도로 확인이 가능합니다.
그치만 좋은점도 있습니다.
실시간 로그 확인 : Show Logs 를 통해 콘솔에 뿌려지는 데이터를 웹상에서 실시간으로 확인이 가능
Restart Apps : 콘솔에 접근해서 pm2 restart 명령어를 넣지 않아도 웹을 통해 제어가 가능
추가로 Realtime metrics 와 Realtime Issue 가 있는데 아래는 metrics 정보입니다.
실시간 모니터링 Metrics를 그래프로 시각화 해서 보여주기 때문에 좀 더 잘 읽히지만 무료버전이어서 그런지 API 별로 모니터링하는 기능은 찾아볼 수 없었습니다.
구독서비스를 통해 유료버전으로 업그레이드 하게 되면 더 많은 기능을 사용할 수 있습니다. 년단위 구독 서비스는 20% 할인이 들어가 월 29$에 구독이 가능한데 서비스가 좀 더 커진다면 고려해볼 구독 금액이라 판단됩니다.
구독서비스에 API 모니터링 기능이 있는듯 한데 필요성을 느끼게 된다면 구독을 통해 서비스를 한번 써보고 후기를 남겨보도록 하겠습니다.