본문 바로가기

server

sentry.io 를 이용한 에러 탐지 (python)

프로그램을 작성시 테스트를 통해 수많은 에러를 겪으며 프로그램을 작성한다.  

단위 테스트, 통합 테스트 등 수많은 테스트를 겪었으니 해당 프로그램은  에러가 없을까?

세상에 완벽한 프로그램이 없듯이 자의든 타의든 프로그램엔 에러가 있을 수 밖에 없다. 

에러 발견을 메신져 알림을 통해 바로 확인하게 할수도 있고, 디비에 해당 내역을 기록할수 도 있다. 

수많은 프로그램이 난무 하는 가운데 그중 하나인 sentry.io를 소개 한다. 


사용법이 간단하고(아마도??) 통합적으로 관리할수 있는 뷰가 있어서 sentry.io를 선택했다. 


먼저 회원가입을 하면 사용하는 언어/프레임워크를 선택한다. 

저의 경우 python을 선택했다.

sentry-sdk 라는 패키지 설치 및 해당 프로젝트에 해당 api key를 선언해 준다.

sentry.io로 에러 부분을 보내는 방법은 exception 부분으로 감싸져 있는 부분만 보내진다. (설치한 패키지가 exception이 발생하면 에러를 전송한다.)


파이썬엔 데코레이션이라는 아주 좋은 기능이 있으므로 logging을 데코레이션으로 한후 해당 데코레이션 함수에 try로 감싸서 해결했다.

import logging

import functools

logger = logging.getLogger()


def log_error(logger):
def decorated(f):
@functools.wraps(f)
def wrapped(*args, **kwargs):
try:
return f(*args, **kwargs)
except Exception as e:
if logger:
logger.exception(e)
raise
return wrapped
return decorated

위와 같이 데코레이션을 선언후 함수 상단에 데코레이션을 선언해주면 된다.

@log_error(logger)
def solution(n):
pass .....


일부러 에러를 발생시켜 보면 (ret_arr의 max값은 100이다. 해당 배열은 참조없으므로 에러가 발생한다.) 실행시켜 보면


@log_error(logger)
def solution(n):
ret_arr = [x for x in range(1, n+1)]
ret_arr[999999999]

위와 같이 에러가 전송된것을 확인할수 있다. 


강제 메시지 전송 및 캡쳐는 다음의 링크를 참조 하자. 

https://docs.sentry.io/error-reporting/capturing/?platform=python


sentry.io는 개인 보다는 회사나 프로젝트 단위로 관리되어야 하며, 여러 사람이 과거에 어떤 에러가 발생했었고, 어떻게 해결 했는지를 관리 할수 있는 툴이다. ( 에러에 대한 기록 내역 서비스) 개발자 회의에서 에러에 대해 확인하고, 향후 개발해야 하는 방향을 정할수도 있으며,  효과적인 에러 관리를 통해 프로젝트의 관리 및 서비스 품질을 높힐 수 있을 것이다.