Trace Origin
Trace origin indicates what created a trace or a span. Not all traces and spans contain enough information to tell whether the user or what precisely in the SDK created it. Origin solves this problem. Origin can be sent with the trace context or spans. The SDKs should set this value automatically. It is not expected to be set manually by users. The value for origin should rarely change so that we can run proper analytics on them.
The origin is of type string
and consists of four parts: <type>.<category>.<integration-name>.<integration-part>
.
Only the first is mandatory. The parts build upon each other, meaning it is forbidden
to skip one part. For example, you may send parts one and two but aren't allowed to send parts one and three without part two.
type
- Required. Can be either
manual
orauto
.manual
indicates that the user created the trace or span,auto
indicates that the SDK or some integration created it.
category
- Optional. Is the category of the trace or span, and it must be a category of span operations. For example,
http
,db
,ui
,navigation
,file
,browser
,rpc
, etc.
integration-name
- Optional. Is the name of the integration of the SDK that created the trace or span.
integration-part
- Optional. Is the part of the integration of the SDK that created the trace or span. This is only useful when one integration creates multiple traces or spans, and you'd like to differentiate. Therefore, most of the time, this will be omitted.
All parts can only contain:
- Alphanumeric characters:
a-z
,A-Z
, and0-9
. - Underscores:
_
Examples
manual
auto
auto.file
auto.navigation
auto.app.start
auto.ui.swift_ui
auto.ui.view_controller
auto.ui.jetpack_compose
auto.ui.activity
auto.navigation.jetpack_compose
auto.http.okhttp
auto.http.http_client_5
auto.http.client.stream
auto.db.core_data
auto.db.graphql
Origins of type manual
can also have categories and integration names. For example, for the time to display feature, the user manually calls an API of the SDK,
creating a span. In this case, the SDK can tell what created the span, but the user did it manually. On the other hand, the SDK also
automatically creates a span. In this case we end up with the following origins:
manual.ui.time_to_display
auto.ui.time_to_display
See also:
- Span Interface
- Trace Context
- Related RFC;