Monitoring GenServer calls with Scout

The latest release (0.3.0) of Scout's Elixir APM package adds the ability to monitor GenServer calls. What is GenServer and how do you monitor it?

A short intro to GenServer

If you're coming from a Ruby background, you've probably used Sidekiq or similar to do background work outside of the web request cycle. With Elixir, there are multiple legitimate ways to do background work.

GenServer - short for generic service - is one way to perform work asynchronously. GenServer gives you a lot more flexibility than a specific background library.

Instrumenting GenServer calls

The scout_apm package lets you monitor the execution of GenServer calls. You'll get high-level metrics, like throughput and and mean/95th call times and detailed transactions traces (like Ecto queries and HTTP calls).

Instrumenting GenServer is straightforward: - use our tracing library, then instrument via @transaction module attributes. An example:

defmodule Flight.Checker do
  use GenServer
  use ScoutApm.Tracing

  # Will appear under "Background Jobs" in the UI, named "Flight.handle_check".
  @transaction(type: "background", name: "check")
  def handle_call({:check, flight}, _from, state) do
    # Do work...
  end

GenServer data appears in the "Background Jobs" area of the Scout UI. Get started on our free plan or checkout our Elixir docs.