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

Add support for Distributed Tracing extension #355

Open
cardil opened this issue Oct 20, 2020 · 22 comments
Open

Add support for Distributed Tracing extension #355

cardil opened this issue Oct 20, 2020 · 22 comments
Assignees
Labels
help wanted Extra attention is needed module/lib Related to the main source code status/no-issue-activity

Comments

@cardil
Copy link

cardil commented Oct 20, 2020

Is your feature request related to a problem? Please describe.
A Distributed Tracing Extension is part of the specification. Javascript SDK should support it.

Describe the solution you would like to see
An implementation of Distributed Tracing should be implemented in similar way as it is done for Go and Java SDK's.

@cardil
Copy link
Author

cardil commented Oct 20, 2020

/cc @piecioshka

@lance
Copy link
Member

lance commented Oct 20, 2020

@cardil good catch!

A Distributed Tracing Extension is part of the specification. Javascript SDK should support it.

To be clear, expectations for the SDKs do not require that this be implemented. https://github.com/cloudevents/spec/blob/master/SDK.md#technical-requirements

But I agree - it would be good.

@lholmquist lholmquist added module/lib Related to the main source code help wanted Extra attention is needed labels Oct 21, 2020
@github-actions
Copy link
Contributor

This issue is stale because it has been open 30 days with no activity.

@lance
Copy link
Member

lance commented Nov 25, 2020

@cardil I've been thinking about this, and I wonder how you see this in practical usage. In the spec, the example given is,

CURL -X POST example/webhook.json \
-H 'ce-id: 1' \
-H 'ce-specversion: 1.x-wip' \
-H 'ce-type: example' \
-H 'ce-source: http://localhost' \
-H 'ce-traceparent:  00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01' \
-H 'traceparent:  00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' \
-H 'tracestate: rojo=00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01,congo=lZWRzIHRoNhcm5hbCBwbGVhc3VyZS4`

Receiving an event message like this in the SDK would result in a CloudEvent that had the extension traceparent. For example assuming those headers above,

const event = HTTP.toEvent(headers, body);
console.log(event.traceparent); // 00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01

Producing an event, that includes this information is similarly straightforward.

const event = new CloudEvent({ source: '/example', type: 'tracer', traceparent: '00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01' });
const message = HTTP.binary(event);
console.log(message.headers); // should include a 'ce-traceparent: 00-0af7651916cd43dd8448eb211c80319c-b9c7c989f97918e1-01' header

Looking at the spec, I'm not sure there is anything else for us to support. Is there some specific behavior that you had in mind?

@lance
Copy link
Member

lance commented Nov 25, 2020

If what we have already is sufficient to consider the Distributed Tracing extension supported, we should add this to the README.md and maybe provide an example.

@cardil
Copy link
Author

cardil commented Nov 25, 2020

Awesome. I think we can easily resolve this issue with just writing those examples above in documentation.

@cardil
Copy link
Author

cardil commented Nov 25, 2020

I assume tracestate is also supported, just as traceparent?

@cardil
Copy link
Author

cardil commented Nov 25, 2020

I think if both of those are supported, we should write those in documentation as examples, and maybe also add a unit test to make sure this behavior will be kept.

@lance
Copy link
Member

lance commented Nov 25, 2020

I assume tracestate is also supported, just as traceparent?

Yes - it behaves just as any extension. A ce-<extname>: <extvalue> header will get created when creating new events, and a ce-<extname> header will result in that <extname> being a property of the event.

@cardil
Copy link
Author

cardil commented Nov 30, 2020

@lance Looking at Golang implementation it seems like more than just passing those extensions should be done:

https://github.com/cloudevents/sdk-go/blob/8ff3fbc/v2/client/client_observed.go#L48-L57

@lance
Copy link
Member

lance commented Nov 30, 2020

@cardil I have started a thread in the CNCF Slack to discuss what exactly is expected for the distributed tracing extension in terms of SDK support.

https://cloud-native.slack.com/archives/CCXF3CBL1/p1606776741094000

@slinkydeveloper
Copy link
Member

@cardil the golang implementation was done before the latest changes to the specification. The goal of the extension is not to carry the actual tracing informations (aka the actual traceparent), but the historic one. For more details, look here: https://github.com/cloudevents/spec/blob/master/extensions/distributed-tracing.md#using-the-distributed-tracing-extension

If you need to carry the tracing informations, you must not use the distributed tracing extension but you should use the usual http specs for that (eg the w3c trace context spec)

@lholmquist
Copy link
Contributor

So is the actual action item here just adding docs? That is sort of what i got from skimming this thread

@lance
Copy link
Member

lance commented Dec 7, 2020

So is the actual action item here just adding docs? That is sort of what i got from skimming this thread

I think so, yes

@cardil
Copy link
Author

cardil commented Dec 9, 2020

Docs with code examples

@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2021

This issue is stale because it has been open 30 days with no activity.

@github-actions
Copy link
Contributor

This issue is stale because it has been open 30 days with no activity.

@grant
Copy link
Member

grant commented Nov 19, 2021

@lance I think this issue is complete? Anything else this issue is waiting on?

@lance
Copy link
Member

lance commented Nov 19, 2021

@lance I think this issue is complete? Anything else this issue is waiting on?

Well, I think it would probably be good to document how a user adds traces to an event. Do you think we should just close this issue and open another one? Maybe just changing the title to something like "Document support for distributed tracing". 🤷

@grant
Copy link
Member

grant commented Nov 23, 2021

In terms of how a user uses this:

A user should be able to add the HTTP header traceparent: 01-asdfasdf-etc and see the value within their CloudEvent receiver, such as a property cloudevent.extensions.traceparent.

@lance
Copy link
Member

lance commented Nov 23, 2021

A user should be able to add the HTTP header traceparent: 01-asdfasdf-etc and see the value within their CloudEvent receiver, such as a property cloudevent.extensions.traceparent.

They'd add it as ce-traceparent. Here is an example. https://github.com/cloudevents/spec/blob/v1.0.1/extensions/distributed-tracing.md#using-the-distributed-tracing-extension

I believe this would just show up as an extension attribute naturally. We already have a test for a random extension here, which is essentially the same thing, just not using traceparent. I suppose we could add an explicit test.

expect(message.headers[`ce-${ext1Name}`]).to.equal(ext1Value);
expect(message.headers[`ce-${ext2Name}`]).to.equal(ext2Value);

@github-actions
Copy link
Contributor

This issue is stale because it has been open 30 days with no activity.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed module/lib Related to the main source code status/no-issue-activity
Projects
None yet
Development

No branches or pull requests

5 participants