Skip to content

C++

Instrument your C++ applications to send traces, logs, and metrics to Kopai.

find_package(opentelemetry-cpp CONFIG REQUIRED)
target_link_libraries(myapp
opentelemetry-cpp::trace
opentelemetry-cpp::logs
opentelemetry-cpp::metrics
opentelemetry-cpp::otlp_http_exporter
)
Terminal window
vcpkg install opentelemetry-cpp[otlp-http]
#include <opentelemetry/exporters/otlp/otlp_http_exporter_factory.h>
#include <opentelemetry/exporters/otlp/otlp_http_exporter_options.h>
#include <opentelemetry/sdk/trace/tracer_provider_factory.h>
#include <opentelemetry/sdk/trace/simple_processor_factory.h>
#include <opentelemetry/trace/provider.h>
namespace otlp = opentelemetry::exporter::otlp;
namespace trace_sdk = opentelemetry::sdk::trace;
namespace trace_api = opentelemetry::trace;
void initTracer() {
// Get endpoint from environment
const char* endpoint = std::getenv("OTEL_EXPORTER_OTLP_ENDPOINT");
if (!endpoint) endpoint = "http://localhost:4318";
otlp::OtlpHttpExporterOptions options;
options.url = std::string(endpoint) + "/v1/traces";
auto exporter = otlp::OtlpHttpExporterFactory::Create(options);
auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(
std::move(exporter)
);
auto provider = trace_sdk::TracerProviderFactory::Create(
std::move(processor)
);
trace_api::Provider::SetTracerProvider(std::move(provider));
}
auto tracer = trace_api::Provider::GetTracerProvider()
->GetTracer("my-app", "1.0.0");
auto span = tracer->StartSpan("my-operation");
auto scope = tracer->WithActiveSpan(span);
// Your code here
span->End();
Terminal window
export OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp.kopai.app"
export OTEL_SERVICE_NAME="my-service"
./myapp
VariableDescription
OTEL_EXPORTER_OTLP_ENDPOINTKopai OTLP endpoint
OTEL_SERVICE_NAMEName shown in Kopai UI

Building opentelemetry-cpp requires:

  • CMake 3.12+
  • C++14 or later
  • curl, gRPC, protobuf dependencies

For a complete working example:
C++ Example

OpenTelemetry C++