module SignalFx::Lambda::Tracing
Attributes
reporter[RW]
tracer[RW]
Public Class Methods
get_ingest_url()
click to toggle source
# File lib/signalfx/lambda/tracing.rb, line 82 def get_ingest_url return ENV['SIGNALFX_TRACING_URL'] if ENV.key? 'SIGNALFX_TRACING_URL' return ENV['SIGNALFX_ENDPOINT_URL'] + '/v1/trace' if ENV.key? 'SIGNALFX_ENDPOINT_URL' return 'https://ingest.signalfx.com/v1/trace' end
init_tracer(context)
click to toggle source
# File lib/signalfx/lambda/tracing.rb, line 51 def init_tracer(context) access_token = ENV['SIGNALFX_ACCESS_TOKEN'] ingest_url = get_ingest_url service_name = ENV['SIGNALFX_SERVICE_NAME'] || context.function_name @span_prefix = ENV['SIGNALFX_SPAN_PREFIX'] || 'lambda_ruby_' # configure the trace reporter headers = { } headers['X-SF-Token'] = access_token if !access_token.empty? encoder = Jaeger::Client::Encoders::ThriftEncoder.new(service_name: service_name) sender = Jaeger::Client::HttpSender.new(url: ingest_url, headers: headers, encoder: encoder, logger: Logger.new(STDOUT)) @reporter = Jaeger::Client::Reporters::RemoteReporter.new(sender: sender, flush_interval: 100) # propagation format configuration injectors = { OpenTracing::FORMAT_TEXT_MAP => [Jaeger::Client::Injectors::B3RackCodec] } extractors = { OpenTracing::FORMAT_TEXT_MAP => [SignalFx::Lambda::Tracing::B3TextMapCodec] } OpenTracing.global_tracer = Jaeger::Client.build( service_name: service_name, reporter: @reporter, injectors: injectors, extractors: extractors ) @tracer = OpenTracing.global_tracer end
register_handler(&handler)
click to toggle source
# File lib/signalfx/lambda/tracing.rb, line 47 def register_handler(&handler) @handler = handler end
wrap_function(event:, context:) { |event: event, context: context| ... }
click to toggle source
# File lib/signalfx/lambda/tracing.rb, line 14 def wrap_function(event:, context:, &block) init_tracer(context) if !@tracer # avoid initializing except on a cold start tags = SignalFx::Lambda.fields tags['component'] = SignalFx::Lambda::COMPONENT tags['span.kind'] = 'server' scope = OpenTracing.start_active_span("#{@span_prefix}#{context.function_name}", tags: tags) response = yield event: event, context: context scope.span.set_tag("http.status_code", response[:statusCode]) if response[:statusCode] response rescue => error if scope scope.span.set_tag("error", true) scope.span.log_kv(key: "message", value: error.message) end # pass this error up raise ensure scope.close if scope # flush the spans before leaving the execution context @reporter.flush end
wrapped_handler(event:, context:)
click to toggle source
# File lib/signalfx/lambda/tracing.rb, line 43 def wrapped_handler(event:, context:) wrap_function(event: event, context: context, &@handler) end