본문 바로가기
  • Where there is a will there is a way.
개발/기타개발

도커 컨테이너 로깅

by 소확행개발자 2020. 2. 1.

 

컨테이너 내부에서 어떤 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요하다.

 

특히 쿠버네티스나 랜처 도커스왐등의 devops tool 에서 컨테이너 로깅은 굉장히 유용하게 사용된다.

 

애플리케이션 레벨에서 로그가 기록되도록 개발해 별도의 로깅 서비스를 쓸 수도 있지만 도커는 컨테이너의 표준 출력 과 에러 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공한다.

 

보통 도커의 로그를 확인할땐 다음과 같은 명령어를 작성한다.

 

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
25ed5cb9492d        redis:5.0.3         "docker-entrypoint.s…"   3 months ago        Up 36 hours         0.0.0.0:6379->6379/tcp   redis


docker logs 25ed5cb9492d

# ( number 확인하고 싶은 줄만 확인 가능 )
docker logs --tail {num} 25ed5cb9492d
 
 # ( 절대시간 기준으로 특정 시간이후에 로그를 확인할 수 있음 )
docker logs --since 147465979

 

기본적으로 위와 같은 컨테이너 로그는 JSON 형태로 도커 내부에 저장된다. 이 파일은 다음 경로에 컨테이너의 ID로 시작하는 파일명으로 저장된다. 

cat /var/lib/docker/container/${CONTAINER_ID}/${CONTAINER_ID}-json.log

 

어떠한 설정도 하지 않았다면 도커는 위와 같이 컨테이너 로그를 JSON 파일로 저장하지만 그 밖에도 각종 로깅 드라이버를 사용하게 설정해 컨테이너 로그를 수집할 수 있다.

 

여기서 문제점이 하나 있다 우리가 보통 도커를 띄우는 인스턴스에 자원은 한정적인데 서비스가 운영되면 그에 따라서 log가 지속적으로 쌓일것이다. 처음에는 문제가 없겠지만 시간이 지나면서 우리는 로그 용량 때문에 docker 가 먹통이된게 한두번이 아니다.

 

처음에 docker run 할 때 

 

docker run --log-opt max-size=10m --log-opt max-file=5 my-app:latest

 

다음과 같이 사용해도 되지만 

 

compose-yml 로 사용한다면 

 

my-app:
    image: my-app:latest
    logging:
        driver: "json-file"
        options:
            max-file: 5
            max-size: 10m

다음과 같이 제한할수도 있다.

'개발 > 기타개발' 카테고리의 다른 글

객체 지향 설계 5단계  (0) 2020.03.26
도커 컨테이너 자원 할당 제한  (0) 2020.02.01
리팩토링  (0) 2019.07.25
RESTFul Api 3장 HTTP를 이용한 인터랙션 설계  (0) 2019.03.05
RESTFul Api 2장 URI 식별자 설계  (0) 2019.03.03

댓글