read more about jaeger tracing:.
- https://medium.com/opentracing/take-opentracing-for-a-hotrod-ride-f6e3141f7941
+ https://www.jaegertracing.io/docs/
JAEGER DEPLOYMENT
namespace tracing {
-const std::shared_ptr<opentracing::Tracer> Tracer::noop_tracer = opentracing::MakeNoopTracer();
+const opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> Tracer::noop_tracer = opentelemetry::trace::Provider::GetTracerProvider()->GetTracer("no-op", OPENTELEMETRY_SDK_VERSION);
-Tracer::Tracer(opentracing::string_view service_name) {
+Tracer::Tracer(opentelemetry::nostd::string_view service_name) {
init(service_name);
}
-void Tracer::init(opentracing::string_view service_name) {
- if (!open_tracer) {
- using namespace jaeger_configuration;
- const jaegertracing::Config conf(false, const_sampler, reporter_default_config, headers_config, baggage_config, service_name, std::vector<jaegertracing::Tag>());
- open_tracer = jaegertracing::Tracer::make(conf);
+void Tracer::init(opentelemetry::nostd::string_view service_name) {
+ if (!tracer) {
+ const opentelemetry::exporter::jaeger::JaegerExporterOptions opts;
+ auto jaeger_exporter = std::unique_ptr<opentelemetry::sdk::trace::SpanExporter>(new opentelemetry::exporter::jaeger::JaegerExporter(opts));
+ auto processor = std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>(new opentelemetry::sdk::trace::SimpleSpanProcessor(std::move(jaeger_exporter)));
+ const auto jaeger_resource = opentelemetry::sdk::resource::Resource::Create(std::move(opentelemetry::sdk::resource::ResourceAttributes{{"service.name", service_name}}));
+ const auto provider = opentelemetry::nostd::shared_ptr<opentelemetry::trace::TracerProvider>(new opentelemetry::sdk::trace::TracerProvider(std::move(processor), jaeger_resource));
+ tracer = provider->GetTracer(service_name, OPENTELEMETRY_SDK_VERSION);
}
}
void Tracer::shutdown() {
- open_tracer.reset();
+ if (tracer) {
+ tracer->CloseWithMicroseconds(1);
+ }
}
-jspan Tracer::start_trace(opentracing::string_view trace_name) {
+jspan Tracer::start_trace(opentelemetry::nostd::string_view trace_name) {
if (is_enabled()) {
- return open_tracer->StartSpan(trace_name);
+ return tracer->StartSpan(trace_name);
}
return noop_tracer->StartSpan(trace_name);
}
-jspan Tracer::add_span(opentracing::string_view span_name, jspan& parent_span) {
- if (is_enabled()) {
- if (parent_span) {
- return open_tracer->StartSpan(span_name, { opentracing::ChildOf(&parent_span->context()) });
+jspan Tracer::add_span(opentelemetry::nostd::string_view span_name, jspan& parent_span) {
+ if (is_enabled() && parent_span) {
+ const auto parent_ctx = parent_span->GetContext();
+ if (parent_ctx.IsValid()) {
+ opentelemetry::trace::StartSpanOptions span_opts;
+ span_opts.parent = parent_ctx;
+ return tracer->StartSpan(span_name, span_opts);
}
- return open_tracer->StartSpan(span_name);
}
return noop_tracer->StartSpan(span_name);
}
bool Tracer::is_enabled() const {
return g_ceph_context->_conf->jaeger_tracing_enable;
}
+
} // namespace tracing
#endif // HAVE_JAEGER
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
-#ifndef TRACER_H
-#define TRACER_H
+#pragma once
#include "acconfig.h"
#ifdef HAVE_JAEGER
-#define SIGNED_RIGHT_SHIFT_IS 1
-#define ARITHMETIC_RIGHT_SHIFT 1
-#include <jaegertracing/Tracer.h>
+#include "opentelemetry/trace/provider.h"
+#include "opentelemetry/exporters/jaeger/jaeger_exporter.h"
+#include "opentelemetry/sdk/trace/simple_processor.h"
+#include "opentelemetry/sdk/trace/tracer_provider.h"
+
+using jspan = opentelemetry::nostd::shared_ptr<opentelemetry::trace::Span>;
-typedef std::unique_ptr<opentracing::Span> jspan;
namespace tracing {
class Tracer {
private:
- const static std::shared_ptr<opentracing::Tracer> noop_tracer;
- std::shared_ptr<opentracing::Tracer> open_tracer;
+ const static opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> noop_tracer;
+ opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> tracer;
public:
Tracer() = default;
- Tracer(opentracing::string_view service_name);
+ Tracer(opentelemetry::nostd::string_view service_name);
- void init(opentracing::string_view service_name);
+ void init(opentelemetry::nostd::string_view service_name);
void shutdown();
bool is_enabled() const;
// creates and returns a new span with `trace_name`
// this span represents a trace, since it has no parent.
- jspan start_trace(opentracing::string_view trace_name);
+ jspan start_trace(opentelemetry::nostd::string_view trace_name);
// creates and returns a new span with `span_name` which parent span is `parent_span'
- jspan add_span(opentracing::string_view span_name, jspan& parent_span);
+ jspan add_span(opentelemetry::nostd::string_view span_name, jspan& parent_span);
};
} // namespace tracing
-namespace jaeger_configuration {
-
-inline const jaegertracing::samplers::Config const_sampler("const", 1, "", 0, jaegertracing::samplers::Config::defaultSamplingRefreshInterval());
-
-inline const jaegertracing::reporters::Config reporter_default_config(jaegertracing::reporters::Config::kDefaultQueueSize, jaegertracing::reporters::Config::defaultBufferFlushInterval(), true, jaegertracing::reporters::Config::kDefaultLocalAgentHostPort, "");
-
-inline const jaegertracing::propagation::HeadersConfig headers_config("", "", "", "");
-
-inline const jaegertracing::baggage::RestrictionsConfig baggage_config(false, "", std::chrono::steady_clock::duration());
-
-}
#else // !HAVE_JAEGER
struct span_stub {
template <typename T>
- void SetTag(std::string_view key, const T& value) const noexcept {}
- void Log(std::initializer_list<std::pair<std::string_view, Value>> fields) {}
+ void SetAttribute(std::string_view key, const T& value) const noexcept {}
+ void AddEvent(std::string_view, std::initializer_list<std::pair<std::string_view, Value>> fields) {}
};
class jspan {
}
#endif // !HAVE_JAEGER
-
-#endif // TRACER_H
op->osd_trace.keyval("cost", cost);
auto enqueue_span = tracing::osd::tracer.add_span(__func__, op->osd_parent_span);
- enqueue_span->Log({
+ enqueue_span->AddEvent(__func__, {
{"priority", priority},
{"cost", cost},
{"epoch", epoch},
rgw_placement_rule *pdest_placement = &s->dest_placement;
if (multipart) {
- s->trace->SetTag(tracing::rgw::UPLOAD_ID, multipart_upload_id);
+ s->trace->SetAttribute(tracing::rgw::UPLOAD_ID, multipart_upload_id);
std::unique_ptr<rgw::sal::MultipartUpload> upload;
upload = store->get_multipart_upload(s->bucket.get(), s->object->get_name(),
multipart_upload_id);
if (op_ret == 0) {
upload_id = upload->get_upload_id();
}
- s->trace->SetTag(tracing::rgw::UPLOAD_ID, upload_id);
+ s->trace->SetAttribute(tracing::rgw::UPLOAD_ID, upload_id);
}
upload = store->get_multipart_upload(s->bucket.get(), s->object->get_name(), upload_id);
- s->trace->SetTag(tracing::rgw::UPLOAD_ID, upload_id);
+ s->trace->SetAttribute(tracing::rgw::UPLOAD_ID, upload_id);
RGWCompressionInfo cs_info;
bool compressed = false;
}
req->op = op;
ldpp_dout(op, 10) << "op=" << typeid(*op).name() << dendl;
-
s->op_type = op->get_type();
try {
const auto trace_name = std::string(op->name()) + " " + s->trans_id;
s->trace = tracing::rgw::tracer.start_trace(trace_name);
- s->trace->SetTag(tracing::rgw::OP, op->name());
- s->trace->SetTag(tracing::rgw::TYPE, tracing::rgw::REQUEST);
+ s->trace->SetAttribute(tracing::rgw::OP, op->name());
+ s->trace->SetAttribute(tracing::rgw::TYPE, tracing::rgw::REQUEST);
ret = rgw_process_authenticated(handler, op, req, s, yield);
if (ret < 0) {
done:
if (op) {
- s->trace->SetTag(tracing::rgw::RETURN, op->get_ret());
+ s->trace->SetAttribute(tracing::rgw::RETURN, op->get_ret());
if (s->user) {
- s->trace->SetTag(tracing::rgw::USER_ID, s->user->get_id().id);
+ s->trace->SetAttribute(tracing::rgw::USER_ID, s->user->get_id().id);
}
if (s->bucket) {
- s->trace->SetTag(tracing::rgw::BUCKET_NAME, s->bucket->get_name());
+ s->trace->SetAttribute(tracing::rgw::BUCKET_NAME, s->bucket->get_name());
}
if (s->object) {
- s->trace->SetTag(tracing::rgw::OBJECT_NAME, s->object->get_name());
+ s->trace->SetAttribute(tracing::rgw::OBJECT_NAME, s->object->get_name());
}
std::string script;
auto rc = rgw::lua::read_script(s, store, s->bucket_tenant, s->yield, rgw::lua::context::postRequest, script);