-
-
Notifications
You must be signed in to change notification settings - Fork 199
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add SpanProcessor for OpenTelemetry #875
base: master
Are you sure you want to change the base?
Conversation
0ebd132
to
dee9540
Compare
@whatyouhide ☝🏻 I'm having trouble figuring out these failures. Could you tell me how I could debug what exactly causes the :sentry app startup failure? We start it manually in the umbrella test helpers and for whatever reason it started failing when opentelemetry is included. |
Adding just the OTel deps without any other changes leads to the same issue? |
please write some minimal description in the PR about
|
@whatyouhide @sl0thentr0py I narrowed it down to |
@whatyouhide for the time being I addressed it by using optional deps for otel packages via 6fdf121 but then one of the tests in event_test.exs started to fail so I fixed it via d04c5d3 even though I don't understand what's going on there 🙃 |
@solnic is this ready for review? It's still a draft |
Not yet. I got it working but phoenix + bandit spans are not processed in a way that would make sense for Sentry for some reason. I've been investigating how to fix. It seems like phoenix spans are not coming in as children of bandit spans so there's a disconnect here. I'll figure it out 🙂 |
If we're just shipping a We will revisit packaging later once we have a proper working prototype. |
b607ac1
to
bdcc5de
Compare
@sl0thentr0py @whatyouhide this is now open for reviews. I got it deployed to production already and it's working well (see screenshots in the description). |
okay I'm taking a preliminary look now one thing we definitely need is that instead of the boolean
without these, it is very hard for people to control quota spend so this is a hard requirement |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
some suggestions, looks very good otherwise!
alias Sentry.Interfaces.Span | ||
|
||
@impl true | ||
def on_start(_ctx, otel_span, _config) do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The way you've implemented it, we can do nothing in on_start
since the on_end
logic is sufficient to build the span tree and transaction.
This will also simplify your SpanStorage.update_span
where you can remove the unnecessary deletes.
(This is also how we've done it in the new python and JS span processors.)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sl0thentr0py I'll dig into this more but when I make on_start a no-op the tests are no longer passing 🙃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking like a good start but still a bunch of work left to do. Let me know if any of the comments are not clear!
9fcc55e
to
65c039c
Compare
@solnic I’m assuming you're still working on this so re-request my review if this gets ready again. |
@whatyouhide yes, wrapping it up today, still a couple of things to address 🙃 |
c9152c6
to
1654724
Compare
@sl0thentr0py I'll add traces_sampler config in a separate PR |
01585a8
to
5e8fc99
Compare
@whatyouhide @sl0thentr0py ready for another round of reviews 🤞🏻 |
I'll review tomorrow. |
@@ -0,0 +1,31 @@ | |||
if Code.ensure_loaded?(:otel_sampler) do | |||
defmodule Sentry.OpenTelemetry.Sampler do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you elaborate on why we need a Sentry-specific sampler?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@whatyouhide in order to provide a standard interface for traces_sampler
option we need a custom abstraction for this
require OpenTelemetry | ||
|
||
@fields Record.extract(:span, from_lib: "opentelemetry/include/otel_span.hrl") | ||
Record.defrecordp(:span, @fields) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this conversation is resolved?
To make this work you need to add opentelemetry deps:
Then configure our span processor:
Things should start looking more or less like this: