-
Notifications
You must be signed in to change notification settings - Fork 935
Introduce new semantic conventions for CloudEvents #1978
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
Merged
arminru
merged 38 commits into
open-telemetry:main
from
dynatrace-oss-contrib:semconv-cloudevents
Mar 10, 2022
Merged
Changes from 31 commits
Commits
Show all changes
38 commits
Select commit
Hold shift + click to select a range
1040881
Introduce semantic conventions for CloudEvents
joaopgrassi 0223450
Update changelog
joaopgrassi f82fef8
Change wording to reflect the scope of this document
joaopgrassi 86e4e4e
PR suggestions
joaopgrassi a1051c3
Remove section of not covered scenarios
joaopgrassi 6d3cf0a
Fix lint errors
joaopgrassi 0d7cdec
Move changelog into unreleased section
arminru a37ac6e
Adding spans to cloudevents spec (#17)
8b362c5
Update TOC
joaopgrassi 1a30c69
Update CloudEvents spec based on meeting discussion (#18)
b513e29
Update specification/trace/semantic_conventions/cloudevents.md
joaopgrassi 5fb9b49
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi bbdc4f6
Clarify paragraph around cloud events libraries
joaopgrassi ce87cf0
Change a bit paragraph around cloud events libraries
joaopgrassi 8e94701
Merge branch 'main' into semconv-cloudevents
joaopgrassi 0cf35f4
Merge branch 'main' into semconv-cloudevents
joaopgrassi 8c0cb2a
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi 95523cf
PR suggestions
joaopgrassi be229c8
Remove instrumentation section
joaopgrassi 5d6ac5c
Merge branch 'main' into semconv-cloudevents
joaopgrassi 9835f3a
Merge branch 'main' into semconv-cloudevents
joaopgrassi 01a0dac
Merge branch 'main' into semconv-cloudevents
joaopgrassi bd684c5
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi 87ca073
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi 24c8ec0
Merge branch 'main' into semconv-cloudevents
arminru 7128a5c
Mark required attributes
joaopgrassi b17e28f
Add clarification about CloudEvents
joaopgrassi dc6a944
Improve wording
joaopgrassi 56426fe
Move reasoning + diagrams from comments to the document
joaopgrassi c7f2272
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi 2063130
Merge remote-tracking branch 'upstream/main' into semconv-cloudevents
joaopgrassi ca0da3d
Apply suggestions from code review
joaopgrassi 704059f
Update links to point to the new CloudEvents spec
joaopgrassi 7ec8648
Address PR comments
joaopgrassi 7cf0a88
Improve diagram spaces a bit
joaopgrassi 5d2585d
Improve diagram spaces a bit
joaopgrassi 714543a
Address PR comments
joaopgrassi eaa8ff6
Merge branch 'main' into semconv-cloudevents
arminru File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| groups: | ||
| - id: cloudevents | ||
| prefix: cloudevents | ||
| brief: > | ||
| This document defines attributes for CloudEvents. | ||
| CloudEvents is a specification on how to define event data in a standard way. | ||
| These attributes can be attached to spans when performing operations with CloudEvents, regardless of the protocol being used. | ||
| attributes: | ||
| - id: event_id | ||
| type: string | ||
| required: always | ||
| brief: > | ||
| The [event_id](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#id) uniquely identifies the event. | ||
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| examples: ['123e4567-e89b-12d3-a456-426614174000', '0001'] | ||
| - id: event_source | ||
| type: string | ||
| required: always | ||
| brief: > | ||
| The [source](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#source-1) identifies the context in which an event happened. | ||
| examples: ['https://github.com/cloudevents', '/cloudevents/spec/pull/123', 'my-service' ] | ||
| - id: event_spec_version | ||
joaopgrassi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| type: string | ||
| required: always | ||
| brief: > | ||
| The [version of the CloudEvents specification](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#specversion) which the event uses. | ||
| examples: '1.0' | ||
| - id: event_type | ||
| type: string | ||
| required: always | ||
| brief: > | ||
| The [event_type](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#type) contains a value describing the type of event related to the originating occurrence. | ||
| examples: ['com.github.pull_request.opened', 'com.example.object.deleted.v2'] | ||
| - id: event_subject | ||
| type: string | ||
| brief: > | ||
| The [subject](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#subject) of the event in the context of the event producer (identified by source). | ||
| examples: 'mynewfile.jpg' | ||
196 changes: 196 additions & 0 deletions
196
specification/trace/semantic_conventions/cloudevents.md
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,196 @@ | ||
| # CloudEvents | ||
joaopgrassi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| **Status**: [Experimental](../../document-status.md) | ||
|
|
||
| <!-- Re-generate TOC with `markdown-toc --no-first-h1 -i` --> | ||
|
|
||
| <!-- toc --> | ||
|
|
||
| - [Definitions](#definitions) | ||
| - [Overview](#overview) | ||
| - [Conventions](#conventions) | ||
| * [Spans](#spans) | ||
| + [Creation](#creation) | ||
| + [Processing](#processing) | ||
| * [Attributes](#attributes) | ||
|
|
||
| <!-- tocstop --> | ||
|
|
||
| ## Definitions | ||
|
|
||
| From the | ||
| [CloudEvents specification:](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#overview) | ||
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| > CloudEvents is a specification for describing event data in common formats | ||
| to provide interoperability across services, platforms and systems. | ||
| > | ||
|
|
||
| For more information on the concepts, terminology and background of CloudEvents | ||
| consult the | ||
| [CloudEvents Primer](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/primer.md) | ||
| document. | ||
|
|
||
| ## Overview | ||
|
|
||
| A CloudEvent can be sent directly from producer to consumer. | ||
| For such a scenario, the traditional parent-child trace model works well. | ||
| However, CloudEvents are also used in distributed systems where an event | ||
| can go through many [hops](https://en.wikipedia.org/wiki/Hop_(networking)) | ||
| until it reaches a consumer. In this scenario, the traditional parent-child | ||
| trace model is not sufficient to produce a meaningful trace. | ||
|
|
||
| Consider the following scenario: | ||
|
|
||
| ``` | ||
| +----------+ +--------------+ | ||
| | Producer | ---------------> | Intermediary | | ||
| +----------+ +--------------+ | ||
| | | ||
| | | ||
| | | ||
| v | ||
| +----------+ +----------+ | ||
| | Consumer | <----------------- | Queue | | ||
| +----------+ +----------+ | ||
| ``` | ||
|
|
||
| With the traditional parent-child trace model, the above scenario would produce | ||
| two traces, completely independent from each other. It is not possible to | ||
| correlate a producer with a consumer(s). | ||
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| ``` | ||
| +---------------------------------------------------+ | ||
| | Trace 1 | | ||
| | | | ||
| | +---------------------------------------+ | | ||
| | | Send (auto-instr) | | | ||
| | +---------------------------------------+ | | ||
| | +------------------------------------+ | | ||
| | | Intermediary: Received (auto-instr)| | | ||
| | +------------------------------------+ | | ||
| | +------------------------------------+ | | ||
| | | Intermediary: Send (auto-instr) | | | ||
| | +------------------------------------+ | | ||
| | | | ||
| | Trace 2 | | ||
| | | | ||
| | +---------------------------------------+ | | ||
| | | Consumer: Receive (auto-instr) | | | ||
| | +---------------------------------------+ | | ||
| | | | ||
| +---------------------------------------------------+ | ||
| ``` | ||
|
|
||
| This document defines semantic conventions to model the different stages | ||
| a CloudEvent can go through in a system, making it possible to create traces | ||
| that are meaningful and consistent. It covers creation, processing, | ||
| context propagation between producer and consumer(s) and attributes | ||
| to be added to spans. | ||
|
|
||
| With the proposed model, it is possible to have an overview of everything | ||
| that happened as the result of an event. One can, for example, answer the | ||
| following questions: | ||
|
|
||
| - What components in a system reacted to an event | ||
| - What further events were sent due to an incoming event | ||
| - Which event caused the exception | ||
|
|
||
| With the conventions in this document, the application scenario above would | ||
| produce a trace where it is possible to correlate a producer with a consumer(s): | ||
|
|
||
| ``` | ||
| +-------------------------------------------------------+ | ||
| | Trace 1 | | ||
| | | | ||
| | +---------------------------------------+ | | ||
| | +---> | Create event | | | ||
| | | +---------------------------------------+ | | ||
| | | +---------------------------------------+ | | ||
| | | | Send (auto-instr) | | | ||
| | | +---------------------------------------+ | | ||
| | | +------------------------------------+ | | ||
| | | | Intermediary: Received (auto-instr)| | | ||
| | | +------------------------------------+ | | ||
| | | +------------------------------------+ | | ||
| | | | Intermediary: Send (auto-instr) | | | ||
| | |Link +------------------------------------+ | | ||
| | | | | ||
| | | | | ||
| | | | | ||
| | | Trace 2 | | ||
| | | | | ||
| | | +---------------------------------------+ | | ||
| | | | Consumer: Receive (auto-instr) | | | ||
| | | +---------------------------------------+ | | ||
| | | +-------------------------------------+ | | ||
| | +------ | Consumer: Process | | | ||
| | +-------------------------------------+ | | ||
| | | | ||
| +-------------------------------------------------------+ | ||
| ``` | ||
|
|
||
| ## Conventions | ||
|
|
||
| To achieve the trace above, it is necessary to capture the context of | ||
| the event creation so that when the CloudEvent reaches its destination(s), this | ||
| context can be continued. Each CloudEvent acts then as the medium of this | ||
| context propagation. | ||
|
|
||
| This document relies on the CloudEvents specification, which defines this | ||
| context propagation mechanism via the | ||
| [CloudEvents Distributed Tracing Extension](https://github.com/cloudevents/spec/blob/v1.0.1/extensions/distributed-tracing.md). | ||
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| Once the trace context is set on the event | ||
| via the Distributed Tracing Extension, it MUST not be modified. | ||
|
|
||
| The remainder of this section describes the semantic conventions for Spans | ||
| required to achieve the proposed trace. | ||
|
|
||
| ### Spans | ||
|
|
||
| #### Creation | ||
|
|
||
| Instrumentation SHOULD create a new span and populate the | ||
joaopgrassi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| [CloudEvents Distributed Tracing Extension](https://github.com/cloudevents/spec/blob/v1.0.1/extensions/distributed-tracing.md) | ||
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
joaopgrassi marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| on the event. This applies when: | ||
|
|
||
| - A CloudEvent is created by the instrumented library. | ||
| It may be impossible or impractical to create the Span during event | ||
| creation (e.g. inside the constructor or in a factory method), | ||
| so instrumentation MAY create the Span later, when passing the event to the transport layer. | ||
| - A CloudEvent is created outside of the instrumented library | ||
| (e.g. directly constructed by the application owner, without calling a constructor or factory method), | ||
| and passed without the Distributed Tracing Extension populated. | ||
|
|
||
| In case a CloudEvent is passed to the instrumented library with the | ||
| Distributed Tracing Extension already populated, instrumentation MUST NOT create | ||
| a span and MUST NOT modify the Distributed Tracing Extension on the event. | ||
|
|
||
| **Span name:** `CloudEvents Create <event_type>` | ||
|
|
||
| **Span kind:** PRODUCER | ||
|
|
||
| #### Processing | ||
|
|
||
| When an instrumented library supports processing of a single CloudEvent, | ||
| instrumentation SHOULD create a new span to trace it. | ||
|
|
||
| Instrumentation SHOULD set the remote trace context from the | ||
| Distributed Tracing Extension as a link on the processing span. | ||
arminru marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| **Span name:** `CloudEvents Process <event_type>` | ||
|
|
||
| **Span kind:** CONSUMER | ||
|
|
||
| ### Attributes | ||
|
|
||
| The following attributes are applicable to creation and processing Spans. | ||
|
|
||
| <!-- semconv cloudevents --> | ||
| | Attribute | Type | Description | Examples | Required | | ||
joaopgrassi marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| |---|---|---|---|---| | ||
| | `cloudevents.event_id` | string | The [event_id](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#id) uniquely identifies the event. | `123e4567-e89b-12d3-a456-426614174000`; `0001` | Yes | | ||
| | `cloudevents.event_source` | string | The [source](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#source-1) identifies the context in which an event happened. | `https://github.com/cloudevents`; `/cloudevents/spec/pull/123`; `my-service` | Yes | | ||
| | `cloudevents.event_spec_version` | string | The [version of the CloudEvents specification](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#specversion) which the event uses. | `1.0` | Yes | | ||
| | `cloudevents.event_type` | string | The [event_type](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#type) contains a value describing the type of event related to the originating occurrence. | `com.github.pull_request.opened`; `com.example.object.deleted.v2` | Yes | | ||
| | `cloudevents.event_subject` | string | The [subject](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#subject) of the event in the context of the event producer (identified by source). | `mynewfile.jpg` | No | | ||
| <!-- endsemconv --> | ||
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.
Uh oh!
There was an error while loading. Please reload this page.