기존의 로그파일은 에러 및 여러 출력되는 정보들이 하나의 파일에서 관리되었다면 Docker는 출력(stdOut)과 에러(error) 로그를 별도의 메타데이터 파일로 저장한다. Docker는 다양한 형태로 로그를 저장할 수 있는데 한 번 알아보겠다.
1. json-file 로그
어떠한 설정도 하지 않는다면 docker는 기본적으로 JSON형태로 도커 내부에 저장된다.
sudo docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:5.7
sudo docker logs mysql
컨테이너 생성 후 로그를 확인할 수 있다.
에러 낸 후 로그 찾기
sudo docker run -d \
--name nopassword_mysql \
mysql:5.7
-e 옵션에 패스워드를 입력하지 않고 mysql 컨테이너를 생성하면 실행이 되지 않는다.
sudo docker logs nopassword_mysql
로그를 찾아보면 그 이유를 알 수 있는데 mysql을 실행할 때 필요한 환경변수가 없다는 에러가 출력된다.
--tail 옵션을 사용하여 마지막줄부터 원하는 줄까지 출력이 가능하다.
sudo docker logs --tail 3 nopassword_mysql
--since 옵션에 유닉스 시간 입력하여 특정 시간 이후에 시간 확인이 가능하다.
cat /var/lib/docker/container/${CONTAINER_ID}/${CONTAINER_ID}-json.log
해당 명령어를 통해 로그를 확인할 수 있다.
sudo docker run -it \
--log-opt max-size=10k --log-opt max-file=3 \
--name log-test ubuntu:14.04
로그파일의 최대 크기와 파일 개수를 정하는 것 또한 가능하다.
2. syslog 로그
유닉스 계열에서 로그를 수집하는 표준 중 하나이다.
sudo docker run -d --name syslog_container \
--log-driver=syslog \
ubuntu:14.04 \
echo syslogtest
기본적으로 locahost에 로그를 저장하기 때문에 그 위치를 알아야 로그를 확인할 수 있다.
journalctl -u docker.service
해당 명령어로 syslog를 확인할 수 있다.
syslog를 원격 서버에 설치하여 관리하는 방법도 존재하며, 로그 옵션을 추가하여 로그 정보를 원격 서버로 보낼 수 있다.
옵션값에 rsylog를 사용하여 중앙 컨테이너로 로그를 저장할 수 있다.
3. fluentd 로깅
fluentd는 오픈소스 도구이다. fluentd는 JSON형태이기 때문에 쉽게 사용이 가능하고 수집되는 데이터를 AWS S3, HDFS(Hadoop Distributed File System), MongoDB 등 다양한 저장소에 저장이 가능하다.
도커서버에서 로그를 수집하면 fluentd서버에 보내며 fluentd는 저장소에 로그를 저장하는 방식이다.
'Docker' 카테고리의 다른 글
8.Docker 도커 데몬 인증 키 적용 (0) | 2024.07.18 |
---|---|
7. Docker 컨테이너 자원 정의 (0) | 2024.07.17 |
5. Docker 네트워크 (0) | 2024.07.09 |
4. Docker 볼륨 (0) | 2024.07.05 |
3. Docker 컨테이너 애플리케이션 (1) | 2024.07.02 |