Add typed spans working document (#14)
* Add typed spans working document * Restructuring and scoping - Added motivation - Provided a broader scope and less implementation details, like naming or mandatory fields - Removed tables
This commit is contained in:
parent
aa109fb659
commit
285425de2b
|
|
@ -0,0 +1,180 @@
|
||||||
|
|
||||||
|
# Typed Spans (Draft Proposal)
|
||||||
|
|
||||||
|
In OpenCensus and OpenTracing spans can be created freely and it’s up to the
|
||||||
|
implementor to annotate them with attributes specific to the represented operation.
|
||||||
|
This document proposes to add type information to spans and to define and reserve
|
||||||
|
mandatory and optional attributes depending on the span type.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
Spans represent specific operations in and between systems.
|
||||||
|
|
||||||
|
Examples for such operations are
|
||||||
|
|
||||||
|
- Local operations like method invocations
|
||||||
|
- HTTP requests (inbound and outbound)
|
||||||
|
- Database operations
|
||||||
|
- Queue/Message publish and consume
|
||||||
|
- gRPC calls
|
||||||
|
- Generic RPC operations
|
||||||
|
|
||||||
|
Depending on the type of an operation, additional information is needed to
|
||||||
|
represent and analyze a span correctly in monitoring systems.
|
||||||
|
|
||||||
|
While both OpenCensus and OpenTracing define conventions that define some reserved
|
||||||
|
attributes that can be used to add operation-specific information, there is no
|
||||||
|
mechanism to specify the type of an operation and to ensure that all needed
|
||||||
|
attributes are set.
|
||||||
|
|
||||||
|
### Proposed types
|
||||||
|
|
||||||
|
Below is a list of types and attributes per type.
|
||||||
|
This document does not include the final naming of attributes and types.
|
||||||
|
It is assumed that there will be naming conventions that will be applied eventually.
|
||||||
|
|
||||||
|
There is also no distinction between mandatory and optional attributes as it is assumed
|
||||||
|
that there will be a dedicated discussion and document for each type linked in this document.
|
||||||
|
|
||||||
|
See [this document by @discostu105](https://docs.google.com/spreadsheets/d/1H0S0BROOgX7zndWF_WL8jb9IW1PN7j3IeryekhX5sKU/edit#gid=0) for type and attribute mappings that exist in OpenCensus and OpenTracing today.
|
||||||
|
|
||||||
|
#### HTTP Client
|
||||||
|
Represents an outbound HTTP request.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
|
||||||
|
- Method
|
||||||
|
- Host
|
||||||
|
- Path
|
||||||
|
- Status Code
|
||||||
|
- Route
|
||||||
|
- User Agent
|
||||||
|
- Parameters
|
||||||
|
- Request Headers
|
||||||
|
- Response Headers
|
||||||
|
|
||||||
|
#### HTTP Server
|
||||||
|
Represents an inbound HTTP request.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Method
|
||||||
|
- Host
|
||||||
|
- Path
|
||||||
|
- Status Code
|
||||||
|
- Route
|
||||||
|
- User Agent
|
||||||
|
- Webserver Name
|
||||||
|
- Remote Address
|
||||||
|
- Parameters
|
||||||
|
- Request Headers
|
||||||
|
- Response Headers
|
||||||
|
|
||||||
|
|
||||||
|
#### Database Client
|
||||||
|
Represents a database call.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Database Name
|
||||||
|
- Database Vendor
|
||||||
|
- Database Type
|
||||||
|
- Database User
|
||||||
|
- Endpoint
|
||||||
|
- Statement
|
||||||
|
- Channel Type (e.g. TCP)
|
||||||
|
- Rows Returned
|
||||||
|
- Roundtrips
|
||||||
|
|
||||||
|
#### gRPC Client
|
||||||
|
Represents an outbound gRPC request.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Service Endpoint
|
||||||
|
- Channel Type (e.g. TCP)
|
||||||
|
- Channel Endpoint
|
||||||
|
- Service Name
|
||||||
|
- Service Method
|
||||||
|
|
||||||
|
|
||||||
|
#### gRPC Server
|
||||||
|
Represents an inbound gRPC request.
|
||||||
|
|
||||||
|
##### Detail Document
|
||||||
|
https://github.com/open-telemetry/opentelemetry-specification/blob/master/work_in_progress/gRPC/gRPC.md
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Message Id
|
||||||
|
- Message Compressed Size
|
||||||
|
- Message Uncompressed Size
|
||||||
|
|
||||||
|
#### gRPC Client
|
||||||
|
Represents an inbound gRPC request.
|
||||||
|
|
||||||
|
##### Detail Document
|
||||||
|
https://github.com/open-telemetry/opentelemetry-specification/blob/master/work_in_progress/gRPC/gRPC.md
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Message Id
|
||||||
|
- Message Compressed Size
|
||||||
|
- Message Uncompressed Size
|
||||||
|
|
||||||
|
#### Remoting Client
|
||||||
|
Represents an outbound RPC request.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Service Endpoint
|
||||||
|
- Channel Type (e.g. TCP)
|
||||||
|
- Channel Endpoint
|
||||||
|
- Service Name
|
||||||
|
- Service Method
|
||||||
|
|
||||||
|
|
||||||
|
#### Remoting Server
|
||||||
|
Represents an inbound RPC request.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Service Method
|
||||||
|
- Service Name
|
||||||
|
- Service Endpoint
|
||||||
|
- Protocol Name
|
||||||
|
|
||||||
|
|
||||||
|
#### Messaging Consumer
|
||||||
|
Represents an inbound message.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Vendor Name
|
||||||
|
- Destination Name
|
||||||
|
- Destination Type
|
||||||
|
- Channel Type
|
||||||
|
- Channel Endpoint
|
||||||
|
- Operation Type
|
||||||
|
- Message Id
|
||||||
|
- Correlation Id
|
||||||
|
|
||||||
|
#### Messaging Producer
|
||||||
|
Represents an outbound message.
|
||||||
|
|
||||||
|
##### Attributes
|
||||||
|
- Vendor Name
|
||||||
|
- Destination Name
|
||||||
|
- Channel Type
|
||||||
|
- Channel Endpoint
|
||||||
|
- Message Id
|
||||||
|
- Correlation Id
|
||||||
|
|
||||||
|
## Proposal
|
||||||
|
* Add a field `CanonicalType` that contains the type of span
|
||||||
|
* Define mandatory and optional attributes per span type
|
||||||
|
* Provide an API that supports creating typed spans and ensures that at least all
|
||||||
|
mandatory attributes for this `CanonicalType` are present
|
||||||
|
|
||||||
|
## Challenges and Objections
|
||||||
|
- Some mandatory attributes for a given type may not be available at the time of creation
|
||||||
|
|
||||||
|
### POC
|
||||||
|
Here is [a POC for HTTP Client Spans for Node.js and OpenCensus](https://github.com/danielkhan/opencensus-node-typed-span-sample)
|
||||||
|
|
||||||
|
## Action Items
|
||||||
|
- Define all types
|
||||||
|
- Agree on type and attribute naming conventions
|
||||||
|
- Specify each type and agree on mandatory and optional attributes per type
|
||||||
Loading…
Reference in New Issue