Appsignal.instrument/2-3
La fonction instrument/2 est utilisée pour ajouter de l’instrumentation en enveloppant un morceau
de code dans un span. Un span devient finalement un échantillon, ou un événement dans l’échantillon
d’un autre span dans AppSignal.
Ajouter des spans aux traces
Dans l’exemple suivant, nous avons un contrôleur Phoenix avec une fonctionindex/2
qui appelle une fonction lente. La fonction slow est instrumentée à l’aide de
la fonction Appsignal.instrument/2 qui l’enregistre comme un événement distinct dans
cette requête Phoenix. Elle apparaîtra sur AppSignal.com dans la timeline des événements de
cet échantillon pour mieux comprendre où le plus de temps a été passé pendant la
requête.
Appsignal.instrument3,
et nous passons "slow" comme nom pour l’événement.
Démarrer de nouvelles traces
Dans l’exemple Phoenix, une trace AppSignal a déjà été démarrée, grâce au support natif de Phoenix dans le paquet AppSignal. Tous les frameworks et paquets ne sont pas pris en charge directement et ne démarrent pas automatiquement des traces. Il en va de même pour vos propres applications Elixir pures. Comme pour l’ajout de spans à des traces déjà instrumentées, un nouveau span racine est créé à l’aide de la fonctionAppsignal.instrument/2 :
instrument/3 à la place :
instrument/2-3 l’appelle avec le span ouvert pour permettre une personnalisation supplémentaire. Consultez la documentation sur hex.pm pour toutes les fonctions Span disponibles.
Gestion des exceptions
Pour signaler des erreurs en utilisant l’instrumentation personnalisée, veuillez lire notre guide de gestion des exceptions.Décorateurs de fonction
En utilisant le module décorateurAppsignal.Instrumentation.Decorators, il est
possible d’ajouter de l’instrumentation personnalisée à vos applications Elixir sans
modifier le contenu des fonctions.
Événements de transaction
Dans l’exemple suivant, nous avons un contrôleur Phoenix avec une fonctionindex/2
qui appelle une fonction lente. La fonction slow est instrumentée à l’aide du décorateur
AppSignal transaction_event qui l’enregistre comme un événement distinct dans cette requête
Phoenix. Elle apparaîtra sur AppSignal.com dans la timeline des événements de cet échantillon de
transaction pour donner plus d’informations sur l’endroit où le plus de temps a été passé pendant la requête.
phoenix_controller, phoenix_render, ecto, etc.), vous pouvez également
fournir un nom de groupe au décorateur transaction_event.
get_data_from_github.github_api dans la timeline
des événements. Pour plus d’informations sur la façon dont les noms d’événements sont utilisés, veuillez lire
nos directives de nommage des événements.
Transactions
Dans l’exemple Phoenix, une transaction AppSignal a déjà été démarrée, grâce au support natif de Phoenix dans le paquet AppSignal. Tous les frameworks et paquets ne sont pas pris en charge directement et ne démarrent pas automatiquement de transactions. Il en va de même pour vos propres applications Elixir pures. Pour suivre les décorateurstransaction_event, nous devrons démarrer une
transaction AppSignal au préalable. Nous pouvons démarrer une transaction avec le
décorateur de fonction transaction.
Namespaces
Pour différencier les requêtes HTTP et les jobs en arrière-plan, nous pouvons passer un namespace à la transaction une fois que nous la démarrons. Les deux namespaces suivants sont les namespaces officiels pris en charge par AppSignal.http_request- par défaut - est appelé le namespace « web »background_job- crée le namespace « background »
Namespaces personnalisés
Vous pouvez également créer vos propres namespaces pour suivre les transactions dans une partie distincte de votre application, comme un panneau d’administration. Cela regroupera toutes les transactions avec ce namespace dans une section distincte sur AppSignal.com afin que les contrôleurs d’administration lents n’interfèrent pas avec les moyennes de vitesse de votre application.Canaux Phoenix
Il existe un décorateur de fonction personnalisé pour les canaux Phoenix. Ce décorateur est destiné à être placé avant la fonctionhandle_in/3 d’un module Phoenix.Channel.