Ignorer les erreurs
La configuration d’AppSignal permet d’ignorer des erreurs. En fournissant une liste d’erreurs spécifiques, AppSignal n’enverra pas d’alertes lorsque ces erreurs sont levées.Gestion des exceptions
Le simple fait d’ignorer une erreur fera taire les notifications, mais pourrait potentiellement masquer un problème plus important. Pour cette raison, nous vous recommandons d’ajouter une gestion des exceptions avec des blocsbegin .. rescue à votre application.
En utilisant begin .. rescue, vous pouvez attraper des exceptions spécifiques et ajouter un
chemin de code alternatif pour le cas où une exception se produit, comme le rendu de pages 404
ou la fourniture à l’utilisateur de messages d’erreur plus détaillés sur ce qui a mal tourné.
Rails rescue_from
Rails fournit un mécanisme pour gérer les exceptions au niveau du contrôleur. En définissant une instructionrescue_from pour une erreur spécifique, il est possible de créer
un chemin de code alternatif pour le cas où cette exception est levée. Parce que cela peut être
défini à n’importe quel niveau de contrôleur, cela permet d’ajouter une gestion des exceptions
au niveau de l’application.
rescue_from peuvent être trouvées dans le guide Rails sur
ActionController.
Gérer les 404
Si un visiteur arrive sur une URL qui ne peut pas être gérée par votre routage ou contrôleur, Rack et d’autres frameworks lèveront une exception. C’est généralement une bonne idée de gérer ces exceptions avec une réponse 404 pour vos utilisateurs. Dans les contrôleurs où une opérationfind est effectuée en fonction d’un paramètre d’une
URL, il est recommandé de gérer ActiveRecord::RecordNotFound (ou l’équivalent dans
votre ORM préféré) pour afficher également une réponse 404. Cela peut cependant masquer
de vrais bugs, donc cela doit être fait avec précaution.
Gérer les jetons d’authenticité invalides
Rails dispose d’un mécanisme qui protège vos formulaires contre le remplissage trop facile par des bots. Chaque fois qu’un formulaire est posté sans jeton d’authenticité correct, uneActionController::InvalidAuthenticityToken sera levée.
Parfois, des utilisateurs légitimes peuvent également rencontrer ces erreurs, c’est donc une bonne
idée d’avoir une page d’erreur distincte expliquant ce qui s’est passé. Nous conseillons de
renvoyer cette page avec une réponse 422 (Unprocessable Entity).
Gérer les tentatives de piratage
Vous pourriez obtenir des erreurs parce que des bots ou des pirates essaient d’exploiter des problèmes de sécurité tels que le célèbre exploit YAML. Les versions plus récentes de Rails lèveront unHash::DisallowedType lorsque cela se produit. Une RangeError est également souvent le résultat
d’une tentative de piratage. Vous pourriez attraper ce type d’erreurs et renvoyer une réponse 403
(Forbidden).
Méthodes d’assistance pour le signalement des exceptions
AppSignal fournit une interface unique pour signaler les exceptions avecAppsignal.report_error.
Si votre application utilise la version 3 ou antérieure de la gem Ruby, consultez la section sur la gestion des exceptions héritée.
Appsignal.report_error
Les applications peuvent avoir une gestion des exceptions où elles ne veulent pas faire planter le processus Ruby. En ajoutant la gestion des exceptions, l’exception ne remontera plus jusqu’à l’instrumentation AppSignal. AppSignal ne signalera pas ces exceptions. Si vous voulez signaler l’exception sans faire planter l’application, utilisez l’assistantAppsignal.report_error pour la signaler à AppSignal depuis la gestion des exceptions.
Si une Transaction AppSignal est active, cet assistant ajoutera l’exception à la Transaction en cours. Les applications peuvent signaler plusieurs exceptions sur une seule Transaction.
Si aucune Transaction n’est active, cet assistant créera une nouvelle Transaction et signalera l’exception sur la Transaction nouvellement créée. AppSignal signalera toujours l’exception de cette façon lors de l’utilisation de Appsignal.report_error.
Ajout de métadonnées
Il est possible de personnaliser les métadonnées sur la Transaction pour l’exception en passant un bloc à l’assistantAppsignal.report_error. Consultez nos guides Tagging et Personnalisation des données pour plus d’informations sur le type de données qui peuvent être ajoutées dans ce bloc.
Les métadonnées définies dans le bloc de Appsignal.report_error ne s’appliquent qu’à l’exception passée à l’assistant. Les métadonnées définies en dehors des blocs Appsignal.report_error sont ajoutées à toutes les exceptions s’il y a une transaction active.
Signaler plusieurs exceptions
Plusieurs erreurs peuvent être signalées dans une seule Transaction, comme une action de contrôleur Rails traitant une requête HTTP ou un job en arrière-plan Sidekiq. Un maximum de 10 erreurs peut être défini sur une seule Transaction. Si plusieurs exceptions sont signalées dans une seule Transaction, les métadonnées définies dans le bloc deAppsignal.report_error ne s’appliquent qu’à l’exception passée à l’assistant. Les métadonnées définies en dehors des blocs Appsignal.report_error sont ajoutées à toutes les exceptions.
Signaler les exceptions qui font planter un processus
Par défaut, AppSignal signalera les exceptions qui font planter un processus Ruby tant qu’AppSignal est démarré avant que l’exception ne se produise.enable_at_exit_reporter sur false.
Processus Ruby de courte durée
Lorsque vous signalez des exceptions à partir de scripts Ruby, de tâches Rake, de processus Ruby de courte durée, lisez la documentation sur ces pages pour savoir quand appelerAppsignal.stop pour vous assurer que toutes les exceptions sont signalées à AppSignal.
Gestion des exceptions héritée
Lisez cette section lorsque vous utilisez la version 3 ou antérieure de la gem AppSignal pour Ruby. Pour les versions plus récentes de notre gem Ruby, utilisez l’assistantAppsignal.report_error.
AppSignal fournit deux méthodes d’assistance pour le signalement des exceptions, celle que vous utilisez dépendra du contexte de l’erreur. Les méthodes sont :
set_error: l’assistantset_errordéfinit l’erreur sur la Transaction actuellement active. Si aucune transaction n’est active, aucune erreur n’est signalée. Définir une erreur sur la transaction actuellement active remplace toute erreur précédemment définie sur la transaction.send_error: utilisezsend_errorpour signaler des erreurs lorsqu’aucune transaction AppSignal n’est active.
Appsignal.set_error
Il existe des scénarios où vous avez votre propre gestion des exceptions et où vous ne voulez pas faire planter le processus Ruby. En ajoutant votre propre gestion des exceptions, l’erreur ne remonte plus jusqu’à l’intégration AppSignal et n’est donc pas enregistrée automatiquement. Si vous voulez toujours suivre l’erreur, vous pouvez utiliserAppsignal.set_error pour ajouter l’exception à la Transaction AppSignal en cours. L’erreur sera enregistrée dans AppSignal, mais votre processus ne plantera pas.
set_error ne fonctionne que lorsqu’il existe une transaction AppSignal active. Sinon, l’erreur sera ignorée. Une transaction est active dans la plupart de nos intégrations automatiquement prises en charge et lors de l’utilisation de Appsignal.monitor ou Appsignal.monitor_transaction. Pour plus d’informations sur le moment où utiliser Appsignal.monitor_transaction, consultez notre guide d’instrumentation pour les scripts et les tâches en arrière-plan.
Consultez Appsignal.send_error pour envoyer des erreurs sans transaction AppSignal.
Appsignal.send_error
AppSignal fournit un mécanisme pour envoyer des erreurs à AppSignal sans avoir à démarrer une transaction. C’est utile pour suivre les erreurs qui se produisent dans du code qui n’est pas dans un contexte de requête web ou de tâche en arrière-plan, comme des tâches Rake ou des scripts Ruby séparés. C’est utile pour l’instrumentation qui ne crée pas automatiquement de transactions AppSignal à profiler, comme nos intégrations. Vous pouvez utiliser la méthodeAppsignal.send_error pour envoyer directement une exception à AppSignal depuis n’importe quel endroit de votre code sans démarrer une transaction AppSignal avec Appsignal.monitor au préalable.
Ajout de métadonnées
Dans la gem AppSignal pour Ruby 2.9 et plus récente, un bloc supplémentaire peut être passé à la méthodeAppsignal.send_error pour ajouter plus de métadonnées à la transaction d’erreur. Cela inclut des métadonnées telles que le nom de l’action et les paramètres. Les anciennes versions de la gem Ruby ne permettront pas de définir des métadonnées supplémentaires.
Appsignal.listen_for_error
Une autre façon de suivre les erreurs avec AppSignal consiste à envelopper le code qui pourrait lever une exception dans un bloclisten_for_error. Si une exception est levée
dans ce bloc, elle est automatiquement suivie par AppSignal et re-levée. Cela
permet à l’application et aux frameworks de gérer l’exception comme d’habitude.