티스토리 뷰

도커를 이용해서 gitlab 서버를 관리하였는데 어느날 되지 않아 확인해보니 Disk 사용 공간이

부족 하였다.

docker 관련 파일들이 모인 경로에 여유 공간이 부족하였는데,

gitlab 컨테이너 volume은 용량이 넉넉한 Disk 쪽으로 mount되어 있는데 이해가 가지 않았다.. 🤔

대체 어떤 데이터가 쌓이고 있었을까? 그건 바로 컨테이너 로그 였다.

Container log 확인

1차 적으로 df -hdu -sh * 등의 명령어를 통해 disk full이 발생한 경로들을 추적한 결과

/var/lib/docker/containers 경로 용량이 컸는데, container 쪽에 왜이렇게 용량이 큰가를 보았더니 아래와 같이 log 파일이 발견 되었다.😲

[root@localhost dd4aa4968f4ac1b28b0ecad23a9db9a1ed1c0e74c7459fb9af6786451b6db9e8]# ls
checkpoints  config.v2.json  dd4aa4968f4ac1b28b0ecad23a9db9a1ed1c0e74c7459fb9af6786451b6db9e8-json.log  hostconfig.json  hostname  hosts  mounts  resolv.conf  resolv.conf.hash

해당 log 파일 용량이 28G가 넘어있는것을 보고 log 삭제를 진행하였고,

저장 공간의 여유가 생기고 서버는 정상 동작을 하게 되었다.

근본적으로 컨테이너 로그 관리를 할 필요성을 느끼고 Docker 공식 사이트에서 로그 관련 설정을 뒤져보았다.

logging driver

모든 컨테이너에서는 log를 기본적으로 남기는데 이러한 설정을 logging driver를 통해서 할수 있었다. 기본 logging driver는 json 형식으로 되어 있으며 여러 유형 목록이 존재하였다.

참조: https://docs.docker.com/config/containers/logging/configure/

logging driver를 통해 log 관련 설정을 진행 하였다.

default logging driver 설정

도커 데몬이 실행될 때 기본적으로 사용할 환경설정 파일을 읽는데, 기본 로드될 파일은 아래와 같다.

/etc/docker/daemon.json

해당 경로로 가보면 설정 파일이 존재하진 않고 기본 설정을 할려면 해당 설정파일을 만들어주어야 했다.

환경설정 파일 생성

vi /etc/docker/daemon.json

daemon.json 내용

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

적용 시기

해당 환경설정 파일은 기존 컨테이너에 바로 적용되지 않고 신규로 생성한 컨테이너에 적용이 된다.

그렇기 때문에 컨테이너는 재생성해서 log 설정을 적용해주어야 했다.

마무리

로그 떄문에 disk full 이슈가 간간히 발생하였는데, 이 기회를 통해 docker 뿐만 아니라 application 단에서도 log 관리 정책을 잘 수립하여야 겠다는 생각이 든다.

참조

https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

댓글