Sentry(센트리) 튜토리얼: 코드 에러를 적극적으로 잡아보자
1. Sentry를 만나기 전; Django Logger
장고 프로젝트에 기본 로거를 붙였었다. 에러 발생 시 일시와 에러내용이 포함된 로그가 차곡차곡 저장될 수 있게 하였으며, Logger단에서 로그 레벨이 ERROR 이상일 경우 관리자 이메일로 내용이 발송될 수 있게 구축하였다.
위와 같이 로거 붙이는 방법은 크게 두가지가 있다.
1) settings.py 내에 작성, 2) 기본 제공하는 로깅 라이브러리를 view단내 import하여 사용
이러한 방법은 장고 공식문서 또는 한국어 블로그에도 내용이 많이 나와있어 별도로 큰 무리 없이 진행해볼 수 있다.
docs.djangoproject.com/en/3.1/topics/logging/#the-cast-of-players
2. Sentry란?
Sentry 는 python 으로 작성된 로그 취합 및 분석 시스템으로 github에 오픈 소스로 공개되어 있으며 동작 방식에 따라 클라우드 버전과 온-프레미스 방식이 있습니다.
3. Sentry 사용해보기
웹 UI를 통해 로그 분석 및 취합내용을 보여주기에 센트리 사이트에 접속을 하여 회원가입을 해야한다.
회사정보와 간단한 신상을 입력하면 가입이 되며, 현재 개인(개발자) 1인 한정으로 사용시에는 사용량 제한이 있으나 제공사용량이 꽤 크기에 실질적으로 무료라고 할 수 있다.
이후 각 사용하는 언어/프레임워크/플랫폼에 맞춰 센트리 사용 메뉴얼에 접근하면 된다.
나의 경우에는 장고를 사용하고 있기에 장고 메뉴얼로 접근을 하였다.
이외 제공하고 있는 공식문서와 깃허브 주소는 여기다!
공식문서:
docs.sentry.io/platforms/python/guides/django/#install
깃허브 주소:
사용을 위한 제반 과정은 아래와 같다.
1) pip를 이용하여 센트리 sdk를 설치한다.
(requirements.txt로 관리할 시에는 sentry-sdk 또는 버전 맞춰서 작성해주면 되겠다)
pip install --upgrade sentry-sdk
2) 어플리케이션 내 settings.py에 하단 코드를 삽입한다.
dsn="https://~"는 회원가입 중간 또는 이후 자신의 어플리케이션 정보를 입력하면 자동으로 생성된다.
import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
sentry_sdk.init(
dsn="https://<key>@sentry.io/<project>",
integrations=[DjangoIntegration()],
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for performance monitoring.
# We recommend adjusting this value in production,
traces_sample_rate=1.0,
# If you wish to associate users to errors (assuming you are using
# django.contrib.auth) you may enable sending PII data.
send_default_pii=True
)
3) 프로젝트 url 내 하단 함수 및 url 경로 삽입
센트리가 정상적으로 작동하는지 체크하기 위한 내용으로, 코드 입력 후 어플리케이션 재 실행, url 접근하여 일부러 에러를 발생시켜본다.
from django.urls import path
def trigger_error(request):
division_by_zero = 1 / 0
urlpatterns = [
path('sentry-debug/', trigger_error),
# ...
]
센트리를 사용하기 위한 기본세팅은 이게 끝이다. (빠트린게 있나 싶을 정도로 초기세팅이 간편했다...)
4. Sentry 활용
1) 에러 내용 알림/입력
사용하는 메신저나 프로젝트 관리 툴(슬랙, 지라, 컨플루언스 등등)에 연동하여 에러 내용 알림/입력을 연동할 수 있으며, 센트리 내 UI에서 해당 에러 핸들링 담당자 지정, 해결 진행상황 및 기록을 남기고 구성원끼리 공유할 수 있다.
아쉽게도 지금 회사에서 온프레미스로 오픈소스 메신저를 사용하고 있어 별도의 웹훅을 구성, 연결하여야 하여 기 제공된 센트리 Integration 기능은 써보지 못했다.
아쉬운 마음을 담아 구글링을 통해 아래 스크린샷을 가져와서 눈호강을 해보았다.
2) 트랜잭션별 퍼포먼스 확인
센트리 UI에서 확인 가능한 내용으로, Sentry-Performance에서 각 수행된 트랜젝션별 세부내용을 확인할 수 있다. 즉, 요청 헤더, 요청 IP주소 및 위치, 사용 OS/장비 등 세부정보부터 요청에 대한 내용이 장고 미들웨어를 어떻게 타고 들어와서 수행되었는지 시각적으로 확인할 수 있다.
개인적으로 머릿속에 글로만 저장되어 있던 지식이 눈에 쫙 보이니 뭔가 신기하기도 하고 머릿속에 더 각인되는 느낌이 들어 좋았다.
아직 써본지 몇일 안되어 해봤던 내용 위주로만 정리를 해보았다. 사용을 위한 제반과정이 너무 심플하여 '이게 다인가...?' 생각이 들었는데
과정에 비해 주어지는 결과물이 꽤나 좋은 편이라 조금 더 탐구해보면 에러 핸들링에 있어 적시에 대응할 수 있을 듯 하다.