도커를 활용한 자바스크립트 앱의 로그 수집 및 분석 방법

회사에서 개발한 자바스크립트 앱의 로그를 수집하고 분석하는 것은 중요한 과제입니다. 이를 위해 도커를 활용하여 효과적이고 유지보수가 용이한 방법을 소개하겠습니다.

로그 수집

1. 로그 수집을 위한 도커 컨테이너 구성

먼저, 로그 수집을 위한 도커 컨테이너를 구성해야 합니다. 아래의 docker-compose.yml 파일을 작성하여 필요한 컨테이너를 정의합니다.

version: '3'
services:
  app:
    build: .
    volumes:
      - ./logs:/app/logs
    restart: always
    environment:
      - NODE_ENV=production
    command: npm start
  log-collector:
    image: logstash:latest
    volumes:
      - ./logs:/logs
    restart: always
    depends_on:
      - app

위의 설정 파일은 자바스크립트 앱의 로그를 수집하기 위해 필요한 앱 컨테이너와 로그 수집을 담당하는 로그스태시(Logstash) 컨테이너를 구성합니다. 로그 파일은 호스트의 ./logs 디렉토리에 저장됩니다.

2. 앱 로그 설정

앱에서 로그를 수집하기 위해 로깅 라이브러리를 사용해야 합니다. 대표적으로 winston 라이브러리가 있습니다. winston을 사용하여 로그를 생성하고, JSON 형식으로 출력하도록 구성합니다.

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'myapp' },
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logs/app.log' })
  ],
});

logger.info('Hello, world!');
logger.warn('Warning!');
logger.error('Error!');

위의 예제에서는 app.log라는 파일에 로그를 저장하도록 설정했습니다.

로그 분석

1. Logstash 구성

로그 수집된 데이터를 분석하기 위해 Logstash를 사용합니다. Logstash는 다양한 데이터 소스에서 로그를 수집하고, 필터링 및 가공하여 다른 시스템에 전송할 수 있는 오픈 소스 도구입니다.

logstash.conf 파일을 생성하여 로그 수집 및 분석을 위한 파이프라인을 구성합니다.

input {
  file {
    path => "/logs/app.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  json {
    source => "message"
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "logs"
  }
  stdout {}
}

위의 설정에서는 input으로 로그 파일을 읽고, filter에서 JSON 형식의 로그를 파싱합니다. 그리고 output으로 Elasticsearch로 로그를 전송하고, 표준 출력에도 로그를 출력합니다.

2. Elasticsearch 설정

로그 데이터를 저장하고 검색하기 위해 Elasticsearch를 사용합니다. 아래의 docker-compose.yml 파일을 통해 Elasticsearch를 설정합니다.

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - discovery.type=single-node
volumes:
  esdata:

3. Kibana 설정

마지막으로 로그 데이터를 시각화하고 검색하기 위해 Kibana를 사용합니다. 아래의 docker-compose.yml 파일을 통해 Kibana를 설정합니다.

version: '3'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.3
    environment:
      - ELASTICSEARCH_URL=http://elasticsearch:9200
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch

위의 설정에서는 Kibana를 Elasticsearch와 연동하여 사용하며, 5601 포트로 접속할 수 있습니다.

결론

도커를 활용하여 자바스크립트 앱의 로그를 수집하고 분석하는 방법을 알아보았습니다. 이를 통해 로그 데이터의 효과적인 수집과 분석을 가능하게 하여 앱의 안정성과 성능을 개선할 수 있습니다.

더 많은 자세한 설정 및 활용 방법은 도커, 로그스태시, 엘라스틱서치, 키바나 공식 문서를 참고하시기 바랍니다.

[참고자료]

#javascript #logging #docker