[Sentry] FastAPI 에러 로깅 시스템 Sentry 적용기

JNETiii·2024년 3월 21일
3

Backend

목록 보기
2/3

Sentry란?

Sentry는 실시간으로 로그를 취합하고 에러를 트래킹 할 수 있는 서비스다.
서버 입장에서는 API가 호출된 기록을 확인하고, N+1이나 Slow Query같은 문제도 확인할 수 있다.
slack과 연결하면 에러가 발생할때마다 슬랙으로 알림이 온다

적용

API가 호출될 때마다 기록을 해줘야하기 때문에 middleware로 sentry를 구성했다.
Sentry 문서도 깔끔해서 간단하게 적용할 수 있었다.
https://docs.sentry.io/platforms/python/

Sentry SDK 설치

나는 poetry로 라이브러리를 관리하고 있어서 poetry로 설치했다.

poetry add sentry-sdk

Sentry 세팅

Sentry 설치 후 init을 해준다.

sentry_dsn
sentry 내에 project를 생성하면 각각의 project를 구분해서 dsn가 자동 생성된다.
sentry 문서에서 init 작성하는 부분을 보면 project를 선택하면 그에 맞는 dsn을 알려준다. (친절..)

enable_tracing
성능 모니터링을 활성화할지 여부를 나타낸다.

environment
말그대로 환경을 뜻한다. 우리는 개발용과 운영용이 나눠져있기 떄문에 env에서 환경값을 가져와서 넣어주고 있다.
environment값을 설정해주면 환경별로 분리해서 로그를 기록해준다.

saple_rate
로그를 어느정도 기록할지 수치를 나타낸다.
1.0으로 설정하면 100프로 기록한다.
로깅은 비용과 연결되기 때문에 상황에 맞게 설정하면 된다!

from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
import sentry_sdk

sentry_sdk.init(
	dsn=settings.sentry_dsn,
    enable_tracing=True,
    environment=settings.env,
    sample_rate=1.0
)
app.add_middleware(SentryAsgiMiddleware)

Sentry SDK import

API를 호출한 사용자를 추적하기 위해 set_user와 set_tag를 가져온다.

set_user
sentry 내에서 user 정보를 설정할 수 있다.
id 뿐만 아니라 다른 데이터를 넣어줄 수도 있다

set_tag
sentry에서 특정 유저의 행동을 확인하고 싶을 때, tag로 설정해둔 값으로 검색을 할 수 있다.
set_user()로 설정해도, set_tag()에 설정하지 않으면 검색하기 번거로울 수 있다.

아래 예시 코드로는 user 정보로 id와 token을 설정해두었고, 두 값으로 로그를 검색할 수 있다!

from sentry_sdk import set_user, set_tag

set_tag("user.id", user_id)
set_tag("user.token", user_token)

set_user(
	"id": user_id,
    "token": user_token
    ...
)

결론

확실히 sentry를 연결하고 나서 성능 모니터링과 에러 트래킹이 가능해져서 너무 편리하다.
성능 모니터링에서는 전체 쿼리와 어디에서 어느정도 속도가 나왔는지까지 나와서 좋았다.

profile
도전자 | 개발자

0개의 댓글