Naar hoofdinhoud gaan
AppSignal gebruikt de Telemetry-instrumentatie van Ecto om informatie te verkrijgen over queries die in uw app worden uitgevoerd, door een handler te koppelen die wordt aangeroepen telkens wanneer een query wordt uitgevoerd.

Automatische instrumentatie

De Ecto-instrumentatie haakt automatisch in op uw Ecto-repo’s als de configuratie :otp_app is ingesteld op de OTP-naam van uw app. De installer configureert dit automatisch voor u.
config :appsignal, :config,
  otp_app: :my_app, # Set this to the name of your OTP app
  name: "My app",
  push_api_key: "your-api-key",
  env: Mix.env
De integratie gebruikt vervolgens de configuratie van uw app om uit te zoeken welke repo’s zijn geconfigureerd, aangezien uw app een configuratieregel zoals deze in config/config.exs heeft:
config :my_app,
  ecto_repos: [AppsignalPhoenixExample.Repo]

Automatische instrumentatie uitschakelen

Om automatische Ecto-instrumentatie uit te schakelen, stelt u de configuratieoptie instrument_ecto in op false.

Ecto-preloads instrumenteren

Aangezien Ecto-preload-queries intern verschillende Elixir-processen gebruiken om de betrokken databasequeries uit te voeren, zijn enkele handmatige wijzigingen in uw codebase nodig om AppSignal ze correct te laten instrumenteren. Vervang bovenaan uw Ecto-repo-module use Ecto.Repo door use Appsignal.Ecto.Repo, zoals in het volgende voorbeeld:
defmodule MyApp.Repo do
  # replace `use Ecto.Repo` with `use Appsignal.Ecto.Repo`
  use Appsignal.Ecto.Repo,
    otp_app: :my_app,
    adapter: Ecto.Adapters.Postgres
end
Als uw Ecto-repo-module zijn eigen implementatie van de functie default_options/1 heeft, zorg er dan voor dat u super daarin aanroept om de standaardopties ervan samen te voegen met die van AppSignal’s Ecto-repo-instrumentatie:
defmodule MyApp.Repo do
  use Appsignal.Ecto.Repo, ...

  def default_options(operation) do
    super(operation) ++ [
      # ... your default options here ...
    ]
  end
end

Handmatige handler-koppeling

Voor repo’s die niet in de :ecto_repos-configuratie staan, kunt u een handler handmatig koppelen bij het starten van de supervisor van uw app. In de meeste applicaties wordt dit gedaan in de start/2-functie van uw applicatie.
def start(_type, _args) do
  children = [
    AppsignalPhoenixExample.Repo,
    AppsignalPhoenixExampleWeb.Endpoint
  ]

  Appsignal.Ecto.attach(:my_otp_app, MyApp.Repo)

  opts = [strategy: :one_for_one, name: AppsignalPhoenixExample.Supervisor]
  Supervisor.start_link(children, opts)
end
In dit voorbeeld hebben we de Telemetry-handler aan onze Phoenix-applicatie gekoppeld door Appsignal.Ecto.attach/2 aan te roepen. Het eerste argument is de naam van de OTP-app waartoe de repo behoort, en het tweede argument is de module van de repo.

Metrics

Naast het instrumenteren van uw Ecto-queries verzamelt AppSignal voor Elixir metrics over de performance van uw Ecto-repo’s:
  • ecto_query_time: De tijd die de database besteedt aan het uitvoeren van elke query, getagd met repo en hostname, en voor elke tabel met repo en source.
  • ecto_queue_time: De tijd besteed aan het wachten op een databaseverbinding uit de pool, getagd met repo en hostname.
  • ecto_decode_time: De tijd besteed aan het decoderen van query-resultaten naar Elixir-termen, getagd met repo en hostname, en voor elke tabel met repo en source.
  • ecto_idle_time: De tijd dat de verbinding inactief was in de pool voordat deze werd opgehaald, getagd met repo en hostname.
  • ecto_total_time: De som van queue-, query- en decodeertijd, getagd met repo en hostname, en voor elke tabel met repo en source.
AppSignal gebruikt deze metrics om het Ecto magic dashboard te maken, dat belangrijke inzichten toont in de performance van uw Ecto-repo’s:
Magic dashboard met belangrijke Ecto-metrics