규도자 개발 블로그

crybaby: 오류메시지를 slack으로 보내기 위한 exception handler 본문

Python/Python

crybaby: 오류메시지를 slack으로 보내기 위한 exception handler

규도자 (gyudoza) 2022. 11. 9. 22:18

crybaby: 오류메시지를 slack으로 보내기 위한 exception handler

최근에 오픈소스 프로젝트를 또 하나 시작했다. 바로 crybaby라는 건데 sentry처럼 오류가 발생했을 때 해당 오류내역을 slack으로 받을 수 있게 해주는 파이썬 라이브러리이다. 아니~ 센트리게 있는데 뭐하러 이걸 써!? 하겠지만 sentry를 통해 exception을 slack으로 보내는 기능은 팀플랜일 때부터 지원하는 기능이다. 그러니까 "유료"라는 의미이다. 그래서 내 개인프로젝트에서 간단하게 쓸만한 라이브러리를 만들어서 오픈소스화 해보자 하는 마음에서 제작하게 되었다.

 

pip install crybaby

 

명령어로 설치할 수 있고 소스 저장소는 https://github.com/jujumilk3/crybaby 이곳이다.

 

예제코드는

import crybaby


def unhandled_exception():
    raise Exception("Unhandled exception")


def handled_exception():
    try:
        raise Exception("Handled exception")
    except Exception as e:
        crybaby.catch(e)


if __name__ == "__main__":
    crybaby.setup(
        slack_token="xoxb-sample-slack-token", slack_channel_id="SLACKCHANNELID"
    )
    handled_exception()
    unhandled_exception()

다음과 같고 이것을 실행해보면

slack_example

이렇게 자기가 등록한 slack channel에 오류가 오게 된다.

 

만들게 된 결정적인 이유는 이렇다. 개인적으로 돌리고 있는 퀀트 프로그램의 환율 크롤링이 오류가 나고 있었는데 이걸 내가 며칠 후에 변동이 없는 그래프를 보고 알아차린 것이지 크롤링에 오류가 있었다는 사실 자체는 서버의 log에만 쌓이고 있었기 때문에 며칠동안 알아채지 못했었다.
 그렇게 왜곡된 값으로 거래를 할 뻔 했기 때문에 평소에 실무에서 쓰는 sentry alarm이 굉장히 편했던 기억이 있어서 나도 프로젝트에 sentry를 설치해서 slack으로 프로그램에 안전장치를 만들려 했는데 위에도 썼다시피 sentry -> slack은 유료라서 만들었다. 어차피 그동안의 경험으로 exception hook 자체는 센트리에서 잘 캡쳐하고 있는 것을 확인했고, 심지어 오픈소스인 센트리에서 해당부분만 까보고 나서 구현하면 아주 쉽게 만들 수 있을 것 같았고 실제로도 그러했기 때문에 며칠만에 간단하게 제작할 수 있었다.
 지금은 내 개인프로젝트에 설치해서 오류 알림을 받아보고 있다. 개인적으로도 굉장히 깔끔하게 잘 만든 것 같아 만족도가 높다.

Comments