Developer/Posting

Sentry(센트리) 튜토리얼: 코드 에러를 적극적으로 잡아보자

codingzipsa 2021. 3. 21. 23:01
반응형

1. Sentry를 만나기 전; Django Logger

장고 프로젝트에 기본 로거를 붙였었다. 에러 발생 시 일시와 에러내용이 포함된 로그가 차곡차곡 저장될 수 있게 하였으며, Logger단에서 로그 레벨이 ERROR 이상일 경우 관리자 이메일로 내용이 발송될 수 있게 구축하였다.

위와 같이 로거 붙이는 방법은 크게 두가지가 있다.

1) settings.py 내에 작성, 2) 기본 제공하는 로깅 라이브러리를 view단내 import하여 사용

이러한 방법은 장고 공식문서 또는 한국어 블로그에도 내용이 많이 나와있어 별도로 큰 무리 없이 진행해볼 수 있다.

docs.djangoproject.com/en/3.1/topics/logging/#the-cast-of-players

 

Logging | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

2. Sentry란?

Sentry 는 python 으로 작성된 로그 취합 및 분석 시스템으로 github에 오픈 소스로 공개되어 있으며 동작 방식에 따라 클라우드 버전과 온-프레미스 방식이 있습니다.

3. Sentry 사용해보기

웹 UI를 통해 로그 분석 및 취합내용을 보여주기에 센트리 사이트에 접속을 하여 회원가입을 해야한다. 

회사정보와 간단한 신상을 입력하면 가입이 되며, 현재 개인(개발자) 1인 한정으로 사용시에는 사용량 제한이 있으나 제공사용량이 꽤 크기에 실질적으로 무료라고 할 수 있다.

이후 각 사용하는 언어/프레임워크/플랫폼에 맞춰 센트리 사용 메뉴얼에 접근하면 된다.

나의 경우에는 장고를 사용하고 있기에 장고 메뉴얼로 접근을 하였다.

sentry.io/for/django/

 

Django Error Monitoring

Django application monitoring from Sentry helps developers easily diagnose, fix, and optimize the performance of their code while tracking errors.“

sentry.io

이외 제공하고 있는 공식문서와 깃허브 주소는 여기다!

공식문서:

docs.sentry.io/platforms/python/guides/django/#install

 

Django

On this page, we get you up and running with Sentry's SDK, so that it will automatically report errors and exceptions in your application. If you don't already

docs.sentry.io

깃허브 주소:

github.com/getsentry/sentry

 

getsentry/sentry

Sentry is cross-platform application monitoring, with a focus on error reporting. - getsentry/sentry

github.com

사용을 위한 제반 과정은 아래와 같다.

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),
    # ...
]

Sentry-Issues에 이렇게 Error가 뜨면 센트리가 잘 작동하고 있다는 것이다.

센트리를 사용하기 위한 기본세팅은 이게 끝이다. (빠트린게 있나 싶을 정도로 초기세팅이 간편했다...)

4. Sentry 활용

1) 에러 내용 알림/입력

사용하는 메신저나 프로젝트 관리 툴(슬랙, 지라, 컨플루언스 등등)에 연동하여 에러 내용 알림/입력을 연동할 수 있으며, 센트리 내 UI에서 해당 에러 핸들링 담당자 지정, 해결 진행상황 및 기록을 남기고 구성원끼리 공유할 수 있다.

아쉽게도 지금 회사에서 온프레미스로 오픈소스 메신저를 사용하고 있어 별도의 웹훅을 구성, 연결하여야 하여 기 제공된 센트리 Integration 기능은 써보지 못했다.

아쉬운 마음을 담아 구글링을 통해 아래 스크린샷을 가져와서 눈호강을 해보았다.

지라에서는 요롷게
슬랙에슨 요롷게

2) 트랜잭션별 퍼포먼스 확인

센트리 UI에서 확인 가능한 내용으로, Sentry-Performance에서 각 수행된 트랜젝션별 세부내용을 확인할 수 있다. 즉, 요청 헤더, 요청 IP주소 및 위치, 사용 OS/장비 등 세부정보부터 요청에 대한 내용이 장고 미들웨어를 어떻게 타고 들어와서 수행되었는지 시각적으로 확인할 수 있다.

일부분 캡쳐쓰

개인적으로 머릿속에 글로만 저장되어 있던 지식이 눈에 쫙 보이니 뭔가 신기하기도 하고 머릿속에 더 각인되는 느낌이 들어 좋았다.

아직 써본지 몇일 안되어 해봤던 내용 위주로만 정리를 해보았다. 사용을 위한 제반과정이 너무 심플하여 '이게 다인가...?' 생각이 들었는데

과정에 비해 주어지는 결과물이 꽤나 좋은 편이라 조금 더 탐구해보면 에러 핸들링에 있어 적시에 대응할 수 있을 듯 하다.

반응형