Home

Awesome

Opencensus

CircleCI Hex version badge

Wraps some :opencensus capabilities for Elixir users so they don't have to learn them some Erlang in order to get OpenCensus distributed tracing.

Installation

Add opencensus_elixir to your deps in mix.exs:

def deps do
  [
    {:opencensus, "~> 0.9"},
    {:opencensus_elixir, "~> 0.3.0"}
  ]
end

Usage

Wrap your code with the Opencensus.Trace.with_child_span/3 macro to execute it in a fresh span:

import Opencensus.Trace

def traced_fn(arg) do
  with_child_span "traced" do
    :YOUR_CODE_HERE
  end
end

Alternatives

If you prefer driving Erlang packages directly (see also :telemetry), copy what you need from lib/opencensus/trace.ex and call Logger.set_logger_metadata/0 if there's any chance of Logger use within the span.

def traced_fn() do
  try do
    :ocp.with_child_span("name", %{fn: :traced_fn, mod: __MODULE__})
    Logger.set_logger_metadata()

    :YOUR_CODE_HERE
  after
    :ocp.finish_span()
    Logger.set_logger_metadata()
  end
end

If try .. after .. end feels too bulky and you're sure you won't need Logger, try :ocp.with_child_span/3:

def traced_fn() do
  :ocp.with_child_span("traced", %{fn: :traced_fn, mod: __MODULE__}, fn () ->
    :YOUR_CODE_HERE
  end)
end

Troubleshooting

To see your spans, use the :oc_reporter_stdout reporter, either in config:

config :opencensus, reporters: [{:oc_reporter_stdout, []}]

... or at the iex prompt:

iex> :oc_reporter.register(:oc_reporter_stdout)