본문 바로가기

완전 공부용으로 아래 링크에서 글 저장

http://oniondev.egloos.com/v/10048149

 

양파개발자 SW의 블로그입니다^^ : nginx-gunicorn-django 구조 파악 및 로그 확인법

아래와 같은 구조로 되어있는 Request Handling Process 를 단계별로 한번 살펴보고 이해해 봅시다!!! 그리고!!! 각 단계별로 로그는 어떻게 보는지 살펴봅시다. 유저 Request → Nginx → Gunicorn → Django Ngin

oniondev.egloos.com

유저 Request → Nginx → Gunicorn → Django

Nginx

  • Reverse Proxy Server 역할
    • 로드 밸런싱 : traffic 분산
    • 서비스 속도 개선: in-bound, out-bound 데이터 압축, SSL 암호화(어플리케이션 단 수고를 덜어줌)
    • 보안 강화: 각종 조건에 따른 트래픽 차단 기능, 백엔드 서버 군의 IP 외부 노출 방어
  • 로그 Path
    • Access log: /var/log/nginx/access.log
    • Error log: /var/log/nginx/error.log

Gunicorn

  • Gunicorn 은 무엇인가?
    • WSGI HTTP Server for UNIX
      • WSGI (=Web Server Gateway Interface) : 파이썬 웹 어플리케이션으로 request 를 포워딩 해주는 웹서버를 단순하게 일컫는 말
    • pre-fork worker model = 멀티 프로세싱
      • pre-fork : master 프로세스가 "미리(=pre)" 여러 자식 프로세스를 생성(=fork) 하여 각각 하나의 request 를 핸들링하도록 하는것
      • 각각의 request가 일으키는 문제가 다른 프로세스에 영향을 주지 않음
      • non thread-safe library 에 대하여 호환성 보유
    • 여러 Django Application Process 가 원활하게 managing 될 수 있도록 관리해준다.
    • TMI: Green Unicorn 약자라고 함
  • 로그 Path
    • 서버에서 ps -ef | grep gunicorn 이라고 쳐보면 아래처럼 나옴 (로그파일 Path 확인 가능!!)
      ubuntu   1690995       1  0 17:37 ?        00:00:02 /usr/local/bin/python3.8 /home/ubuntu/.local/bin/gunicorn src.myapp.wsgi:application --env DJANGO_SETTINGS_MODULE=hwahae.production --pid /myapp/tmp/gunicorn.pid --bind unix:/myapp/tmp/gunicorn.sock --access-logfile /myapp/log/gunicorn/access.log --error-logfile /myapp/log/gunicorn/error.log --log-syslog --log-level info --workers 4

    • Access log: /myapp/log/gunicorn/access.log
    • Error log: /myapp/log/gunicorn/error.log
    • 위에 찍히는 로그는 Gunicorn 로그이지 장고 앱과는 관련이 없음!!

Django

  • 파이썬 웹 어플리케이션 프레임워크...
  • 장고 로그는 지금!!! 장고로 웹앱 개발을 하고있는 당신이 남기는 로그를 출력할 것임
  • 직접 로그의 흐름(?) 을 설정할 수 있음
    • python 에서 기본 제공하는 logging 패키지의 각종 Handler 를 사용할수 있음
    • Gunicorn 로그파일에서 장고 로그도 보고 싶다면?
      • Django: StreamHandler 를 사용
      • gunicorn 구동 시, capture_output 옵션을 사용
    • 독립된 파일로 로그를 관리하고 싶다면?
      • Django: WatchedFileHandler 를 사용

로그파일 관리

  • 주기적으로 오래된 로그파일을 지워주면 됩니다!
  • linux logrotate 사용
  • Web 으로 조회도 하고 검색도 하고 차트로도 볼 수 있는!!!
  • 로그 모니터링 툴을 사용하면 됩니다!!
  • DataDog, NewRelic, Elastic Stack 등..

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.