Sentry는 실시간으로 로그를 취합하고 에러를 트래킹 할 수 있는 서비스다.
서버 입장에서는 API가 호출된 기록을 확인하고, N+1이나 Slow Query같은 문제도 확인할 수 있다.
slack과 연결하면 에러가 발생할때마다 슬랙으로 알림이 온다
API가 호출될 때마다 기록을 해줘야하기 때문에 middleware로 sentry를 구성했다.
Sentry 문서도 깔끔해서 간단하게 적용할 수 있었다.
https://docs.sentry.io/platforms/python/
나는 poetry로 라이브러리를 관리하고 있어서 poetry로 설치했다.
poetry add sentry-sdk
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)
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를 연결하고 나서 성능 모니터링과 에러 트래킹이 가능해져서 너무 편리하다.
성능 모니터링에서는 전체 쿼리와 어디에서 어느정도 속도가 나왔는지까지 나와서 좋았다.