Open
Conversation
85ad6c7 to
1539742
Compare
a61f9d4 to
4901a30
Compare
4901a30 to
36ae722
Compare
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.
Summary
Enriches proxy server traces with domain-specific span attributes and events so that a single trace in Tempo tells you who called, what targets were fanned out to, and how each target stream progressed, without needing to cross-reference logs.
Adds a
proxy.target{/FullMethod}child span per backend connection and aproxy.target.dialsub-span for the dial+stream-creation phase, giving per-target latency breakdown within a fan-out.All instrumentation is zero-cost when no
TracerProvideris configured (OpenTelemetry noop behavior). No new dependencies ,go.opentelemetry.io/otelpackages already ingo.mod.Also, updated golangci to v2, as v1 is incompatible with go1.26.0
What's new
Root span enrichment (
dispatch)sansshell.caller.principalsansshell.caller.addresssansshell.caller.groupssansshell.caller.cert.cnsansshell.caller.cert.spiffe_idsansshell.proxy.justificationsansshell.proxy.target_countdispatch.start_stream(once per target, carriessansshell.target.addressandsansshell.target.method).Per-target child span (
proxy.target{/service/Method})sansshell.target.addresssansshell.target.methodsansshell.target.stream_idsansshell.target.stream_typeunary/server_stream/client_stream/bidisansshell.target.authz_dry_runsansshell.target.dial_timeout_mssansshell.target.proxied_principalEvents on this span:
stream.connectedstream.first_responseRecvMsgfrom backendauthz.evaluatedsansshell.authz.result,sansshell.authz.methodstream.finishedgrpc.status_codeDial sub-span (
proxy.target.dial)Wraps
DialContext+NewStream. Records errors and status on dial/stream-creation failure.