Skip to content

Add support for Distributed Tracing extension #355

Open

Description

@cardil

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.

Activity

  1. cardil commented on Oct 20, 2020

    @cardil
    Author
  2. lance commented on Oct 20, 2020

    @lance
    Member

    @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.

  3. github-actions commented on Nov 21, 2020

    @github-actions
    Contributor

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

  4. self-assigned this
    on Nov 25, 2020
  5. lance commented on Nov 25, 2020

    @lance
    Member

    @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?

  6. lance commented on Nov 25, 2020

    @lance
    Member

    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.

  7. cardil commented on Nov 25, 2020

    @cardil
    Author

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

  8. cardil commented on Nov 25, 2020

    @cardil
    Author

    I assume tracestate is also supported, just as traceparent?

  9. cardil commented on Nov 25, 2020

    @cardil
    Author

    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.

  10. lance commented on Nov 25, 2020

    @lance
    Member

    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.

  11. cardil commented on Nov 30, 2020

    @cardil
    Author

    @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

  12. 2 remaining items

  13. lholmquist commented on Dec 7, 2020

    @lholmquist
    Contributor

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

  14. lance commented on Dec 7, 2020

    @lance
    Member

    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

  15. cardil commented on Dec 9, 2020

    @cardil
    Author

    Docs with code examples

  16. github-actions commented on Jan 9, 2021

    @github-actions
    Contributor

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

  17. github-actions commented on Feb 11, 2021

    @github-actions
    Contributor

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

  18. grant commented on Nov 19, 2021

    @grant
    Member

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

  19. lance commented on Nov 19, 2021

    @lance
    Member

    @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". 🤷

  20. grant commented on Nov 23, 2021

    @grant
    Member

    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.

  21. lance commented on Nov 23, 2021

    @lance
    Member

    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);

  22. github-actions commented on Dec 24, 2021

    @github-actions
    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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions