Django mailt bij een fout een traceback naar de ADMINS, als dat tenminste goed is ingesteld. Bij tien fouten per minuut zit je mailbox vol, en een fout in een Celery-taak zie je helemaal niet. Met de Sentry Python SDK en errors.nl worden fouten gegroepeerd, met de request, de view en de lokale variabelen erbij.
1. Maak een project aan
Log in bij errors.nl, maak een organisatie en een project aan en kopieer de DSN. Die ziet eruit als https://<sleutel>@ingest.errors.nl/<project>.
2. Installeer de SDK
pip install "sentry-sdk[django]"Gebruik je Flask of FastAPI, installeer dan sentry-sdk[flask] of sentry-sdk[fastapi].
3. Zet hem aan in settings.py
import os import sentry_sdk sentry_sdk.init( dsn=os.environ.get("SENTRY_DSN"), environment=os.environ.get("ENVIRONMENT", "production"), release=os.environ.get("SENTRY_RELEASE"), send_default_pii=False, )
De SDK herkent Django zelf. Bij Flask en FastAPI zet je dezelfde regels voordat je de app aanmaakt. Lokaal laat je SENTRY_DSN leeg, dan wordt er niets verstuurd.
4. Test het
def fout_test(request): return 1 / 0
Koppel de view aan een URL en roep hem aan. Binnen een paar seconden staat de ZeroDivisionError onder Issues, met de URL en de view.
5. Celery en logging
Is Celery geïnstalleerd, dan vangt de SDK ook fouten in taken af. Start sentry_sdk.init dan ook in je worker, bijvoorbeeld in celery.py.
Daarnaast wordt elke logger.error() een fout in errors.nl. Handig, maar elke opgeslagen fout kost een credit. Logt je app veel op niveau error, zet het dan uit met de logging-integratie:
from sentry_sdk.integrations.logging import LoggingIntegration sentry_sdk.init( ..., integrations=[LoggingIntegration(event_level=None)], )
6. Releases
Zet SENTRY_RELEASE bij elke deploy op je versie of git-commit. Dan zie je bij welke release een fout begon, en gaat een opgeloste fout weer open als hij terugkomt.
Persoonsgegevens
Met send_default_pii=False stuurt de SDK geen IP-adressen, cookies of de ingelogde gebruiker mee. Lokale variabelen in de stacktrace kunnen wel persoonsgegevens bevatten; wil je die helemaal niet versturen, zet dan include_local_variables=False.
errors.nl filtert daarnaast wachtwoorden, tokens, e-mailadressen en rekeningnummers uit elke fout voordat we die opslaan. Meer daarover lees je in Foutmonitoring en de AVG.
Meldingen
Wil je weten wanneer er iets misgaat zonder het dashboard open te hebben? Zet bij je project een melding per e-mail aan, of koppel Slack, Teams, Discord of ntfy voor pushmeldingen op je telefoon.