-
Django - CloudWatch : 장고 로깅을 CloudWatch에 입력하기공부/Django 2023. 4. 5. 22:25
ECS Fargate로 Django 컨테이너를 생성하면, log를 cloudwatch로 확인 할 수 있다.
그러나 cloudwatch가 있어서 편하다고 생각한것도 잠깐 내가 원하는 log를 확인 할 수 가 없었다.
기존에 logging을 EC2에서 관리 할 거라고 생각하고 작성했던 부분들을 어느정도 수정이 필요 했다.
1. 클라우드 와치를 테스트 하기위해서 로컬에서도 보낼수있는지 여러가지 했지만 역시 안됐다.(혹시 성공한 분이 있다면 댓글로 방법좀....)
2. class: watchtower.CloudWatchLogHandler를 이용해서 로컬에서 서버를 키려고 하면 handler에서 선언한 부분을 찾을 수 없다고 한다. (로컬에서 어떤 부분을 실행하시는 분이라면 주석처리 후에 시도 하시기를.....)
3. 혹시라도 CloudWatch에 로그를 연결하고 싶다면, AWS configure 설정이 잘 돼 있는지도 확인 꼭 하시기를 바랍니다.
사용법
1. 라이브러리 설치(boto3, watchtower)
pip install watchtower pip install boto3
2. AWS CloudWatch에서 로그 그룹 클릭 후 로그 그룹 생성
보존 설정은 로그를 얼마나 가지고 있을지 기간을 정하는 부분, 여기선 로그 그룹 이름만 작성하면 된다.
3. 로그 그룹을 생성했다면 하단에 로그 스트림 생성을 클릭해서 로그 스트림 생성
로그 스트림도 이름만 작성 해 주면 생성 된다.
4. 환경 변수에 로그그룹, 로그스트림 등록 및 LOGGING 수정
# .env AWS_LOG_GROUP='test' AWS_LOG_STREAM='test-stream' # settings.py import boto3 import logging boto3_logs_client = boto3.client('logs',region_name=AWS_REGION_NAME) # boto3.client, Session 방식 둘다 해봤지만 Docs에서도 client를 사용하니 client를 사용 # logger LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'require_debug_false': { # 디버그 False '()': 'django.utils.log.RequireDebugFalse', }, 'require_debug_true': { # 디버그 True '()': 'django.utils.log.RequireDebugTrue', }, }, 'formatters': { 'aws': { # log를 어떻게 출력할 것인지 설정하는 부분 'format': u'%(asctime)s [%(levelname)-8s] %(funcName)s - %(message)s [%(pathname)s:%(lineno)d] ', 'datefmt': '%Y-%m-%d %H:%M:%S' }, }, 'handlers': { 'watchtower': { # 설정하는 부분 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'watchtower.CloudWatchLogHandler', 'boto3_client': boto3_logs_client, 'log_group': env('AWS_LOG_GROUP'), 'stream_name': env('AWS_LOG_STREAM'), 'formatter': 'aws', }, }, 'loggers': { 'django': { 'level': 'DEBUG', 'handlers': ['watchtower'], 'propagate': False, }, }, log = logging.getLogger('django') # getLogger(loggers 부분) 로거를 호출 불러오는 부분 }
5. 로그를 찍어 보고 싶은 부분에 import 해서 사용하면 된다.
from configs.settings import log # configs는 내 settings 파일이 존재하는 폴더 class class_view: ... def some_func(request): log.debug('Can you see log') ... return
이렇게 설정하면 보일 것이다.
나 같은경우는 일일이 log를 입력하지 않고 미들웨어를 사용하여 log를 찍도록 하였다.
미들웨어를 사용한 방법은 추후에 다시 올리도록 하겠습니다. (올리게 되는 경우 링크를 걸어두겠습니다.)
만약 ECS Fargate로 서비스하고 있으시다면 환경변수를 꼭 설정하시기를 바랍니다.
Ref.
https://velog.io/@dnpxm387/TIL167-AWS-CloudWatch
TIL#167 AWS CloudWatch log
aws cloudwatch log
velog.io
https://github.com/kislyuk/watchtower
GitHub - kislyuk/watchtower: Python CloudWatch Logging: Log Analytics and Application Intelligence
Python CloudWatch Logging: Log Analytics and Application Intelligence - GitHub - kislyuk/watchtower: Python CloudWatch Logging: Log Analytics and Application Intelligence
github.com
AWS CloudWatch에 백엔드 서버 로깅하기 (feat. watchtower)
AWS CloudWatch에 백엔드 서버 로깅하기 (feat. watchtower)
CloudWatch는 AWS에서 제공하는 모니터링 및 관찰 서비스이다. CloudWatch를 사용하여 서버의 비정상적인 동작을 감지하고 경보를 설정하고 로그와 지표를 시각화하고 자동화된 작업을 수행하고 문제
yongineer.netlify.app
- 어떤 문제를 해결하기위해 검색하고 블로그에 작성한 글입니다. 부족한점이 많지만 틀린점이나 부족한점이 있다면 말씀해주시면 감사하겠습니다.
'공부 > Django' 카테고리의 다른 글
[Django] Logging - 장고 로그(debug_sql) (0) 2023.04.14 [Django]Fernet을 사용한 양방향 암호화 (0) 2023.04.07 Django - S3 - nginx - 이미지업로드, 정적파일 (0) 2023.03.07 Nginx static 에서 root와 alias 의 차이 (0) 2023.03.04 Django - Nginx - Gunocorn - postgresql with Docker (0) 2023.03.04