이번 미션에서 확실하게 정리할 것은 nginx 로그 설정과 application 로그 설정이라고 목표를 잡았다.
2. 미션 실습
1) 로그 설정하기(nginx, application)
nginx log
먼저 nginx 로그를 설정해준다. nginx는 기본적으로 로깅을 해주고 있으므로, 띄워뒀던 Reverse Proxy 서버의 nginx의 로깅 파일을 host 에 쌓이도록 docker로 컨테이너를 띄워줄 때에 경로 설정만 잡아주면 된다.
& docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fistkim101/infra-subway latest 7e689b0c8287 44 hours ago 265MB
nextstep/reverse-proxy latest 1e2d3fe90049 3 days ago 133MB
nginx latest 7ce4f91ef623 11 days ago 133MB
mysql 5.7 cd0f0b1e283d 11 days ago 449MB
moby/buildkit buildx-stable-1 be8e8392f56c 6 weeks ago 123MB
띄워뒀던 Reverse Proxy를 멈추고 nextstep/reverse-proxy 이미지를 다시 컨테이너로 띄워주면 되는데 아래와 같은 설정으로 볼륨을 잡아준다. Reverse Proxy의 의도 자체가 80은 443으로, 443은 8080으로 포워딩 하는 것이기 때문에 포트는 80과 443 모두를 잡아줘야한다.
그러면 host에 비어있는 access.log와 error.log가 잡힐 것이고, 테스트로 브라우저에서 접속을 해보면 로그가 잡히는 것을 확인할 수 있다.
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET / HTTP/1.1" 200 1000 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET /js/main.js HTTP/1.1" 200 176083 "https://fistkim.kro.kr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET /js/vendors.js HTTP/1.1" 200 2176047 "https://fistkim.kro.kr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET /images/logo_small.png HTTP/1.1" 200 740 "https://fistkim.kro.kr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET /images/main_logo.png HTTP/1.1" 200 4214 "https://fistkim.kro.kr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
220.76.70.1 - - [11/Apr/2021:07:54:42 +0000] "GET /favicon.ico HTTP/1.1" 404 124 "https://fistkim.kro.kr/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
application log
다음으로 application 로그를 설정해보자. 미션에서의 가이드도 그렇고 내가 써본 것도 logback 밖에 없어서 logback 기준으로 설정을 하고자 한다. application 로그를 설정한다는 말의 의미는 logback 의 설정에 대해서 항목별로 의미를 알고, 특정한 의도를 가지고 로그가 남게끔 설정을 한다는 뜻이다.
구현하고자 하는 로깅 전략은 아래와 같은 목표를 갖는다.
profile 별로 logging level 을 포함한 여러 설정을 다르게 취한다.
logging level
file path & file name
logging pattern for file & logging pattern for console
rolling policy
logging.file.max-size
logging.file.max-history
전체 logging 과는 별개로 error에 관해서는 logging을 추가적으로 관리한다.(추가적으로 관리 = 기존 전체 logging은 그대로 둔 채 error만 추가적인 파일로 따로 저장)
flavor에 따른 loggin level 은 각 flavor의 .properties 내의 logging.level.root 속성으로 설정해준다. 가령 development 환경에서는 info 레벨 이상만 로그에 남도록 하고 싶다면, application-development.properties 에 아래와 같이 설정해준다.
logging.level.root=info
이로써 앱 로깅을 위한 모든 사전 절차를 마쳤고 새로 build 되는 이미지를 다시 host 에서 띄워주면 되는데, 앞서 구현한 CI&CD 에서 최신의 이미지를 pull 받아서 컨테이너로 띄우는 과정은 자동화 해놓지 않았으므로 직접 해줘야 한다. 특히 이번에 애플리케이션 logging이 추가가 되었으므로 docker run 시에 logging을 위한 volume 설정을 새로 잡아줘야 한다.
$ docker run -d -p 8080:8080 -v '/home/ubuntu/nextstep/log:/log' fistkim101/infra-subway
2) cAdvisor 구성하기
운영상 확인해야 할 여러 지표들을 시각화해서 보여준다
3) Cloud Watch 붙이기
원하는 지표들을 골라서 그걸 위젯의 형태로 시각화 하여 보여주는 AWS에서 제공하는 tool 이다.
와 을 참고하여 정리했다.
라는 Docker 모니터링 tool이 있는데, 특별한 것은 없었고 ui 상으로 여러 지표들을 확인할 수 있도록 해주는 것이었다.
를 보니 여기에 여러 조건들을 붙여서 알람을 받을 수도 있는 것 같다. 가장 간단한 것으로 Route 53에서 제공하는 상태 검사가 있는데, 계속 지정된 엔드포인트를 찔러보면서 서버가 죽었나 살았나를 체크해주다가 지정한 일정 시간동안 답이 없으면 알림을 해주는 좋은 도구다.