ddb2d3b963
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 |
||
---|---|---|
.. | ||
config | ||
lib | ||
test | ||
.formatter.exs | ||
.gitignore | ||
CHANGELOG.md | ||
LICENSE | ||
README.md | ||
mix.exs | ||
mix.lock |
README.md
OpentelemetryPhoenix
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