컨테이너 로깅

1,087 단어·3 분·원문(.md)

json-file 로그 사용하기 #

애플리케이션 단에서 로그를 관리하도록 할 수 있지만 도커 자체에서도 컨테이너 내부에서 무슨일이 일어나는지를 표준 출력과 표준 입력을 별도의 메타 데이터 파일로 저장해두고 있다.

docker logs(StdOut) #

먼저 mysql 컨테이너를 하나 생성해보겠다.

$ docekr run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7

그런 다음, docker logs 명령을 써서 컨테이너 내부에 출력을 보내겠다.

$ docker logs mysql

쭉 길게 나오는데 마지막에 보면 잘 실행된거 같다.

docker logs(StdErr) #

이번에는 -e와 환경변수 값을 빼고 컨테이너를 생성해보겠다.

$ docker run -d --name no_password_mysql mysql:5.7

잘 생성된거 같지만 생성만 되고 실행은 안되어 있다. docker start로 실행해보려고 해도 계속 죽을 것이다.

이는 필요한 환경변수 설정을 하지 않았기 때문에 발생하는 에러다.

무엇때문에 발생하는 에러인지 확인하는 방법도 역시 docker logs 를 이용하면 된다.

docker log 파일 위치 #

기본적으로 위와 같은 로그는 JSON 형태로 저장된다.

cat /var/lib/docker/containers/컨테이너_id/컨테이너_id-json.log

근데 나중에 로그 양이 쌓이다보면 공간이 부족해질 수 있다.
컨테이너 생성시 --log-opt 옵션으로 최대 크기를 지정할 수 있다.

syslog 로그 #

로깅 드라이버는 json에만 있는 것이 아니다. syslog, fluentd, awslogs등 다양하게 존재하므로 애플리케이션 특징에 적합한 로깅 드라이버를 선택하면 된다.

syslog #

리눅스 운영체제에서 메시지 생성에 관해서는 syslogd 데몬에 의해서 총괄 관리 되고 있다.

/etc/syslog.conf 파일에서는 "어디에서 메세지가 생성이 되면 어디에 메시지를 남겨라"라고 설정 되어 있다.

그럼, syslogd 데모은 /etc/syslog.conf 파일에 설정된대로 생성된 메세지를 적당한 곳이 기록하게 된다.

실습 #

컨테이너를 생성해준다. syslogtest만 출력하고 종료되는 컨테이너다.

$ docker run -d --name syslog_container
--log-driver=syslog ubuntu:18.04 echo syslogtest

아래 명령어를 입력하면 확인이 가능하다.

$ journalctl -u docker.service

혹은 다음과 같이 볼 수도 있습니다.

$ cat /var/log/syslog

fluentd 로깅 #

fluentd #

로그 수집 아키텍처 중 대표적인 도구에는 ELK와 Fluentd가 있습니다.

fluentd는 위 그림처럼 애플리케이션, 시스템, DB 등 각지에서 생성된 로그를 모아서 가공해서 다양한 저장소를 분산 저장할 수 있는 도구가 되겠습니다.

아마존 CloudWatch #

AWS CloudWatch #

Amazon CloudWatch는 DevOps 엔지니어, 개발자, SRE 및 IT 관리자를 위해 구축된 모니터링 및 관찰 기능 서비스입니다.

CloudWatch는 애플리케이션을 모니터링하고, 시스템 전반의 성능 변경 사항에 대응하며, 리소스 사용률을 최적화하고, 운영 상태에 대한 통합된 보기를 확보하는 데 필요한 데이터와 실행 가능한 통찰력을 제공합니다.

도커를 EC2에서 사용하고 있다면 다른 도구를 별도 설치할 필요없이 사용 가능합니다.

실습 #

  1. 클라우드워치에 해당하는 IAM 권한 생성
  2. 로그 그룹 생성
  3. 로그 그룹에 로그 스트림 생성
  4. 클라우드워치의 IAM 권한을 사용할 수 있는 EC2 인스턴스 생성과 로그 전송
DevOps/컨테이너로깅.md