AWS/CloudWatch

cloudwatch, slack을 이용한 Error Notification

알면 알 수록 재밌다! 2023. 3. 3. 07:00

 

django에서 에러가 생기면 cloudwatch에 쌓이고 이 로그를 slack으로 notification하고자 한다.

 


우선 django towerwatch라는 패키지를 설치한다.

pip3 install towerwatch

 

그리고 문서에 나와있는 대로 settings.py에 아래처럼 넣는다.

 

### cloudwatch
AWS_LOG_GROUP = 'main'# 생성됨
AWS_LOG_STREAM = 'main-ec2-logstream'
boto3_logs_client = boto3.client("logs", region_name=AWS_REGION)

## cloudwatch setting
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters':{
    'default': { 'format': u"%(asctime)s [%(levelname)-8s] %(message)s [%(pathname)s:%(lineno)d]", 'datefmt':     '%Y-%m-%d %H:%M:%S', } },
    'handlers': { 'console': { 'class': 'logging.StreamHandler', },
    'cloudwatch': { "level": 'DEBUG', "class": "watchtower.CloudWatchLogHandler", "boto3_client":     boto3_logs_client, "log_group_name": AWS_LOG_GROUP, "log_stream_name": AWS_LOG_STREAM,     "formatter": "default", } },
    'loggers': { # previously named as 'root' 'django_test': { 'level': 'DEBUG', 'handlers': ['console', 'cloudwatch'],     'propagate': False, },
}
}
## views.py
## cloudwatch전송되는 로깅
logger = logging.getLogger('django_test')


if len(new_file_list) == 0:
    logger.error(f'\n- Django Logging : {USER_ID} \n- UUID : {TEMP_ID} \n- Reason : No Correct Picture \n- Image url : {IMAGE}\n')

 

 

AWS_LOG_GROUP은 

AWS_LOG_STREAM은 위의 로그그룹을 들어가서

보면 안에 로그가 쌓이고 있다.

 

 

 

이제 aws 설정을 해보자.

 

아래 다른사람이 cloudformation으로 구성한 간단한 cw - slack 설정이 있다. 이걸 이용하자.

https://github.com/keetonian/cw-logs-to-slack

 

GitHub - keetonian/cw-logs-to-slack: An application that integrates AWS CloudWatch logs and Slack

An application that integrates AWS CloudWatch logs and Slack - GitHub - keetonian/cw-logs-to-slack: An application that integrates AWS CloudWatch logs and Slack

github.com

 

deploy를 누르고

아까 aws_log_group를 넣는다.

그리고 slack url을 넣어야하는데,

앱을 누르고 앱 디렉터리 들어가시고

수신 웹후크를 클릭해서 slack에 추가하고

notification을 받고 싶은 slack 채널을 선택하고 앱 추가를 누르면

url이 나온다

 

 

이것을 slackurl에 넣는다.

그리고 배포하면 알림이 채널로 온다.