본문 바로가기
AWS

[AWS] Python 으로 CloudWatch Log 쓰기 (Feat. FastAPI)

by bryan.oh 2023. 8. 14.
반응형

BackEnd 로 FastAPI 를 사용하는데,

AWS 에 서비스를 올릴거라서 로깅은 CloudWatch 를 사용해보기로 했습니다.

로그 저장부터 검색, 삭제까지 너무 편한 기능이 다 있어서, 

로깅에 대해서 내가 귀찮은 작업을 안해도되는..ㅎㅎ;

 

우선 dev 환경인 로컬에서도 aws 의 서비스를 사용하기 위해서 aws 사용자를 추가해야합니다.

사용자 생성

IAM 으로 가서 사용자를 생성합니다.

 

사용자 > 사용자추가 클릭

 

 

 

다음 > 사용자 생성

생성이 완료되면,



생성된 사용자를 클릭,

 

액세스 키 만들기 클릭

 

 

 

액세스 키가 생성되면 복사해서 잘 보관해야합니다. 또는 csv 다운로드해서 보관.

 

 

watchtower 추가

pip install watchtower

 

Logger 에 Handler 추가

import watchtower
import logging
handler = watchtower.CloudWatchLogHandler(
        log_group_name="my-service",
        log_stream_name="my-backend",
)
logger = logging.getLogger(__file__)
formatter = logging.Formatter("[%(levelname)s] %(message)s")
handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
logger.addHandler(handler)
logger.debug("hello - debug")
logger.info("hello - info")

인증을 포함하려면

import boto3

session = boto3.Session(
    aws_access_key_id="your_session_key",
    aws_secret_access_key="your_session_secret_key",
    region_name="your_aws_region_name",
)

handler = watchtower.CloudWatchLogHandler(
        boto3_session=session,
        log_group_name="my-service",
        log_stream_name="my-backend",
)

# boto3_session 이라는 kargs 가 없다면 (최신버전은 아래처럼)

boto3_client = boto3.client("logs",
                            region_name="your_session_key",
                            aws_access_key_id="your_session_secret_key",
                            aws_secret_access_key="your_aws_region_name")
handler = watchtower.CloudWatchLogHandler(
    boto3_client=boto3_client,
    log_group_name="my-service",
    log_stream_name="my-backend",
)

 

 

로그 스트림도 생겼고, 클릭해보면,

 

INFO level 의 로그가 찍혀있는것을 확인할 수 있습니다.

 

 

이제 로그는 신경 안써도되겠다..

보존기간이나 3개월로 바꿔놔야지..

 

 

728x90
반응형

댓글