IT정보사전

[Docker] 컨테이너 로그 파일 확인 및 설정하기 본문

IT정보

[Docker] 컨테이너 로그 파일 확인 및 설정하기

작은나무0530 2024. 5. 29. 08:41
728x90
반응형

안녕하세요~ 작은나무입니다!
오늘은 도커 컨테이너 로그 파일을 확인하고 설정하는 방법에 대해 알아보겠습니다.
하루하루 늘어가는 스토리지 공간을 보고 있으니 로그 파일을 빨리 정리해야 겠다는 생각이 들었습니다.

저는 EC2 인스턴스에서 Docker를 사용하고 있기 때문에 로그 확인을 위해 아래와 같이 확인 할 수 있습니다.
※ 아래 명령어를 통해 실시간 로그를 중지하려면 Ctrl + C를 눌러주세요. 

~$ docker logs -f <컨테이너명>

위의 명령어를 통해 도커 컨테이너 로그 파일을 확인할 수 있지만, 일반적으로 서비스 운영시 로그 파일을 보관 기간을 설정해서 관리하기 때문에 컨테이너 로그 파일을 관리하는 방법에 대해 알아 보겠습니다.

도커에는 기본적으로 json-file 로그 드라이버를 사용하는대요~
json-file 드라이버는 로그를 JSON 형식의 파일로 저장하고, 컨테이너를 기준으로 별도의 파일에 저장됩니다.
컨테이너를 기준으로 로그 파일이 저장되고 있어 관리해 주지 않을 경우 서비스 저장 공간이 부족하게 될 수 있으니 필수적으로 설정하는 것이 좋습니다.

도커 로그 파일은 /var/lib/docker/containers/ 경로에 저장되어 있고 접근하려면 root 계정이 필요합니다.
※ AWS EC2 인스턴스 root 접속 및 비밀번호 설정은 아래 포스팅에서 확인해주세요~

 

[AWS] EC2 인스턴스 root 접속, 비밀번호 설정 방법

안녕하세요~ 작은나무입니다!AWS EC2 인스턴스에 접근하기 위해서 Ubuntu가 아닌 root 비밀번호 설정 방법과 접속방법에 대해 알아보겠습니다.EC2 인스턴스 Ubuntu에 Docker Container를 실행하면 삭제되기

miniweb4u.tistory.com


1. Logrotate 설정하기
기본적으로 Linux에 설치되어 있고 로그 파일을 일정한 주기로 백업 또는 삭제 할 수 있는 기능을 제공합니다.
logrotate는 /etc/logrotate.d에서 설정할 수 있습니다.

vi /etc/logrotate.d/docker

/ect/logrotate.d/docker를 편집하고 아래와 같이 설정합니다.

/var/lib/docker/containers/*/*.log {
  copytruncate
  daily
  rotate 5
  compress
  missingok
}

# copytruncate : 현재 로그 파일 복사 후 원본 로그파일 크기 0으로 생성
# daily/weekly/monthly/yearly : 매일/매주/매달/매년 실행
# rotate [숫자] : 로그 파일의 개수가 [숫자]이상이면 오래된 로그 파일 삭제
# create 0640 user group : create [권한][유저][그룹]
# compress : 로그 파일을 gzip 형태로 압축
# dateext : 로그 파일에 확장자 추가(Default : YYYYMMDD)
# dateformat [date] : YYYYMMDD 형식이 아닌 다른 형식으로 사용시 지정
# extention [확장자명] : 해당 확장자로 생성
# missingok : 로그 파일이 없어도 에러 처리하지 않음
# postrotate / endscript : 실행 후 스트립트 파일 실행
# maxage [숫자] : 로그 파일 크기가 [숫자] 이상일 경우
# size : 로그 파일이 설정 사이즈 이상일 때 (KB:k / MB:m / GB:g)

daily 설정해서 기다려야 하지만 수동으로 테스트 진행을 아래와 같이 합니다.

~$ logrotate -d -f /etc/logrotate.d/docker
# -d : 디버그 모드 실행이라 실행은 되나 실제 rotation 되지 않음
# -f : logrotate를 갈제 실행하는 force 옵션


2. docker run 명령어 사용
이전 포스팅에서는 docker run 명령어에 사용 포트와 이름을 지정해서 사용했는대요
아래와 같은 옵션을 지정해서 컨테이너를 구성할 수 있습니다.

docker run -d \
  -p 80:80 \
  -e TZ=Aisa/Seoul \
  --name dockertest smalltree0530/smalltree:latest \
  --log-driver json-file \
  --log-opt max-size=10k \
  --log-opt max-file=3 \
}


3. Logging Driver 설정하기 (도커 데몬)

JSON 형태로 도커 내부에 저장되고 있어서 별도 설정을 하지 않을 경우 로그 파일 데이터가 무한정 커질 수 있어서 도커 데몬 설정에 --log-opts 옵션을 사용해 로그 파일 크기를 조절합니다.

도커 데몬을 구성하면 생성되는 모든 컨테이너에 적용됩니다.
/etc/docker에서 daemon.json 설정 파일을 수정합니다. (파일이 없다면 생성합니다.)

~$ sudo vi /etc/docker/daemon.json

아래와 같이 추가하고 도커를 재시작하면 신규로 생성되는 컨테이너에 적용됩니다.
※ 기존에 생성된 컨테이너에는 적용되지 않습니다.

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

# max-size : 로그 파일 하나의 최대 크기
# max-file : 로그 파일의 개수
# 해당 설정 크기 또는 개수를 초과하면 오래된 파일을 삭제하고 신규 생성

도커 재시작은 아래 명령어를 이용해서 진행합니다.

~$ sudo systemctl restart docker


4. 로그 파일 이외의 디스크 공간 정리

현재 사용하고 있는 EC2 인스턴스의 디스크 용량을 확인합니다.

~$ df -h

Linux를 사용시에 apt-get을 이용해 패키지를 설치하게 되는대요~
이때 설치하는 패키지가 다운로드 되고 /var/cache/apt/archives에 저장이 되는대 이 패키지 파일들을 정리합니다.

~$ sudo apt-get clean

불필요한 시스템 로그와 캐시를 정리합니다.

~$ sudo journalctl --vacuum-time=1d
# 1d : 1일 이전의 로그를 삭제 (day/week/month 등 설정 가능)

불필요한 패키지와 종석성을 정리합니다.

~$ sudo apt-get autoremove

일부 디스크 용량을 확보할 수 있습니다.

※ 사용하지 않는 도커 용량 줄이기
위와 같이 로그 파일에 대한 설정과 더불어 사용하지 않는 도커의 용량을 줄이는 것도 좋은 방법입니다.
도커 시스템의 사용하지 않는 리소스를 정리하는 명령어를 실행합니다.

~$ docker system prune -a -f
# -a : 사용하지 않는 모든 이미지를 포함
# -f : 확인 메시지없이 강제로 삭제

※ 사용하고 있는 이미지나 컨테이너가 있을 수 있으니 주의가 필요합니다.

지금까지 도커 컨테이너 로그 파일을 확인하고 설정하는 방법에 대해 알아봤습니다.
감사합니다.

728x90
반응형
그리드형
Comments