Solicite um DSN para um dos administradores do Sentry.
- Apps em FASTAPI devem ser criados como aplicação em ASGI. Não há uma opção nativa para o framework.
As notificações para o slack do projeto devem apontar para os canais:
#sentry-warnings-v1- Para alertar o pessoal relacionado aos projetos v1;#sentry-warnings-v2- Para alertar o pessoal relacionado aos projetos v2.
E ativar as tags:
environment,user,release,runtime,levelComo integrar o Sentry à sua aplicação:
Adicione o Sentry ao arquivo de dependências padrão do projeto (procure sempre pela última versão):
sentry_sdk==1.12.1Crie um arquivo version.py no mesmo diretório de seu arquivo main:
from io import open
read_version = lambda filename: open(filename, "r", encoding="utf-8").read()
""" It defines the project current version """
__version__ = read_version(".version").strip()
if __name__ == "__main__":
print(__version__)Adicione as importações no cabeçalho do arquivo main.py:
from sentry_sdk.integrations.starlette import StarletteIntegration
from sentry_sdk.integrations.fastapi import FastApiIntegration
import sentry_sdk
from app.version import __version__Inicialize o sdk informando o dns (SENTRY_URL) e um ambiente (production,development, homolog, etc.). Configure as variáveis de ambiente de modo que SENTRY_URL e SENTRY_ENVIRONMENT sejam vazios quando em ambiente local.
sentry_sdk.init(
SENTRY_URL,
environment=SENTRY_ENVIRONMENT,
send_default_pii=True,
sample_rate=1.0,
traces_sample_rate=1,
release=__version__,
integrations=[StarletteIntegration(), FastApiIntegration()],
)Adicione o seguinte trecho ao final do arquivo main:
@app.middleware("http")
async def sentry_exception(request: Request, call_next):
try:
response = await call_next(request)
return response
except Exception as ex:
with sentry_sdk.push_scope() as scope:
scope.set_context("request", request)
scope.user = {"ip_address": request.client.host}
sentry_sdk.capture_exception(ex)
raise