opentelemetry-erlang-contrib/instrumentation/opentelemetry_ecto
Andrew Rosa 56c6503a93
Fix two use cases of Ecto span propagation (#82)
First one is related to `OpenTelemetry.Ctx` API. I've noticed in a few
scenarios the current span of a trace may get lost after Ecto calls.

Looking at the The `attach/1` typespec, it's a Ctx -> Token, while
`dettach/1` as Token -> Ctx function. That made me assume the expected
input of dettach is the return type of attach. Indeed, after this change
we got the behavior of Ecto calls preserve the parent span untouched.

That leads to a second bug found. When ecto does simple calls within a
Task, due the special propagation code for preloads that means it will
skip the current span, if any.  The solution here is to first check the
current process.

One test was added to reproduce this bug.
2022-11-15 17:55:32 -07:00
..
config Make Ecto spans of preloads children of the parent span (#49) 2022-03-24 14:19:24 -06:00
lib Fix two use cases of Ecto span propagation (#82) 2022-11-15 17:55:32 -07:00
priv/test_repo/migrations Make Ecto spans of preloads children of the parent span (#49) 2022-03-24 14:19:24 -06:00
test Fix two use cases of Ecto span propagation (#82) 2022-11-15 17:55:32 -07:00
.formatter.exs Migrate otel ecto (#16) 2021-10-08 15:38:18 -06:00
.gitignore Migrate otel ecto (#16) 2021-10-08 15:38:18 -06:00
CHANGELOG.md Publish updates for Phoenix, Ecto, and Cowboy (#79) 2022-06-03 10:54:37 -06:00
LICENSE Migrate otel ecto (#16) 2021-10-08 15:38:18 -06:00
README.md Publish updates for Phoenix, Ecto, and Cowboy (#79) 2022-06-03 10:54:37 -06:00
docker-compose.yml Otel 1.0.0-rc.3 support (#27) 2021-10-13 21:11:26 -06:00
mix.exs update elixir package deps (#126) 2022-11-15 17:48:50 -07:00
mix.lock update elixir package deps (#126) 2022-11-15 17:48:50 -07:00
rebar.lock Otel 1.0.0-rc.4 updates (#54) 2021-12-28 16:39:06 -07:00

README.md

OpentelemetryEcto

Telemetry handler that creates Opentelemetry spans from Ecto query events. Because Ecto emits telemetry events only after queries have finished, OpentelemetryEcto estimates the start time of the span by subtracting the reported total duration from the current timestamp.

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

OpentelemetryEcto.setup([:blog, :repo])

See the documentation for OpentelemetryEcto.setup/2 for additional options that may be supplied.

Installation

If available in Hex, the package can be installed by adding opentelemetry_ecto to your list of dependencies in mix.exs:

def deps do
  [
    {:opentelemetry_ecto, "~> 1.0"}
  ]
end

Compatibility Matrix

OpentelemetryEcto Version Otel Version Notes
v0.1.0 <= v.0.5.0
v1.0.0-rc.1 v1.0.0-rc.1
v1.0.0-rc.2 v1.0.0-rc.2
v1.0.0-rc.3 v1.0.0-rc.3
v1.0.0-rc.4 v1.0.0-rc.4
v1.0 v1.0

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/opentelemetry_ecto.