Skip to content
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

SSH request tracing #14124

Merged
merged 6 commits into from
Jul 27, 2022
Merged

SSH request tracing #14124

merged 6 commits into from
Jul 27, 2022

Conversation

rosstimothy
Copy link
Contributor

Add tracing support for ssh global requests and channels. Wrappers
for ssh.Client, ssh.Channel, and ssh.NewChannel provide a
mechanism for tracing context to be propagated via a context.Context.

In order to maintain backwards compatibility the ssh.Client wrapper
tries to open a TracingChannel when constructed. Any servers that
don't support tracing will reject the unknown channel. The client
will only provide tracing context to servers which do NOT reject
the TracingChannel request.

In order to include pass tracing context along all ssh payloads
are wrapped in an Envelope that includes the original payload
AND any tracing context. Servers now try to unmarshal all payloads
into said Envelope when processing messages. If there is an Envelope
provided, a new span will be created and the original payload will
be pass along to handlers.

Part of #12241

@rosstimothy rosstimothy force-pushed the tross/ssh_trace_client branch 3 times, most recently from 5b76528 to e404084 Compare July 6, 2022 12:57
@rosstimothy rosstimothy marked this pull request as ready for review July 6, 2022 13:27
@github-actions github-actions bot requested review from gabrielcorado and zmb3 July 6, 2022 13:27
@rosstimothy rosstimothy force-pushed the tross/ssh_trace_client branch 3 times, most recently from c6f19e7 to 91d1228 Compare July 21, 2022 12:50
@rosstimothy
Copy link
Contributor Author

@gabrielcorado @zmb3 PTAL?

@rosstimothy
Copy link
Contributor Author

friendly ping @gabrielcorado

Copy link
Contributor

@gabrielcorado gabrielcorado left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, just a few minor comments.

api/observability/tracing/ssh/ssh_test.go Outdated Show resolved Hide resolved
lib/srv/forward/sshserver.go Show resolved Hide resolved
lib/sshutils/server.go Show resolved Hide resolved
lib/srv/regular/sshserver.go Show resolved Hide resolved
Add tracing support for ssh global requests and  channels. Wrappers
for `ssh.Client`, `ssh.Channel`, and `ssh.NewChannel` provide a
mechanism for tracing context to be propagated via a `context.Context`.

In order to maintain backwards compatibility the ssh.Client wrapper
tries to open a TracingChannel when constructed. Any servers that
don't support tracing will reject the unknown channel. The client
will only provide tracing context to servers which do NOT reject
the TracingChannel request.

In order to include pass tracing context along all ssh payloads
are wrapped in an Envelope that includes the original payload
AND any tracing context. Servers now try to unmarshal all payloads
into said Envelope when processing messages. If there is an Envelope
provided, a new span will be created and the original payload will
be pass along to handlers.

Part of #12241
@rosstimothy rosstimothy force-pushed the tross/ssh_trace_client branch from 217f724 to 17b9193 Compare July 27, 2022 13:28
@rosstimothy rosstimothy enabled auto-merge (squash) July 27, 2022 14:51
@rosstimothy rosstimothy merged commit 9b22af6 into master Jul 27, 2022
@github-actions
Copy link

@rosstimothy See the table below for backport results.

Branch Result
branch/v10 Failed

@rosstimothy rosstimothy mentioned this pull request Jul 27, 2022
rosstimothy added a commit that referenced this pull request Jul 27, 2022
Add tracing support for ssh global requests and  channels. Wrappers
for `ssh.Client`, `ssh.Channel`, and `ssh.NewChannel` provide a
mechanism for tracing context to be propagated via a `context.Context`.

In order to maintain backwards compatibility the ssh.Client wrapper
tries to open a TracingChannel when constructed. Any servers that
don't support tracing will reject the unknown channel. The client
will only provide tracing context to servers which do NOT reject
the TracingChannel request.

In order to include pass tracing context along all ssh payloads
are wrapped in an Envelope that includes the original payload
AND any tracing context. Servers now try to unmarshal all payloads
into said Envelope when processing messages. If there is an Envelope
provided, a new span will be created and the original payload will
be pass along to handlers.

Part of #12241
rosstimothy added a commit that referenced this pull request Aug 1, 2022
SSH request tracing (#14124)

Add tracing support for ssh global requests and  channels. Wrappers
for `ssh.Client`, `ssh.Channel`, and `ssh.NewChannel` provide a
mechanism for tracing context to be propagated via a `context.Context`.

In order to maintain backwards compatibility the ssh.Client wrapper
tries to open a TracingChannel when constructed. Any servers that
don't support tracing will reject the unknown channel. The client
will only provide tracing context to servers which do NOT reject
the TracingChannel request.

In order to include pass tracing context along all ssh payloads
are wrapped in an Envelope that includes the original payload
AND any tracing context. Servers now try to unmarshal all payloads
into said Envelope when processing messages. If there is an Envelope
provided, a new span will be created and the original payload will
be pass along to handlers.

Part of #12241
hydridity pushed a commit to hydridity/teleport that referenced this pull request Aug 26, 2022
SSH request tracing (gravitational#14124)

* SSH request tracing

Add tracing support for ssh global requests and  channels. Wrappers
for `ssh.Client`, `ssh.Channel`, and `ssh.NewChannel` provide a
mechanism for tracing context to be propagated via a `context.Context`.

In order to maintain backwards compatibility the ssh.Client wrapper
tries to open a TracingChannel when constructed. Any servers that
don't support tracing will reject the unknown channel. The client
will only provide tracing context to servers which do NOT reject
the TracingChannel request.

In order to include pass tracing context along all ssh payloads
are wrapped in an Envelope that includes the original payload
AND any tracing context. Servers now try to unmarshal all payloads
into said Envelope when processing messages. If there is an Envelope
provided, a new span will be created and the original payload will
be pass along to handlers.

Part of gravitational#12241
@zmb3 zmb3 deleted the tross/ssh_trace_client branch September 9, 2022 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants