]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
20effc67 | 4 | #include "common/ceph_context.h" |
f67539c2 | 5 | #include "tracer.h" |
f51cf556 | 6 | #include "common/debug.h" |
20effc67 TL |
7 | |
8 | #ifdef HAVE_JAEGER | |
1e59de90 TL |
9 | #include "opentelemetry/sdk/trace/batch_span_processor.h" |
10 | #include "opentelemetry/sdk/trace/tracer_provider.h" | |
11 | #include "opentelemetry/exporters/jaeger/jaeger_exporter.h" | |
20effc67 | 12 | |
f51cf556 TL |
13 | #define dout_subsys ceph_subsys_trace |
14 | #undef dout_prefix | |
15 | #define dout_prefix (*_dout << "otel_tracing: ") | |
16 | ||
20effc67 TL |
17 | namespace tracing { |
18 | ||
19 | const opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> Tracer::noop_tracer = opentelemetry::trace::Provider::GetTracerProvider()->GetTracer("no-op", OPENTELEMETRY_SDK_VERSION); | |
f51cf556 | 20 | const jspan_ptr Tracer::noop_span = noop_tracer->StartSpan("noop"); |
20effc67 TL |
21 | |
22 | using bufferlist = ceph::buffer::list; | |
23 | ||
f51cf556 TL |
24 | void Tracer::init(CephContext* _cct, opentelemetry::nostd::string_view service_name) { |
25 | ceph_assert(_cct); | |
26 | cct = _cct; | |
20effc67 | 27 | if (!tracer) { |
f51cf556 | 28 | ldout(cct, 3) << "tracer was not loaded, initializing tracing" << dendl; |
1e59de90 | 29 | opentelemetry::exporter::jaeger::JaegerExporterOptions exporter_options; |
f51cf556 | 30 | exporter_options.server_port = cct->_conf.get_val<int64_t>("jaeger_agent_port"); |
1e59de90 | 31 | const opentelemetry::sdk::trace::BatchSpanProcessorOptions processor_options; |
20effc67 | 32 | const auto jaeger_resource = opentelemetry::sdk::resource::Resource::Create(std::move(opentelemetry::sdk::resource::ResourceAttributes{{"service.name", service_name}})); |
1e59de90 TL |
33 | auto jaeger_exporter = std::unique_ptr<opentelemetry::sdk::trace::SpanExporter>(new opentelemetry::exporter::jaeger::JaegerExporter(exporter_options)); |
34 | auto processor = std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>(new opentelemetry::sdk::trace::BatchSpanProcessor(std::move(jaeger_exporter), processor_options)); | |
20effc67 | 35 | const auto provider = opentelemetry::nostd::shared_ptr<opentelemetry::trace::TracerProvider>(new opentelemetry::sdk::trace::TracerProvider(std::move(processor), jaeger_resource)); |
1e59de90 | 36 | opentelemetry::trace::Provider::SetTracerProvider(provider); |
20effc67 | 37 | tracer = provider->GetTracer(service_name, OPENTELEMETRY_SDK_VERSION); |
f67539c2 | 38 | } |
20effc67 | 39 | } |
f67539c2 | 40 | |
f51cf556 TL |
41 | jspan_ptr Tracer::start_trace(opentelemetry::nostd::string_view trace_name) { |
42 | ceph_assert(cct); | |
1e59de90 | 43 | if (is_enabled()) { |
f51cf556 TL |
44 | ceph_assert(tracer); |
45 | ldout(cct, 20) << "start trace for " << trace_name << " " << dendl; | |
1e59de90 | 46 | return tracer->StartSpan(trace_name); |
20effc67 | 47 | } |
1e59de90 | 48 | return noop_span; |
20effc67 | 49 | } |
f67539c2 | 50 | |
f51cf556 TL |
51 | jspan_ptr Tracer::start_trace(opentelemetry::nostd::string_view trace_name, bool trace_is_enabled) { |
52 | ceph_assert(cct); | |
53 | ldout(cct, 20) << "start trace enabled " << trace_is_enabled << " " << dendl; | |
1e59de90 | 54 | if (trace_is_enabled) { |
f51cf556 TL |
55 | ceph_assert(tracer); |
56 | ldout(cct, 20) << "start trace for " << trace_name << " " << dendl; | |
20effc67 TL |
57 | return tracer->StartSpan(trace_name); |
58 | } | |
59 | return noop_tracer->StartSpan(trace_name); | |
60 | } | |
f67539c2 | 61 | |
f51cf556 TL |
62 | jspan_ptr Tracer::add_span(opentelemetry::nostd::string_view span_name, const jspan_ptr& parent_span) { |
63 | if (is_enabled() && parent_span && parent_span->IsRecording()) { | |
1e59de90 TL |
64 | opentelemetry::trace::StartSpanOptions span_opts; |
65 | span_opts.parent = parent_span->GetContext(); | |
f51cf556 | 66 | ldout(cct, 20) << "adding span " << span_name << " " << dendl; |
1e59de90 | 67 | return tracer->StartSpan(span_name, span_opts); |
f67539c2 | 68 | } |
1e59de90 | 69 | return noop_span; |
20effc67 | 70 | } |
f67539c2 | 71 | |
f51cf556 TL |
72 | jspan_ptr Tracer::add_span(opentelemetry::nostd::string_view span_name, const jspan_context& parent_ctx) { |
73 | if (parent_ctx.IsValid()) { | |
74 | ceph_assert(tracer); | |
20effc67 TL |
75 | opentelemetry::trace::StartSpanOptions span_opts; |
76 | span_opts.parent = parent_ctx; | |
f51cf556 | 77 | ldout(cct, 20) << "adding span " << span_name << " " << dendl; |
20effc67 | 78 | return tracer->StartSpan(span_name, span_opts); |
f67539c2 | 79 | } |
1e59de90 | 80 | return noop_span; |
20effc67 TL |
81 | } |
82 | ||
83 | bool Tracer::is_enabled() const { | |
f51cf556 | 84 | return cct->_conf->jaeger_tracing_enable; |
f67539c2 | 85 | } |
20effc67 | 86 | |
20effc67 TL |
87 | } // namespace tracing |
88 | ||
89 | #endif // HAVE_JAEGER | |
f51cf556 | 90 |