도커를 사용한 자바스크립트 앱의 로깅 및 모니터링 방법

도커는 애플리케이션을 컨테이너화하여 배포하고 관리하는 데 매우 유용한 도구입니다. 자바스크립트 앱을 도커 컨테이너로 실행할 때 로깅 및 모니터링을 적절하게 구성하여 앱의 상태를 실시간으로 파악하고 문제를 조기에 발견할 수 있습니다. 이번 글에서는 도커를 사용하여 자바스크립트 앱의 로깅 및 모니터링을 어떻게 설정할 수 있는지 알아보겠습니다.

1. 로깅

1.1. 로그 드라이버 설정

도커는 다양한 로그 드라이버를 제공하여 로그를 수집하고 저장할 수 있습니다. 자바스크립트 앱을 로깅하기 위해 로그 드라이버로 “json-file” 드라이버를 선택할 수 있습니다. 다음 명령을 사용하여 도커 데몬을 실행합니다.

$ docker daemon --log-driver json-file

1.2. 앱 로깅 설정

앱의 로그를 적절하게 출력하고 도커에서 제공하는 로그 드라이버로 전달하기 위해 로그 설정을 진행해야 합니다. 로깅 라이브러리 중에는 Winston, Bunyan, Pino 등이 있으며, 이 중에서 적합한 라이브러리를 선택하여 사용할 수 있습니다.

예를 들어, Winston을 사용하여 로그를 설정하는 방법은 다음과 같습니다.

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'your-app-name' },
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

logger.info('Hello, world!');

위 코드에서는 ‘info’ 레벨의 로그를 ‘combined.log’ 파일에 저장하며, ‘error’ 레벨의 로그는 ‘error.log’ 파일에 저장합니다. 필요에 따라 추가적인 설정을 구성할 수 있습니다.

1.3. 로그 확인

도커에서는 다음과 같이 로그를 확인할 수 있습니다.

$ docker logs [container-id]

위 명령을 실행하면 설정한 로그 드라이버에 따라서 컨테이너에서 출력된 로그를 확인할 수 있습니다.

2. 모니터링

2.1. 앱의 상태 체크

앱의 모니터링을 위해서는 앱의 상태를 체크하여 이상이 있는지 실시간으로 감지해야 합니다. 이를 위해 모니터링 라이브러리를 사용할 수 있습니다. 예를 들어, Node.js 앱을 모니터링 위해 “pm2”를 사용할 수 있습니다.

pm2를 설치하고 앱을 실행하면 pm2는 앱의 상태를 지속적으로 모니터링하고 필요한 경우 앱을 자동으로 재시작합니다. pm2를 사용하여 앱을 실행하는 방법은 다음과 같습니다.

$ pm2 start app.js

2.2. 리소스 모니터링

앱의 상태뿐만 아니라 서버의 리소스 사용량을 모니터링하여 성능 문제를 미리 감지할 수도 있습니다. 리소스 모니터링 도구로는 “Prometheus”와 “Grafana”를 함께 사용하여 서버의 CPU, 메모리, 디스크 등의 사용량을 실시간으로 확인할 수 있습니다.

Prometheus와 Grafana를 설치하고 설정하는 방법은 매우 복잡하므로 해당 도구들의 공식 문서를 참조하는 것이 좋습니다.

마치며

도커를 사용하여 자바스크립트 앱의 로깅 및 모니터링을 구성하는 방법에 대해 알아보았습니다. 로깅은 로그 드라이버 설정과 앱 로깅 구성으로 이루어지며, 모니터링은 앱의 상태 체크와 리소스 모니터링으로 이루어집니다. 앱의 로깅 및 모니터링 설정을 통해 앱의 문제를 조기에 발견하고 대응할 수 있습니다.

(#로그, #모니터링)