57a8859a11
This change will instantiate an OpenTracing tracer and configure it as the global tracer when the GITLAB_TRACING environment variable is configured. GITLAB_TRACING takes a "connection string"-like value, encapsulating the driver (eg jaeger, etc) and options for the driver. Since each service, whether it's written in Ruby or Golang, uses the same connection-string, it should be very easy to configure all services in a cluster, or even a single development machine to be setup to use tracing. Note that this change does not include instrumentation or propagation changes as this is a way of breaking a previous larger change into components. The instrumentation and propagation changes will follow in separate changes.
13 lines
512 B
Ruby
13 lines
512 B
Ruby
# frozen_string_literal: true
|
|
|
|
if Gitlab::Tracing.enabled?
|
|
require 'opentracing'
|
|
|
|
# In multi-processed clustered architectures (puma, unicorn) don't
|
|
# start tracing until the worker processes are spawned. This works
|
|
# around issues when the opentracing implementation spawns threads
|
|
Gitlab::Cluster::LifecycleEvents.on_worker_start do
|
|
tracer = Gitlab::Tracing::Factory.create_tracer(Gitlab.process_name, Gitlab::Tracing.connection_string)
|
|
OpenTracing.global_tracer = tracer if tracer
|
|
end
|
|
end
|