Superviser les erreurs avec Sentry — đŸ”” Confirmé¶

Sentry est un service de supervision des erreurs : dĂšs qu’une page de votre site plante (erreur 500, exception dans le code), Sentry reçoit automatiquement un rapport dĂ©taillĂ© et peut vous prĂ©venir par e-mail. Vous ĂȘtes ainsi informĂ© d’un problĂšme avant mĂȘme qu’un visiteur le signale, et vous disposez des informations nĂ©cessaires pour le corriger ou le transmettre Ă  l’équipe de Sites Conformes.

Chaque rapport contient notamment :

  • la trace complĂšte de l’erreur (fichier, ligne, valeurs des variables) ;

  • la requĂȘte qui l’a provoquĂ©e (adresse de la page, mĂ©thode, en-tĂȘtes) ;

  • l’utilisateur connectĂ©, le cas Ă©chĂ©ant, si vous l’autorisez (voir DonnĂ©es personnelles) ;

  • l’environnement (production, recette
) et le nombre d’occurrences.

Sentry est optionnel et dĂ©sactivĂ© par dĂ©faut : tant que la variable SENTRY_DSN n’est pas renseignĂ©e, aucune donnĂ©e n’est envoyĂ©e.

Prérequis¶

  • Un compte Sentry. Vous pouvez utiliser le service hĂ©bergĂ© sentry.io, une instance auto-hĂ©bergĂ©e, ou une instance mutualisĂ©e proposĂ©e par votre administration : renseignez-vous auprĂšs de votre Ă©quipe informatique avant d’en crĂ©er une nouvelle. Pour les start-up d’État, une instance est mise Ă  disposition. (cf. doc de Beta.gouv.fr.)

  • Un projet Sentry de type « Django », créé depuis l’interface de Sentry (Projects → Create Project, plateforme Django).

  • Le DSN du projet : c’est l’adresse Ă  laquelle votre site envoie ses rapports. Vous la trouvez dans Settings → Projects → (votre projet) → Client Keys (DSN). Elle ressemble Ă  :

    https://0123456789abcdef@example.sentry.instance.tld/1234567
    

Note

Un mĂȘme projet Sentry peut recevoir les erreurs de plusieurs instances (par exemple la production et la recette) : elles sont distinguĂ©es grĂące Ă  la variable SENTRY_ENVIRONMENT.

1. Activer Sentry¶

Renseignez les variables d’environnement suivantes :

Variable

Valeur

Obligatoire

SENTRY_DSN

Le DSN copié depuis Sentry

Oui

SENTRY_ENVIRONMENT

Nom de l’instance : production, recette, staging


Non (défaut : production)

SENTRY_SEND_DEFAULT_PII

True pour joindre des données personnelles aux rapports (voir Données personnelles)

Non (défaut : False)

SENTRY_TRACES_SAMPLE_RATE

Proportion des requĂȘtes mesurĂ©es pour le suivi des performances, entre 0 et 1 (voir Suivi des performances)

Non (défaut : désactivé)

La façon de les définir dépend de votre mode de déploiement.

Sur Scalingo¶

Dans le tableau de bord de votre application, onglet « Environnement », ajoutez les variables (voir Sur Scalingo (ou PaaS) — 🟱 DĂ©butant). Scalingo redĂ©marre l’application pour prendre en compte les nouveaux rĂ©glages.

En ligne de commande, l’équivalent est :

scalingo --app mon-site env-set \
  SENTRY_DSN="https://0123456789abcdef@example.sentry.instance.tld/1234567" \
  SENTRY_ENVIRONMENT=production

Sur un serveur Linux ou avec Docker¶

Ajoutez les lignes suivantes au fichier .env de votre instance :

SENTRY_DSN=https://0123456789abcdef@example.sentry.instance.tld/1234567
SENTRY_ENVIRONMENT=production

Puis redĂ©marrez l’application, car les rĂ©glages ne sont lus qu’au dĂ©marrage :

2. Vérifier que les erreurs remontent¶

