Closed yzhuang93 closed 1 week ago
Adding some more info about the code
// Create exporter with [OtlpHttp]ExporterFactory.
otlp::OtlpHttpExporterOptions opts;
opts.url = config_->ExporterEndpoint();
auto exporter = otlp::OtlpHttpExporterFactory::Create(opts);
// Create Batch Span Processor with [Batch]SpanProcessorFactory.
sdktrace::BatchSpanProcessorOptions processor_option{};
auto processor = sdktrace::BatchSpanProcessorFactory::Create(move(exporter),
processor_option);
// Create Sampler with [AlwaysOn]SamplerFactory.
auto sampler = sdktrace::AlwaysOnSamplerFactory::Create();
// Create Resource with info service_name, hostname and ip.
auto resource = sdkresource::Resource::Create({
{"service.name", service_name_},
{"hostname", hostname_},
{"ip", ip_address_}
});
// Create ID Generator with [Random]IdGeneratorFactory.
auto id_generator = sdktrace::RandomIdGeneratorFactory::Create();
// Create Tracer Provider with TracerProviderFactory.
shared_ptr<sdktrace::TracerProvider> tracer_provider
= sdktrace::TracerProviderFactory::Create(
move(processor), resource,
move(sampler), move(id_generator));
// Set global tracer provider.
shared_ptr<trace::TracerProvider> api_provider = tracer_provider;
trace::Provider::SetTracerProvider(api_provider);
// Get Tracer From TracerProvider.
tracer_ = trace::Provider::GetTracerProvider()->GetTracer("otel", "1.16.1");
Do you use cmake and how do you import otel-cpp. Simular problems may happen when the macros are different between buiding otel-cpp and using it.
CMake to build otel:
-DCMAKE_CXX_FLAGS="-std=c++17" \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_TESTING=OFF \
-DWITH_EXAMPLES=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DWITH_OTLP_HTTP=ON \
-DWITH_STL=ON \
-DCMAKE_CXX_STANDARD=17 \
-DOPENTELEMETRY_ABI_VERSION_NO=1 \
-DCMAKE_SKIP_RPATH=1
Import:
#ifndef _UTIL_OBSERVABILITY_H_
#define _UTIL_OBSERVABILITY_H_
#include "opentelemetry/context/propagation/global_propagator.h"
#include "opentelemetry/context/propagation/text_map_propagator.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/sdk/common/env_variables.h"
#include "opentelemetry/sdk/resource/resource_detector.h"
#include "opentelemetry/sdk/trace/batch_span_processor.h"
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
#include "opentelemetry/sdk/trace/random_id_generator_factory.h"
#include "opentelemetry/sdk/trace/samplers/always_on_factory.h"
#include "opentelemetry/sdk/trace/simple_processor.h"
#include "opentelemetry/sdk/trace/tracer_provider.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/noop.h"
#include "opentelemetry/trace/propagation/http_trace_context.h"
#include "opentelemetry/trace/propagation/jaeger.h"
#include "opentelemetry/trace/provider.h"
#include "opentelemetry/trace/span_metadata.h"
...
#endif
I just resolved this by turn both STL and Abseil OFF, I though I need to choose one from them, turns out that build without neither of them bypass this issue.
Recently bumped up our OTEL CPP client version to
1.16.1
and also useSTL
instead ofABSEIL
, but hit into this issue at run time:The line of code hitting this issue is
tracer_ = trace::Provider::GetTracerProvider()->GetTracer("otel", "1.16.1");
If I change back to use abseil then I don't see this issue, but I have some other problem of using abseil and need to get rid of it.