Go 1.16 + OTLPProto/Collector upgrades#546
Merged
mdisibio merged 13 commits intografana:masterfrom Mar 1, 2021
Merged
Conversation
joe-elliott
reviewed
Feb 24, 2021
Collaborator
joe-elliott
left a comment
There was a problem hiding this comment.
Usual smattering of questions and thoughts. Also:
- does this PR contain native support for OTLP in the distributor? i think we want to go ahead and add that. no idea what the additional load will look like with the bytes marshalling/unmarshalling in the shim.
- ctrl+shift+f for 1.15. it is referenced in a few places that need to be updated.
- contributing.md in particular probably needs review b/c it's where instructions related to these changes will be contained.
- if we do add native support for grpc/http for otlp to this PR we need some documentation that explains why the shims are convenience layers for low volume situations, but if you want a true tracing backend you need a trace pipeline and you should push otlp to tempo only (and not through the shim)
Contributor
Author
Good catch, addressed.
Yes agree, we definitely want to migrate to native support to reclaim the efficiency (and for other reasons), but think it makes to do in a followup PR: this one is already decently large and risk of drift, and benchmarking locally and in internal environment isn't show any performance regression in cpu or mem usage. |
joe-elliott
approved these changes
Mar 1, 2021
Collaborator
joe-elliott
left a comment
There was a problem hiding this comment.
best PR since the first one.
i've been waiting months to fix all this. excellent work.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does:
This PR updates several OTEL dependencies and addresses some of the pain points. This is in the same line as another attempt #502 but goes further.
Changes:
opentelemetry-collectorfrom v0.6.1 to v0.16.0.opentelemetry-protosubmodule from v0.3.0 to v0.7.0.otel/build-protobufdocker image from 0.1.0 to 0.2.1.opentelemetry-proto. Now Tempo leaves all the dependencies alone and creates its own derivative types in /pkg/tempopb. Remarshal/unmarshal is used to swap types inshim.go. This is unfortunate for efficiency but a significant win by decoupling things. The reverse swap also occurs intempo-query.Additional Changes/Notes:
go mod tidy -eparameter to continue despite errors. This eliminates another hurdle with dependency updates which was the cmux -> test -> grpc hello world issue as stated in the previous PR. This error still occurs but the use of-eargument allows build process to continue. Note that Tempo still builds and tests successfully because the grpc hello world reference are in cmux tests which Tempo CI does not execute. Note this change also allows cleanup of thevendor-fix/prometheuswork-around.Makefilewas simplified to removevendor-dependencies. Now there are onlyvendor-checkandgen-protos.Questions / Next Steps:
Local testing was performed to cover most cases, if anything else needed please mention.
2.1 Unit tests
2.2. integration tests
2.3. Jaeger collector (using synthetic-load-generator)
2.4. Zipkin collector (using curl)
2.5. OTLP gRPC and HTTP collectors (using my own test app)
2.6 Grafana/tempo-query lookup
shim.goconvertsotlp.ExportTraceServiceRequesttotempopb.Tracewhich are technically wire-compatible. But Tempo does have its own definition of ExportTraceServiceRequest which we could use but needs a few more lines in makefile, etc. It seemed simpler to do it this way.Which issue(s) this PR fixes:
None but likely introduces a few
Checklist
CHANGELOG.mdupdated - the order of entries should be[CHANGE],[FEATURE],[ENHANCEMENT],[BUGFIX]