-
Notifications
You must be signed in to change notification settings - Fork 205
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
feat: Add OpenTelemetry integration #149
Conversation
This requires dropping Python 2 support, right? (#131) The samples PR is more or less ready to be merged (IMO) and we can then make one final Python 2 compatible release, and drop Python 2 support immediately afterwards. |
Yes, OpenTelemetry does not support any Python version before 3.4. |
74bbff1
to
d30d4f2
Compare
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.
Disclaimer - I would have to familiarize myself with the opentelemetry
library more, thus I primarily focused on the code aspects, and less on the actual semantics. Added suggestions at places where the code could benefit from them.
google/cloud/pubsub_v1/subscriber/_protocol/streaming_pull_manager.py
Outdated
Show resolved
Hide resolved
54be418
to
6ebdf8e
Compare
All suggestions have been addressed. |
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.
LGTM now, although we might have to do some additional changes once #158 is merged.
If you have time, you might want to rebase your branch onto that PR branch and see if things work there, too.
e237daf
to
84b3a12
Compare
|
||
trace.set_tracer_provider(TracerProvider()) | ||
trace.get_tracer_provider().add_span_processor( | ||
SimpleExportSpanProcessor(CloudTraceSpanExporter()) |
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.
You should be using a BatchSpanProcessor
here. SimpleExportSpanProcessor
exports all spans sequentially and will be very slow.
if "googclient_OpenTelemetrySpanContext" in attrs: | ||
_LOGGER.warning( | ||
"googclient_OpenTelemetrySpanContext set on message" | ||
"as an attribute, but will be overridden." |
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.
No space between "message" and "as".
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.
There are still a couple of suggestions from previous reviews, though they are mostly documentation and log warning formatting issues.
"opentelemetry-api and opentelemetry-instrumentation" | ||
"pip modules. See also" | ||
"https://opentelemetry-python.readthedocs.io/en/stable/getting-started.html" | ||
) |
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.
There are no spaces at the end of these lines, which will cause words to be displayed together (e.g. couldnot, rather than could not).
"A parent span was provided but it could not be" | ||
"converted into a SpanContext. Ensure that the" | ||
"parent is a mapping with at least a trace_id, span_id" | ||
"and is_remote keys." |
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.
Same issue from above, where spaces are missing at the end of the lines.
@@ -279,4 +279,17 @@ def _merge_dict(d1, d2): | |||
# ---------------------------------------------------------------------------- | |||
python.py_samples() | |||
|
|||
# ---------------------------------------------------------------------------- | |||
# Additional unit test dependincies |
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.
Typo: dependencies.
"pip modules. See also" | ||
"https://opentelemetry-python.readthedocs.io/en/stable/getting-started.html" | ||
) | ||
USE_OPENTELEMETRY = False |
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.
Just a suggestion: In addition to the import try, wouldn't it be possible to use an environment variable for explicitly disabling opentelemetry? That way the tests below would not need to mess with sys.modules.
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.
Seems like lint is not passing, plus there are a few failing tests. Please review.
Side note - before merging this (after releasing a new major version, of course), we must also run a few benchmarks to verify that the tracing does not hinder the performance, especially throughput. Mentioning as a a reminder to ourselves. |
Hi all, Seth (author of this PR) finished his Google internship in mid-August so I assume is not actively maintaining this PR now. I would be willing to address the remaining comments here but will not be able to get to it for a couple of weeks. Seth if I'm mistaken and you are indeed still following/working on this let us know, but I assume you have other things to do! |
@johnbryan That sounds good, thanks! No rush, though, as we need too release a new major version first anyway. |
@johnbryan FYI, a new major version has been released, unblocking this PR (which needs an update now, however). |
@johnbryan Will you have a chance to rebase this PR? |
Hi, any news on this PR? This could be of use :) |
@johnbryan What's the status of this PR, do we have an ETA for bringing it to completion? Thanks in advance! |
Just as a quick status update, it is still not clear what exactly do want to be tracked, still awaiting the official specs. We can thus consider this PR blocked until further notice. |
Hi, is there any update/ETA on this PR? :) |
This PR has been open a while - any updates as to why it's still blocked? |
data=data, ordering_key=ordering_key, attributes=attrs | ||
) | ||
span_name = "{} publisher".format(topic) | ||
span_attributes = {"data": data.decode()} |
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.
What is the argument for doing this? It seems to me that, best case, it results in the duplication of data in the message. But in the worst case it actually leaks sensitive information into observability stack, just like logging the output of a SQL query would.
Closing this, since its now done. |
Closes #124
Requires. #158.
This PR adds OpenTelemetry tracing to publisher and subscriber clients.
This PR does not interfere with any underlying client functions. OpenTelemetry is an optional dependency that creates a trace that tracks a message from when it is published to when it is received by a subscriber.
Ongoing concerns
PR checklist