Sites Conformes fournit une page de test qui provoque volontairement une erreur. Elle est désactivée par défaut.

  1. Ajoutez la variable SENTRY_USE_DEBUG_URL=True puis redĂ©marrez l’application.

  2. Ouvrez l’adresse https://votre-site.gouv.fr/sentry-debug/ dans votre navigateur. Une page d’erreur 500 s’affiche : c’est normal.

  3. Dans Sentry, ouvrez votre projet, onglet Issues : une erreur ZeroDivisionError: division by zero doit apparaĂźtre aprĂšs quelques secondes.

  4. Supprimez la variable SENTRY_USE_DEBUG_URL (ou remettez-la Ă  False) puis redĂ©marrez l’application.

Important

Ne laissez pas SENTRY_USE_DEBUG_URL activĂ©e. La page /sentry-debug/ est accessible Ă  tout le monde, sans connexion : n’importe qui pourrait l’utiliser pour gĂ©nĂ©rer des erreurs en masse et saturer votre quota Sentry.

Si aucune erreur n’apparaüt :

  • vĂ©rifiez que le DSN est copiĂ© en entier, sans espace ni guillemet superflu ;

  • vĂ©rifiez que l’application a bien Ă©tĂ© redĂ©marrĂ©e aprĂšs la modification ;

  • vĂ©rifiez que votre serveur peut joindre l’adresse de Sentry (un pare-feu ou un proxy sortant peut bloquer l’envoi) ;

  • vĂ©rifiez le filtre d’environnement en haut de l’onglet Issues dans Sentry.

3. Suivre et traiter les erreurs¶

Dans Sentry, l’onglet Issues regroupe les erreurs identiques en une seule ligne, avec leur nombre d’occurrences et la date de derniùre apparition. Pour chaque erreur, vous pouvez :

  • consulter le dĂ©tail : trace, page concernĂ©e, navigateur (et utilisateur si SENTRY_SEND_DEFAULT_PII est activĂ©e) ;

  • la marquer comme rĂ©solue (Resolve) une fois corrigĂ©e : si elle se reproduit, Sentry la rouvre et vous prĂ©vient ;

  • l’ignorer (Archive) si elle n’est pas pertinente.

Les alertes se rĂšglent dans Alerts (par exemple : un e-mail Ă  chaque nouvelle erreur, ou au-delĂ  d’un certain nombre d’occurrences par heure). Sentry peut aussi notifier une messagerie d’équipe via ses intĂ©grations.

Astuce

Si une erreur semble venir de Sites Conformes lui-mĂȘme et non de votre contenu ou de votre configuration, vous pouvez la signaler en ouvrant un ticket en joignant la trace fournie par Sentry (aprĂšs en avoir retirĂ© les donnĂ©es personnelles).

Suivi des performances (optionnel)¶

En plus des erreurs, Sentry peut mesurer les performances du site : temps de rĂ©ponse de chaque page, dĂ©tail des requĂȘtes Ă  la base de donnĂ©es et des appels Ă  des services externes. Ces mesures apparaissent dans l’onglet Performance (ou Traces) de Sentry et permettent de repĂ©rer les pages lentes et leur cause.

Ce suivi est dĂ©sactivĂ© par dĂ©faut. Pour l’activer, dĂ©finissez la variable SENTRY_TRACES_SAMPLE_RATE : c’est la proportion des requĂȘtes mesurĂ©es, entre 0 et 1. Par exemple, 0.1 signifie qu’une requĂȘte sur dix est mesurĂ©e.

Chaque requĂȘte mesurĂ©e est envoyĂ©e Ă  Sentry et consomme du quota. Ce rĂ©glage n’a en revanche aucun effet sur les erreurs : elles sont toujours toutes remontĂ©es.

Valeurs suggérées :

Environnement

Valeur

Pourquoi

Développement local

1.0

Peu de requĂȘtes : on mesure tout.

Recette / préproduction

0.5 Ă  1.0

Trafic faible ; utile pour mesurer avant une mise en production.

Production, trafic modéré (quelques milliers de visites par jour)

0.1

Bon compromis entre représentativité et quota.

Production, fort trafic

0.01 Ă  0.05

Suffisant pour des statistiques fiables.

Suivi des performances inutile

(ne pas définir)

Désactivé.

Par exemple, pour une production :

# Scalingo
scalingo --app mon-site env-set SENTRY_TRACES_SAMPLE_RATE=0.1

# Serveur Linux ou Docker : dans le fichier .env, puis redémarrer
SENTRY_TRACES_SAMPLE_RATE=0.1

Note

Sur une instance Sentry mutualisĂ©e (comme celle de Beta.gouv.fr), le volume de donnĂ©es reçu est partagĂ© entre tous les projets : renseignez-vous auprĂšs de l’équipe qui l’administre avant d’augmenter cette valeur. Dans tous les cas, commencez bas et ajustez selon le volume constatĂ© dans Sentry.

Données personnelles¶

Par dĂ©faut, Sites Conformes n’envoie pas de donnĂ©es personnelles Ă  Sentry : les rapports ne contiennent ni l’adresse IP du visiteur, ni l’identitĂ© de l’utilisateur connectĂ©, ni les cookies.

Ces informations peuvent toutefois aider Ă  comprendre une erreur (savoir quel compte l’a rencontrĂ©e, par exemple). Pour les joindre aux rapports, ajoutez la variable :

SENTRY_SEND_DEFAULT_PII=True

Elle active l’option send_default_pii de Sentry : les rapports contiennent alors l’adresse IP du visiteur, l’identifiant, le nom d’utilisateur et l’adresse e-mail de l’utilisateur connectĂ©, ainsi que les cookies et en-tĂȘtes de la requĂȘte.

Important

N’activez cette option qu’en connaissance de cause. Elle constitue un traitement de donnĂ©es personnelles au sens du RGPD.

Elle constitue Ă©galement un risque de sĂ©curitĂ©, dans l’éventualitĂ© oĂč l’instance Sentry serait piratĂ©e. La documentation de Beta recommande fortement de ne pas envoyer de donnĂ©es personnelles Ă  Sentry.

Si vous l’activez :

  • privilĂ©giez une instance Sentry hĂ©bergĂ©e dans l’Union europĂ©enne (instance auto-hĂ©bergĂ©e, instance de votre administration, ou rĂ©gion UE de sentry.io) ;

  • mentionnez ce traitement dans votre registre des traitements et, si besoin, dans les mentions lĂ©gales ou la politique de confidentialitĂ© du site ;

  • limitez l’accĂšs au projet Sentry aux seules personnes qui en ont besoin ;

  • si nĂ©cessaire, masquez certains champs avec les rĂ©glages Security & Privacy → Data Scrubbing du projet Sentry.

Désactiver Sentry¶

Supprimez la variable SENTRY_DSN (ou laissez-la vide), puis redĂ©marrez l’application. Plus aucune donnĂ©e n’est alors envoyĂ©e Ă  Sentry.

Cas d’une intĂ©gration en paquet¶

Si vous utilisez Sites Conformes comme paquet dans votre propre projet Django (voir Configuration), l’initialisation de Sentry n’est pas fournie par le paquet : ajoutez-la dans le settings.py de votre projet, par exemple :

import os

if sentry_dsn := os.getenv("SENTRY_DSN"):
    import sentry_sdk

    sentry_sdk.init(
        dsn=sentry_dsn,
        send_default_pii=getenv_bool("SENTRY_SEND_DEFAULT_PII", False),
        environment=os.getenv("SENTRY_ENVIRONMENT", "production"),
        traces_sample_rate=float(rate) if (rate := os.getenv("SENTRY_TRACES_SAMPLE_RATE")) else None,
    )

La bibliothĂšque sentry-sdk[django] est installĂ©e automatiquement avec Sites Conformes : aucune dĂ©pendance supplĂ©mentaire n’est nĂ©cessaire.

Pour aller plus loin¶