Module: Labkit::Tracing::Common
- Included in:
- GRPCInterceptor, RackMiddleware, Rails::RailsCommon, Sidekiq::SidekiqCommon
- Defined in:
- lib/labkit/tracing/common.rb
Overview
Common is a mixin for various distributed tracing instrumentation
Instance Method Summary collapse
-
#in_tracing_span(operation_name:, tags:, child_of: nil) ⇒ Object
Convience method for running a block with a span.
- #kv_tags_for_exception(exception) ⇒ Object
- #log_exception_on_span(span, exception) ⇒ Object
- #postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) ⇒ Object
- #tracer ⇒ Object
Instance Method Details
#in_tracing_span(operation_name:, tags:, child_of: nil) ⇒ Object
Convience method for running a block with a span
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/labkit/tracing/common.rb', line 14 def in_tracing_span(operation_name:, tags:, child_of: nil) scope = tracer.start_active_span(operation_name, child_of: child_of, tags: ) span = scope.span # Add correlation details to the span if we have them correlation_id = Labkit::Correlation::CorrelationId.current_id span.set_tag("correlation_id", correlation_id) if correlation_id begin yield span rescue StandardError => e log_exception_on_span(span, e) raise e ensure scope.close end end |
#kv_tags_for_exception(exception) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/labkit/tracing/common.rb', line 45 def (exception) case exception when Exception { :"event" => "error", :"error.kind" => exception.class.to_s, :"message" => Labkit::Logging::Sanitizer.sanitize_field(exception.), :"stack" => exception.backtrace&.join('\n'), } else { :"event" => "error", :"error.kind" => exception.class.to_s, :"error.object" => Labkit::Logging::Sanitizer.sanitize_field(exception.to_s) } end end |
#log_exception_on_span(span, exception) ⇒ Object
40 41 42 43 |
# File 'lib/labkit/tracing/common.rb', line 40 def log_exception_on_span(span, exception) span.set_tag("error", true) span.log_kv((exception)) end |
#postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/labkit/tracing/common.rb', line 32 def postnotify_span(operation_name, start_time, end_time, tags: nil, child_of: nil, exception: nil) span = OpenTracing.start_span(operation_name, start_time: start_time, tags: , child_of: child_of) log_exception_on_span(span, exception) if exception span.finish(end_time: end_time) end |
#tracer ⇒ Object
9 10 11 |
# File 'lib/labkit/tracing/common.rb', line 9 def tracer OpenTracing.global_tracer end |