[Django] Sentry로 모니터링 시스템 구축하기

김동욱·2024년 6월 9일

Django

목록 보기
6/6
post-thumbnail

실시간 서비스에서 애플리케이션 모니터링은 매우 중요하다. 운영 중인 서비스에서 장애가 발생했을 때, 이를 빠르게 대응하는 것은 사용자 경험 측면에서 서비스 운영에 큰 영향을 미친다.

과거에 운영했던 비영리 목적의 서비스에서 장애가 발생했지만, 이를 사용자로부터 들은 경험이 있다. 해당 서비스는 사용자 수가 많지 않아 큰 문제로 이어지지는 않았지만, 이 경험을 통해 모니터링 시스템의 필요성을 절실히 느꼈다. 이러한 경험을 바탕으로 새롭게 시작하는 프로젝트에 모니터링 시스템을 도입하게 되었다.

왜 Sentry인가

모니터링 툴로 선택할 수 있는 다양한 선택지가 있다. 현재 진행하는 프로젝트에서는 Sentry를 사용하여 모니터링 시스템을 구축하기로 했다. Sentry를 선택한 가장 큰 이유는 다음과 같다.

  • 발생하는 오류를 실시간으로 추적하고 알림을 제공한다.
  • 다양한 언어와 프레임워크를 지원하며, Slack, Jira 등과 같은 도구와 쉽게 통합할 수 있다.

현재 협업 도구로 Slack을 사용하고 있다. 따라서 Django로 구축한 서버에서 문제가 생기면 Sentry를 통해 Slack으로 알림을 받을 수 있도록 구현했다.

모니터링 시스템 구축하기

프로젝트 생성

프로젝트 탭에서 프로젝트 생성을 누르면 아래와 같은 화면이 나온다. 개발하는 플랫폼과 알림 빈도 등을 설정한다.

프로젝트 생성을 했으면 장고 프로젝트에서 Sentry로 알림을 보낼 수 있도록 설정해야 한다.
우선 Sentry 관련 패키지를 설치하자.

pip install --upgrade 'sentry-sdk[django]'
poetry add sentry-sdk[django]

settings 관련 파일에 다음과 같은 설정을 추가하자. 참고로 dsn 부분은 환경변수로 불러오는 편이 보안상 좋다.

# settings.py
import sentry_sdk

sentry_sdk.init(
    dsn="...",
    # Set traces_sample_rate to 1.0 to capture 100%
    # of transactions for performance monitoring.
    traces_sample_rate=1.0,
)

설정을 끝마쳤으면 에러를 발생하는 로직을 실행해보자.

# urls.py
from django.urls import path

def trigger_error(request):
    division_by_zero = 1 / 0

urlpatterns = [
    path('sentry-debug/', trigger_error),
    # ...
]

다음과 같이 정상적으로 에러를 모니터링할 수 있게 됐다.

슬랙 연동

슬랙과 Sentry를 연동하기 위한 설정이다. Alerts 탭에서 Create Alert를 누르면 다음과 같은 화면을 볼 수 있다. 에러 발생 시 슬랙으로 알림을 전송하기 위한 설정이기 때문에 Errors의 Issues를 설정한다.

슬랙으로 알림을 보내는 조건을 설정할 수 있다. 다음과 같이 하루에 5번 이상 발생한 이슈를 슬랙으로 알림을 보내게 설정했다. 그리고 알림을 보내려는 채널 이름과 아이디('채널 세부정보 보기'에서 확인 가능), 태그, 호출할 사람 등을 지정하면 정상적으로 알림을 보낼 수 있다.





참고 자료

https://tech.kakaopay.com/post/frontend-sentry-monitoring/
https://velog.io/@qlgks1/django-sentry#1-sentry-monitoring-system

profile
안녕하세요! 질문과 피드백은 언제든지 환영입니다:)

0개의 댓글