Skip to main content
AppSignal utilise l’instrumentation Telemetry d’Ecto pour obtenir des informations sur les requêtes exécutées dans votre application en attachant un handler appelé chaque fois qu’une requête est exécutée.
Les événements de requête Ecto sont attachés à la transaction AppSignal en cours. Les applications Phoenix et Plug démarrent cette transaction automatiquement pour chaque requête. Dans les projets Elixir purs, aucune transaction n’est démarrée pour vous : les événements de requête ne sont donc signalés qu’une fois que vous en démarrez une vous-même. Consultez Démarrer de nouvelles transactions.

Instrumentation automatique

L’instrumentation Ecto s’accroche automatiquement à vos repos Ecto si la configuration :otp_app est définie sur le nom de l’app OTP de votre application. L’installeur configure cela automatiquement pour vous.
L’intégration utilise ensuite la configuration de votre application pour savoir quels repos sont configurés, car votre application aura une ligne de configuration comme celle-ci dans config/config.exs :

Désactiver l’instrumentation automatique

Pour désactiver l’instrumentation Ecto automatique, définissez l’option de configuration instrument_ecto sur false.

Instrumenter les preloads Ecto

Comme les requêtes de preload Ecto utilisent en interne plusieurs processus Elixir pour effectuer les différentes requêtes de base de données impliquées, certaines modifications manuelles de votre base de code sont nécessaires pour qu’AppSignal puisse les instrumenter correctement. En haut du module de votre repo Ecto, remplacez use Ecto.Repo par use Appsignal.Ecto.Repo, comme dans l’exemple suivant :
Si le module de votre repo Ecto a sa propre implémentation de la fonction default_options/1, veillez à appeler super à l’intérieur pour fusionner ses options par défaut avec celles de l’instrumentation du repo Ecto d’AppSignal :

Attachement manuel du handler

Pour les repos qui ne sont pas listés dans la configuration :ecto_repos, vous pouvez attacher un handler manuellement lors du démarrage du superviseur de votre application. Dans la plupart des applications, cela se fait dans la fonction start/2 de votre application.
Dans cet exemple, nous avons attaché le handler Telemetry à notre application Phoenix en appelant Appsignal.Ecto.attach/2. Le premier argument est le nom de l’app OTP à laquelle appartient le repo, et le second argument est le module du repo.

Métriques

En plus d’instrumenter vos requêtes Ecto, AppSignal pour Elixir collecte des métriques sur les performances de vos repos Ecto :
  • ecto_query_time : Le temps que la base de données passe à exécuter chaque requête, tagué par repo et hostname, et pour chaque table par repo et source.
  • ecto_queue_time : Le temps passé à attendre une connexion à la base de données depuis le pool, tagué par repo et hostname.
  • ecto_decode_time : Le temps passé à décoder les résultats des requêtes en termes Elixir, tagué par repo et hostname, et pour chaque table par repo et source.
  • ecto_idle_time : Le temps pendant lequel la connexion est restée inactive dans le pool avant d’être utilisée, tagué par repo et hostname.
  • ecto_total_time : La somme du temps de queue, de query et de decode, taguée par repo et hostname, et pour chaque table par repo et source.
AppSignal utilise ces métriques pour créer le Intelligence dashboard Ecto, qui montre des informations clés sur les performances de vos repos Ecto :
Intelligence dashboard affichant les principales métriques Ecto

Le Intelligence dashboard Ecto dans AppSignal