컨테이너 내부에서 어떤 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요하다.
특히 쿠버네티스나 랜처 도커스왐등의 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 |
댓글