Prerequsite:
- C++ compiler supporting C++ version >= 14
Download the SDKs from the below dropbox link.
https://www.dropbox.com/scl/fi/46k8vzt8ajjbf8g6zruod/all.zip?rlkey=x6u4tpza9rl454yakd4octv3y&st=cbn0ajua&dl=0
Add the highlighted lines in your CmakeList.txt file.
cmake_minimum_required(VERSION 3.10)
project(HelloWorldWithOTel LANGUAGES CXX)
include_directories(/home/tom/source/all/include)
link_directories(/home/tom/source/all/lib)
find_package(opentelemetry-cpp CONFIG REQUIRED)
add_executable(sample main.cpp)
target_link_libraries(sample
opentelemetry_trace
opentelemetry_exporter_otlp_http
opentelemetry_common
opentelemetry_resources
)
Add below changes in your C++ application
#include <iostream>
#include <memory>
#include <string>
#include <utility>
#include "opentelemetry/exporters/otlp/otlp_http.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
#include "opentelemetry/sdk/common/global_log_handler.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/provider.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_provider.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/tracer_provider.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/sdk/version/version.h"
#include "opentelemetry/trace/provider.h"
#include "opentelemetry/trace/scope.h"
#include "opentelemetry/trace/tracer.h"
#include "opentelemetry/sdk/resource/resource.h"
namespace trace = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;
namespace otlp = opentelemetry::exporter::otlp;
namespace nostd = opentelemetry::nostd;
namespace resource = opentelemetry::sdk::resource;
namespace internal_log = opentelemetry::sdk::common::internal_log;
namespace
{
opentelemetry::exporter::otlp::OtlpHttpExporterOptions opts;
std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> provider;
void InitTracer()
{
resource::ResourceAttributes attributes = {
{"service.name", "Service_Name"},
{"service.version", "1.0.0"}
};
auto resource = resource::Resource::Create(attributes);
auto exporter = otlp::OtlpHttpExporterFactory::Create(opts);
auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
provider = trace_sdk::TracerProviderFactory::Create(std::move(processor), resource);
std::shared_ptr<opentelemetry::trace::TracerProvider> api_provider = provider;
trace_sdk::Provider::SetTracerProvider(api_provider);
}
void CleanupTracer()
{
if (provider)
{
provider->ForceFlush();
}
provider.reset();
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
trace_sdk::Provider::SetTracerProvider(none);
}
}
int main(int argc, char *argv[])
{
InitTracer();
auto provider = trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("Sample");
auto span = tracer->StartSpan("sample-app");
std::cout << "Calling main" << std::endl;
span->End();
CleanupTracer();
return 0;
}
Comments
0 comments
Please sign in to leave a comment.