Monitoring GenServer calls with Scout

BY Doug Breaker

May 30, 2017

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...

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