#include <userver/tracing/span.hpp>
Measures the execution time of the current code block, links it with the parent tracing::Spans and stores that info in the log.
See Logging and Tracing for usage examples and more descriptions.
Public Member Functions | |
Span (TracerPtr tracer, std::string name, const Span *parent, ReferenceType reference_type, logging::Level log_level=logging::Level::kInfo, utils::impl::SourceLocation source_location=utils::impl::SourceLocation::Current()) | |
Span (std::string name, ReferenceType reference_type=ReferenceType::kChild, logging::Level log_level=logging::Level::kInfo, utils::impl::SourceLocation source_location=utils::impl::SourceLocation::Current()) | |
Span (Span &&other) noexcept | |
Span & | operator= (const Span &)=delete |
Span & | operator= (Span &&)=delete |
Span | CreateChild (std::string name) const |
Span | CreateFollower (std::string name) const |
ScopeTime | CreateScopeTime () |
Creates a tracing::ScopeTime attached to the span. | |
ScopeTime | CreateScopeTime (std::string name) |
Creates a tracing::ScopeTime attached to the Span and starts measuring execution time. Tag {scope_name}_time with elapsed time is added to result span. | |
ScopeTime::Duration | GetTotalDuration (const std::string &scope_name) const |
ScopeTime::DurationMillis | GetTotalElapsedTime (const std::string &scope_name) const |
void | AddTag (std::string key, logging::LogExtra::Value value) |
void | AddTagFrozen (std::string key, logging::LogExtra::Value value) |
void | AddNonInheritableTag (std::string key, logging::LogExtra::Value value) |
void | AddNonInheritableTags (const logging::LogExtra &) |
void | SetLogLevel (logging::Level log_level) |
Sets level for tags logging. | |
logging::Level | GetLogLevel () const |
Returns level for tags logging. | |
void | SetLocalLogLevel (std::optional< logging::Level > log_level) |
Sets the local log level that disables logging of this span if the local log level set and greater than the main log level of the Span. | |
std::optional< logging::Level > | GetLocalLogLevel () const |
Returns the local log level that disables logging of this span if it is set and greater than the main log level of the Span. | |
void | SetLink (std::string link) |
void | SetParentLink (std::string parent_link) |
Set parent_link - an ID . Can be called only once. | |
std::string | GetLink () const |
std::string | GetParentLink () const |
const std::string & | GetTraceId () const |
const std::string & | GetSpanId () const |
Identifies a specific span. It does not propagate. | |
const std::string & | GetParentId () const |
bool | ShouldLogDefault () const noexcept |
void | DetachFromCoroStack () |
void | AttachToCoroStack () |
std::chrono::system_clock::time_point | GetStartSystemTime () const |
Static Public Member Functions | |
static Span & | CurrentSpan () |
Returns the Span of the current task. | |
static Span * | CurrentSpanUnchecked () |
Returns nullptr if called in non-coroutine context or from a task with no alive Span; otherwise returns the Span of the current task. | |
static Span | MakeSpan (std::string name, std::string_view trace_id, std::string_view parent_span_id) |
static Span | MakeSpan (std::string name, std::string_view trace_id, std::string_view parent_span_id, std::string link) |
static Span | MakeRootSpan (std::string name, logging::Level log_level=logging::Level::kInfo) |
|
explicit |
Use default tracer and implicit coro local storage for parent identification, takes TraceID from the parent.
For extremely rare cases where a new Trace ID is required use tracing::Span::MakeSpan().
tracing::Span::AddNonInheritableTag | ( | std::string | key, |
logging::LogExtra::Value | value ) |
void tracing::Span::AddTag | ( | std::string | key, |
logging::LogExtra::Value | value ) |
Add a tag that is used on each logging in this Span and all future children.
void tracing::Span::AddTagFrozen | ( | std::string | key, |
logging::LogExtra::Value | value ) |
Add a tag that is used on each logging in this Span and all future children. It will not be possible to change its value.
void tracing::Span::AttachToCoroStack | ( | ) |
Attach the Span to current engine::Task so it is returned by CurrentSpan().
Span tracing::Span::CreateChild | ( | std::string | name | ) | const |
Create a child which can be used independently from the parent.
The child shares no state with its parent. If you need to run code in parallel, create a child span and use the child in a separate task.
ScopeTime tracing::Span::CreateScopeTime | ( | std::string | name | ) |
Creates a tracing::ScopeTime attached to the Span and starts measuring execution time. Tag {scope_name}_time
with elapsed time is added to result span.
name
parameter is expected to satisfy snake case. Otherwise, it is converted to snake case.
|
static |
Returns the Span of the current task.
Should not be called in non-coroutine context. Should not be called from a task with no alive Span.
Rule of thumb: it is safe to call it from a task created by utils::Async/utils::CriticalAsync/utils::PeriodicTask. If current task was created with an explicit engine::impl::*Async(), you have to create a Span beforehand.
void tracing::Span::DetachFromCoroStack | ( | ) |
Detach the Span from current engine::Task so it is not returned by CurrentSpan() any more.
std::string tracing::Span::GetLink | ( | ) | const |
Get link - a request ID within the service.
Propagates within a single service, but not from client to server. A new link is generated for the "root" request handling task
ScopeTime::Duration tracing::Span::GetTotalDuration | ( | const std::string & | scope_name | ) | const |
Returns total time elapsed for a certain scope of this span. If there is no record for the scope, returns 0.
ScopeTime::DurationMillis tracing::Span::GetTotalElapsedTime | ( | const std::string & | scope_name | ) | const |
Returns total time elapsed for a certain scope of this span. If there is no record for the scope, returns 0.
Prefer using Span::GetTotalDuration()
const std::string & tracing::Span::GetTraceId | ( | ) | const |
An ID of the request that does not change from service to service.
Propagates both to sub-spans within a single service, and from client to server
|
static |
Factory function for rare cases of creating a root Span that starts the trace_id chain, ignoring CurrentSpan
, if any. Useful in background jobs, periodics, distlock tasks, cron tasks, etc. The result of such jobs is not directly requested by anything.
name | Name of a new Span |
log_level | Log level for the span's own log record |
|
static |
|
static |
void tracing::Span::SetLink | ( | std::string | link | ) |
Set link - a request ID within a service. Can be called only once.
Propagates within a single service, but not from client to server. A new link is generated for the "root" request handling task
|
noexcept |
|
friend |