이 포스팅은 위키북스의 시작하세요! 도커/쿠버네티스 를 보고 공부한 내용을 바탕으로 하고 있습니다. (문제가 된다면 비공개 처리하겠습니다😂😂)
애플리케이션 단에서 로그를 관리하도록 할 수 있지만 도커 자체에서도 컨테이너 내부에서 무슨일이 일어나는지를 표준 출력과 표준입력을 별도의 메타데이터 파일로 저장해두고 있습니다.
먼저 mysql 컨테이너를 하나 생성해봅니다.
$ docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7
그런다음, docker logs 명령을 써서 컨테이너 내부에 출력을 보겠습니다.
$ docker logs mysql
쭉 길게 나오는데 마지막에 보면 잘 실행된거 같기는 합니다.
이번에는 -e와 환경변수 값을 빼고 컨테이너를 생성해봅니다.
$ docker run -d --name no_passwd_mysql mysql:5.7
잘 생성된거 같지만 생성만 되고 실행은 안되어 있는 상태입니다. docker start로 실행해보려고 해도 계속 죽을겁니다. 이는 필요한 환경변수 설정을 하지 않았기 때문에 발생하는 에러입니다.
무엇때문에 발생하는 에러인지 확인하는 방법은 역시 docker logs
를 이용하면 됩니다.
기본적으로 위와 같은 로그는 JSON형태로 저장됩니다.
$ cat /var/lib/docker/containers/컨테이너_id/컨테이너_id-json.log
근데 나중에 로그 양이 쌓이다보면 공간이 부족해질 수 있습니다. 컨테이너 생성시 --log-opt 옵션으로 최대 크기를 지정할 수 있습니다. (책 참고)
로깅 드라이버는 Json만 있는게 아닙니다. syslog, fluentd, awslogs 등이 다양하게 존재하므로 애플리케이션 특징에 적합한 로깅 드라이버를 선택하면 됩니다.
리눅스 운영체제에서 메세지 생성에 관해서는
syslogd 데몬
에 의해서 총괄 관리 되고 있다.
/etc/syslog.conf
파일에는 “어디에서 메세지가 생성이 되면 어디에 메세지를 남겨라”라고 설정 되어 있다. 그럼, syslogd 데몬은 /etc/syslog.conf 파일에 설정된대로 생성된 메세지를 적당한 곳에 기록하게 된다.
출처 : https://itragdoll.tistory.com/79
컨테이너 생성해준다. syslogtest만 출력하고 종료되는 컨테이너입니다.
$ docker run -d --name syslog_container
--log-driver=syslog ubuntu:18.04 echo syslogtest
아래명령어를 입력하면 확인가능합니다.
$ journalctl -u docker.service
혹은, 다음과 같이 볼 수도 있습니다.
$ cat /var/log/syslog
로그 수집 아키텍처 중 대표적인 도구에는ELK
와Fluentd
가 있습니다.
사진 출처 : https://bcho.tistory.com/1115
fluentd는 위 그림처럼 애플리케이션, 시스템, DB 등 각지에서 생성된 로그를 모아서 가공해서 다양한 저장소에 분산 저장할 수 있는 도구가 되겠습니다. (정말 배울게 많네요..🤣🤣)
실습은 따로 진행하지 않겠습니다. 만약 제가 프로젝트하다가 사용하게 될 일이 생긴다면 그때 추가적으로 포스팅하겠습니다.
Amazon CloudWatch는 DevOps 엔지니어, 개발자, SRE(사이트 안정성 엔지니어) 및 IT 관리자를 위해 구축된모니터링 및 관찰 기능 서비스
입니다. CloudWatch는 애플리케이션을 모니터링하고, 시스템 전반의 성능 변경 사항에 대응하며, 리소스 사용률을 최적화하고, 운영 상태에 대한 통합된 보기를 확보하는 데 필요한 데이터와 실행 가능한 통찰력을 제공합니다.
출처 : https://aws.amazon.com/ko/cloudwatch/
도커를 AWS EC2에서 사용하고 있다면 다른 도구를 별도 설치할 필요없이 사용가능합니다.
자세한 내용은 이 역시 생략
도커 로그를 기록하는 방법은 여러가지가 있고 그중에 기본적인 두개는 실습을 통해 알아봤습니다. 나머지 두개는 보다 체계적으로 큰 규모에서 관리하고 싶다면 쓰면 될 거 같습니다.