로그 관리는 어떻게 하세요?

Pak Yeongjo·2022년 4월 5일
1

일 어떻게 하세요?

목록 보기
1/3

이 포스트는 Django(DRF)로 작성된 백엔드 API 서버의 로그 관리에 대한 내용입니다.

0. 로그?

컴퓨팅에서 로그파일(logfile)은 운영 체제나 다른 소프트웨어가 실행 중에 발생하는 이벤트나 각기 다른 사용자의 통신 소프트웨어 간의 메시지를 기록한 파일이다. 로그를 기록하는 행위는 로깅(logging)이라고 한다.

API 서버 관리 측면에서 생각해보자.
HTTP 통신 기반 서버라고 생각하면 API 요청의 상호작용은 Request와 Response의 쌍이 될 것이다.
이 기록을 작성하고 관리할 수 있다면 요청의 빈도와 상태를 확인할 수 있다. 더 나아가 어떤 API에 요청이 많은지, 장애가 발생하는 요청은 어떤 API인지, 응답 시간에 로드가 생기는 API는 어디가 되는지 확인할 수 있을 것이다.

1. Django Logging

장고의 logging 모듈을 이용해서 http 요청을 서버에 파일 형태로 기록할 수 있다.

이 모듈은 4개의 부분으로 분리되어 컨트롤 할 수 있다.

  • Loggers
  • Handlers
  • Filters
  • Formatters

Logging 모듈의 선언은 장고의 settings 안에 선언된다.

로그에 날짜나 prefix를 이용하고 싶다면 fomatters에서 해당 부분을 선언해주고 handler 안에서 해당 formatter를 사용해주면 된다. 로그를 파일로 관리하고 싶다면 handler 안에서 class 부분을 TimedRotatingFileHandler 등의 옵션을 지정해줄 수 있다. 또 파일의 로테이션 주기를 설정하거나 로테이션 되는 파일의 네이밍 프리픽스를 지정하는 설정도 가능하다.
이렇게 로그의 라인과 파일의 포맷을 지정한 handler를 logger에 넣어주면 원하는 형태로 장고의 로그를 기록할 수 있다.

1.1 좋았던 경험

사용이 쉽다.

어지간한 설정은 공식 문서에 다 나와있고 레퍼런스도 많은 편이다. logger를 입맛대로 만들어놓고 엔드포인트에서 호출만 해주면 된다.

로그 파일을 입맛대로 분리하기 쉽다.

예를 들어 API 로그와 별개로 로그인 요청에 대한 로깅만 별도의 파일로 분리하고 싶다면 해당 logger만 만들어주고 로그인 파트에서 선언해주면 된다. 결제 요청에 대한 로그를 또 별도로 관리하고 싶다면 또 logger를 하나 더 만들어주면 된다.

1.2 좋지 않았던 경험

서버의 스케일아웃이 어려워진다.

1개의 EC2, Nginx로 구성된 서버 아키텍처에서는 사용하기가 매우 쉽다.
로깅 파일이 적재될 위치도 지정할 수 있고 로테이션 적용도 쉬운 편이다.
여기에 Auto Scailing이 들어가고 EC2 인스턴스가 복수가 되면 머리가 아파진다. 하나의 요청을 찾기 위해서는 모든 인스턴스에 접속해서 로그 파일을 뒤져봐야 한다.

어려워 진다, 라고 작성해놨지만 어쩌면 불가능해진다, 라고 했어도 무리가 아닐 것 같기도 하다.

모니터링은 또 다른 문제다.

vim에서 tail -f 최신로그파일.txt 명령어를 때려놓고 요청이 계속 들어오는걸 팔짱 끼고 앉아서 보고 있으면 굉장히 멋져보인다. 옆자리가 신입 클라이언트 개발자라면 우와 하는 소리도 들을 수 있고 어깨가 으쓱해진다.
만약 업무 시간 내내 그러고 앉아있을 수 있다면 모니터링(물리)이 가능할 것이다. 그게 아니라면 어제 하루동안 로그인 요청이 몇 건이나 들어왔는지 파악해달라면 머리가 아파질 것이고 요구 사항을 수행할 수 없는 그럴듯한 핑계부터 생각해야할 것이다.

2. Load Balancer

만약 웹 서버를 EC2에 올렸다면 높은 확률로 Route53을 사용했을 것이고, 그렇다면 아마 Application Load Balancer를 적용했을 것이다(아님 말고).
그랬다면 로그 관리를 장고 어플리케이션 단에서 하는 것 보다 로드밸런서 단에서 관리하는게 유리할 것이다.

로드밸런서에는 access log를 s3에 압축 파일 형태로 보관할 수 있는 옵션이 있다. 기본적으로 비활성화 되어있고 활성화를 시킨다고 추가 비용이 나오진 않는다(S3 스토리지 비용은 별도).

다만 로그 파일을 분석할 때 수백수천개의 압축 파일을 다운받고 압축해제해서 control + F 해서 눈 빠지게 검색하고 싶지 않다면 AWS Athena를 사용하는 방법을 선택해도 좋을 것 같다.

3. References

0개의 댓글