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 avec les graphiques suivants :
  • Query time : 95e percentile du temps passé par la base de données à exécuter chaque requête, par table.
  • Throughput : nombre de requêtes par table.
  • Total time : 95e percentile du temps Ecto total (queue, query et decode), par table.
  • Decode time : temps moyen passé à décoder les résultats des requêtes en termes Elixir, par table.
  • Queue time : 95e percentile du temps passé à attendre une connexion à la base de données depuis le pool, par hôte.
  • Idle time : temps moyen pendant lequel les connexions sont restées inactives dans le pool avant d’être utilisées, par hôte.
  • Total time per host : temps Ecto total moyen (queue, query et decode), par hôte.
Intelligence dashboard affichant les principales métriques Ecto

Le Intelligence dashboard Ecto dans AppSignal