일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- docker
- osi7layer
- OSI7계층
- 트레바리
- 스노트
- coding test
- Linux
- MySQL
- 컨테이너
- db
- database
- Routing
- snort
- 리눅스
- 스노트 룰
- 라우팅
- 라우터
- Container
- 데이터베이스
- programmers
- TDD
- Snort Rule
- 라우팅프로토콜
- 코딩테스트
- Cosmos
- 코딩 테스트
- Router
- 도커
- Python
- Today
- Total
Simple is IT, 누구나 보고 누구나 깨닫는 IT
Docker Container Logging_logs(1/4) 본문
Container Logging
컨테이너 내부에서 어떤 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 굉장히 중요해요.
그래서 Application Level에서 로그가 기록되도록 개발해 별도의 로깅 서비스를 쓸 수도 있습니다.
But! 도커는 컨테이너의 표준 출력(StdOut)과 에러(StdErr) 로그를 별도의 메타데이터 파일로 저장하고 확인하는 명령어를 제공하죠.
mysql 이미지의 컨테이너를 생성해 간단한 로그를 남겨볼게요.
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORd=password \
mysql
mysql 컨테이너는 Foreground 상태로 실행되므로 -d 옵션을 사용해 background 상태로 컨테이너를 생성했어요.
이에 대해 우리는 Application이 잘 동작하는지, 어떻게 동작하는지를 궁금해 할 필요가 있죠.
docker logs 명령은 우리가 동작에 대한 궁금증을 해소할 수 있도록 도와줍니다.
# docker logs mysql
2020-07-18 04:51:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
2020-07-18 04:51:37+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-07-18 04:51:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.31-1debian10 started.
docker logs 명령을 통해 우리는 컨테이너 내부에서 출력하는 내용들을 볼 수 있답니다.
한 번, 우리는 -e 옵션을 제외한 방법으로 mysql 컨테이너를 생성해볼게요.
docker run -d \
--name nopw_mysql \
mysql
이상하네요! 컨테이너가 정상적으로 동작하지 않는군요.
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2f57ef971ce mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Exited (1) 6 seconds ago nopw_mysql
컨테이너가 정상적으로 동작하지 않는 위 상황에서 우리는 attach 명령으로 접속할 수도 없고 참 난감합니다.
이때에도 docker logs 명령을 통해서 무슨 문제가 있는지 확인해 볼 수 있어요.
# docker logs nopw_mysql
.....
2020-07-18 05:05:15+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
로그를 통해 우리는 mysql 컨테이너에 대한 password 값이 지정되지 않았다는 것을 알았어요.
로그가 너무 많아 읽기 힘들다면 --tail 옵션으로 출력하는 로그 줄 수를 조절할 수 있습니다.
# docker logs --tail 2 nopw_mysql
2020-07-18 05:05:15+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
추가로, 아래와 같은 옵션들이 있으니 적절한상황에서 효율적으로 사용하길 바랍니다!
-t : 타임스태프 표시
-f : 실시간으로 출력되는 로그들을 스트림으로 확인
--since : 유닉스 시간을 입력해 특정 시간 이후의 로그 확인
로그 데이터 포맷
기본적으로 컨테이너 로그들은 JSON 형태로 도커 내부에 저장됩니다!
이 파일들은 다음 경로에 컨테이너 ID로 시작하는 파일명으로 저장돼죠. cat, vi 등의 명령으로 json 형태인 것을 확인할 수 있습니다.
/var/lib/docker/containers/${CONTAINER_ID}/${CONTAINER_ID}-json.log
컨테이너 내부의 출력이 너무 많은 상태로 방치되면 json 파일의 크기가 계속해서 커지는 것은 당연한 일입니다. 이 것이 지속되다보면 호스트의 저장 공간을 엄청 많이 차지하게 돼죠.
이 상황을 방지하기 위해 --log-opt 옵션으로 컨테이너 json 로그 파일의 최대 크기를 지정할 수 있어요.
docker run -d \
--log-opt max-size=10k --log-opt max-file=3 \
--name mysql \
mysql
max-size : log file의 크기
max-file : log file의 개수
'Simple is IT > Cloud & Container' 카테고리의 다른 글
Docker Container Logging_fluentd(3/4) (3) | 2020.07.18 |
---|---|
Docker Container Logging_syslog(2/4) (0) | 2020.07.18 |
도커 볼륨으로 효율적인, Stateless한 Container 운영을 해보자! (0) | 2020.07.16 |
S3 WEB Hosting (0) | 2020.07.09 |
AWS S3는 무엇일까? (0) | 2020.07.09 |