개발

도커 컨테이너 로그 설정하기

모달조아 2023. 6. 14. 01:55

개요

EC2 서버에 띄운 컨테이너의 로그를 확인해볼 일이 있어 아래 명령어를 통해 로그를 확인했다.

docker logs [컨테이너 명]

지난 로그들을 확인하다가 문득 로그 파일에 쌓여 있는 로그들이 굉장히 많다고 느꼈고, 싸한 느낌과 함께 도커 컨테이너의 기본 로그 설정을 찾아보았다.

 

도커 컨테이너의 기본 로깅 드라이버

도커 공식 문서에 따르면 도커 컨테이너에서 발생하는 표준 출력이나 표준 에러를 캡쳐하여 json 형태로 보여주는 json-file 로깅 드라이버를 사용한다.

근데 이 json-file 로깅 드라이버가 기본적으로 최대 용량이 정해져있지 않기에 만약 로그가 많이 남는 서비스라면 저장 공간이 부족해지는 일이 발생할 수도 있을 것이다.

그렇다면, 이 문제를 어떻게 해결할 수 있는지 한번 살펴보자.

 

로깅 설정 방법

1. 도커 데몬 설정

도커 데몬 설정으로 특정 로깅 드라이버를 설정하면 새롭게 생성되고 실행되는 컨테이너에 설정한 로깅 드라이버가 설정된다.

sudo vi /etc/docker/daemon.json

위 명령어로 도커 데몬 설정파일에 들어가서, 아래와 같이 추가해주자.

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

하나씩 살펴보자면, log-driver 로 무엇을 쓸지, 로그 옵션으로 하나의 파일의 최대 용량을 10m, 그리고 최대 파일 갯수를 3개로 지정했다. 파일이 3개가 넘어가게 된다면, 오래된 파일을 삭제하고 새로 생성한다.

 

2. docker-compose 파일에 설정

docker-compose 파일에서도 아래와 같이 작성할 수 있다.

version: '3'
services:
  db:
    container_name: seat-view-db
    image: mysql:8.0.32
    ports:
      - "3306:3306"
    env_file:
      - ../env/docker-compose.env
    environment:
      TZ: Asia/Seoul
    volumes:
      - seat-view:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
      - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
    command: bash -c "chmod 644 /etc/mysql/my.cnf && docker-entrypoint.sh mysqld"
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: always

volumes:
  seat-view:

 

3. 명령어로 설정

docker run 으로 컨테이너 실행 시에 아래와 같이 옵션으로 설정할 수 있다.

docker run -d \
  --name seat-view-db \
  -p 3306:3306 \
  --env-file ../env/docker-compose.env \
  -e TZ=Asia/Seoul \
  -v seat-view:/var/lib/mysql \
  -v ./my.cnf:/etc/mysql/my.cnf \
  -v ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  --restart always \
  mysql:8.0.32 \
  bash -c "chmod 644 /etc/mysql/my.cnf && docker-entrypoint.sh mysqld"

 

 

마무리

별도로 로깅을 관리하고 있다면 로깅 드라이버 옵션으로 none 을 사용하여도 무방하다.

그렇지 않다면, 무제한으로 늘어나는 로깅 파일을 위 방식으로 관리해보자.