opentelemetry-erlang-contrib/instrumentation/opentelemetry_phoenix
Derek Kraan ddb2d3b963
Only attempt to record an exception if there is an active span. (#37)
There is an edge case, if you use `forward/4` and use Plug.ErrorHandler,
then when an exception reaches the outer router, then Plug.send_resp
will be called, triggering `[:phoenix, :endpoint, :stop]`, and the span
will be gone by the time the outer router gets the exception. This
causes this telemetry handler to crash and be detached.

Sequence of events:
- [:phoenix, :endpoint, :start]
- [:phoenix, :router_dispatch, :exception] (inner router)
- [:phoenix, :endpoint, :stop]
- [:phoenix, :router_dispatch, :exception] (outer router) ** here there is no span, crashes
2022-03-18 05:21:26 -06:00
..
config Otel 1.0.0-rc.4 updates (#54) 2021-12-28 16:39:06 -07:00
lib Only attempt to record an exception if there is an active span. (#37) 2022-03-18 05:21:26 -06:00
test Only attempt to record an exception if there is an active span. (#37) 2022-03-18 05:21:26 -06:00
.formatter.exs Otel phoenix migration (#4) 2021-09-12 13:49:24 -06:00
.gitignore Otel phoenix migration (#4) 2021-09-12 13:49:24 -06:00
CHANGELOG.md Otel 1.0 support (#57) 2022-01-04 18:58:06 -07:00
LICENSE Otel phoenix migration (#4) 2021-09-12 13:49:24 -06:00
README.md Otel 1.0.0-rc.4 updates (#54) 2021-12-28 16:39:06 -07:00
mix.exs Otel 1.0 support (#57) 2022-01-04 18:58:06 -07:00
mix.lock Otel 1.0 support (#57) 2022-01-04 18:58:06 -07:00

README.md

OpentelemetryPhoenix

EEF Observability WG project Hex.pm Build Status

Telemetry handler that creates Opentelemetry spans from Phoenix events.

After installing, setup the handler in your application behaviour before your top-level supervisor starts.

OpentelemetryPhoenix.setup()

See the documentation for OpentelemetryPhoenix.setup/1 for additional options that may be supplied.

Installation

def deps do
  [
    {:opentelemetry_phoenix, "~> 1.0.0-rc.6"}
  ]
end

Compatibility Matrix

OpentelemetryPhoenix Version Otel Version Notes
v0.1.0 <= v.0.5.0
v1.0.0-rc.3 v1.0.0-rc.1
v1.0.0-rc.2
v1.0.0-rc.4 v1.0.0-rc.2 Otel rc.3 will be a breaking change
v1.0.0-rc.5 v1.0.0-rc.3
v1.0.0-rc.6 v1.0.0-rc.4

Note on phoenix integration

OpentelemetryPhoenix requires phoenix to use Plug.Telemetry in order to correctly trace endpoint calls.

The endpoint.ex file should look like:

defmodule MyApp.Endpoint do
  use Phoenix.Endpoint, otp_app: :my_app
  ...
  plug Plug.Telemetry, event_prefix: [:phoenix, :endpoint]
  ...
end

The Phoenix endpoint.ex template can be used as a reference