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.
config/config.exs :
Désactiver l’instrumentation automatique
Pour désactiver l’instrumentation Ecto automatique, définissez l’option de configurationinstrument_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, remplacezuse Ecto.Repo par use Appsignal.Ecto.Repo, comme dans l’exemple suivant :
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.
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é parrepoethostname, et pour chaque table parrepoetsource. -
ecto_queue_time: Le temps passé à attendre une connexion à la base de données depuis le pool, tagué parrepoethostname. -
ecto_decode_time: Le temps passé à décoder les résultats des requêtes en termes Elixir, tagué parrepoethostname, et pour chaque table parrepoetsource. -
ecto_idle_time: Le temps pendant lequel la connexion est restée inactive dans le pool avant d’être utilisée, tagué parrepoethostname. -
ecto_total_time: La somme du temps de queue, de query et de decode, taguée parrepoethostname, et pour chaque table parrepoetsource.
- 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.

Le Intelligence dashboard Ecto dans AppSignal