module SignalFx::Tracing::Instrumenter
Attributes
access_token[R]
ingest_url[R]
reporter[RW]
service_name[R]
tracer[RW]
Public Class Methods
configure(tracer: nil, ingest_url: ENV['SIGNALFX_ENDPOINT_URL'] || ENV['SIGNALFX_INGEST_URL'] || 'http://localhost:9080/v1/trace', service_name: ENV['SIGNALFX_SERVICE_NAME'] || "signalfx-ruby-tracing", access_token: ENV['SIGNALFX_ACCESS_TOKEN'], auto_instrument: false, span_tags: {}) { |self| ... }
click to toggle source
# File lib/signalfx/tracing.rb, line 23 def configure(tracer: nil, ingest_url: ENV['SIGNALFX_ENDPOINT_URL'] || ENV['SIGNALFX_INGEST_URL'] || 'http://localhost:9080/v1/trace', service_name: ENV['SIGNALFX_SERVICE_NAME'] || "signalfx-ruby-tracing", access_token: ENV['SIGNALFX_ACCESS_TOKEN'], auto_instrument: false, span_tags: {}) @ingest_url = ingest_url @service_name = service_name @access_token = access_token span_tags = process_span_tags(span_tags) set_tracer(tracer: tracer, service_name: service_name, access_token: access_token, span_tags: span_tags) if @tracer.nil? if auto_instrument Register.available_libs.each_pair do |key, value| begin value.instrument rescue Exception => e logger.error { "failed to initialize instrumentation '#{key}': #{e.inspect}" } logger.error { e.backtrace } end end else yield self end Compat.apply end
instrument(to_patch, **args)
click to toggle source
# File lib/signalfx/tracing.rb, line 63 def instrument(to_patch, **args) if Register.available_libs[to_patch].nil? logger.error { "instrumentation not found: #{to_patch}" } else begin Register.available_libs[to_patch].instrument(**args) rescue Exception => e logger.error { "failed to initialize instrumentation '#{to_patch}': #{e.inspect}" } logger.error { e.backtrace } end end end
logger()
click to toggle source
# File lib/signalfx/tracing.rb, line 118 def logger() if @_logger == nil @_logger = Logging.logger end return @_logger end
new_tracer(service_name: nil, access_token: nil, span_tags: {})
click to toggle source
# File lib/signalfx/tracing.rb, line 76 def new_tracer(service_name: nil, access_token: nil, span_tags: {}) # build a new tracer if one wasn't provided headers = {} # don't set the header if no token was provided headers["X-SF-Token"] = access_token if access_token && !access_token.empty? encoder = Jaeger::Client::Encoders::ThriftEncoder.new(service_name: service_name, tags: span_tags) @http_sender = SignalFx::Tracing::HttpSenderWithFlag.new(url: @ingest_url, headers: headers, encoder: encoder) @reporter = Jaeger::Client::Reporters::RemoteReporter.new(sender: @http_sender, flush_interval: 1) injectors = { OpenTracing::FORMAT_RACK => [Jaeger::Client::Injectors::B3RackCodec], OpenTracing::FORMAT_TEXT_MAP => [Jaeger::Client::Injectors::B3RackCodec] } extractors = { OpenTracing::FORMAT_RACK => [Jaeger::Client::Extractors::B3RackCodec], OpenTracing::FORMAT_TEXT_MAP => [Jaeger::Client::Extractors::B3TextMapCodec] } Tracer.new( reporter: reporter, sampler: Jaeger::Samplers::Const.new(true), injectors: Jaeger::Injectors.prepare(injectors), extractors: Jaeger::Extractors.prepare(extractors) ) end
revive()
click to toggle source
# File lib/signalfx/tracing.rb, line 114 def revive set_tracer(service_name: @service_name, access_token: @access_token) end
set_tracer(tracer: nil, service_name: nil, access_token: nil, span_tags: {})
click to toggle source
# File lib/signalfx/tracing.rb, line 104 def set_tracer(tracer: nil, service_name: nil, access_token: nil, span_tags: {}) # build a new tracer if one wasn't provided if tracer.nil? @tracer = new_tracer(service_name: service_name, access_token: access_token, span_tags: span_tags) OpenTracing.global_tracer = @tracer else @tracer = tracer end end