Skip to content

Commit 6afbbf0

Browse files
authored
Add OTEL HTTP exporter (#5)
* cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines * cp dines
1 parent fa3a199 commit 6afbbf0

5 files changed

Lines changed: 56 additions & 36 deletions

File tree

.github/workflows/cmake.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
sudo apt-get update -y
2525
sudo apt-get install -y libgflags-dev libcurl4-openssl-dev libssl-dev libaio-dev libnl-3-dev libnl-genl-3-dev libzstd-dev
2626
sudo apt-get install -y uuid-dev libjson-c-dev libkmod-dev libsystemd-dev autoconf automake libtool libpci-dev nasm
27-
sudo apt-get install -y libext2fs-dev
27+
sudo apt-get install -y libext2fs-dev protobuf-compiler
2828
wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz
2929
tar -zxvf release-1.11.0.tar.gz
3030
cd googletest-release-1.11.0/
@@ -118,3 +118,10 @@ jobs:
118118
working-directory: ${{github.workspace}}/build
119119
shell: bash
120120
run: ctest -j8 --output-on-failure -C $BUILD_TYPE
121+
122+
- name: Breakpoint if tests failed
123+
if: failure()
124+
uses: namespacelabs/breakpoint-action@v0
125+
with:
126+
duration: 30m
127+
authorized-users: dines-rl

.github/workflows/release/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ if [[ ${OS} =~ "ubuntu" ]]; then
3232
export DEBIAN_FRONTEND="noninteractive"
3333
export TZ="Etc/UTC"
3434
apt-get update -y
35-
apt-get install -y libgflags-dev libcurl4-openssl-dev libssl-dev libaio-dev libnl-3-dev libnl-genl-3-dev rpm wget make g++ git dpkg-dev sudo pkg-config
35+
apt-get install -y libgflags-dev libcurl4-openssl-dev libssl-dev libaio-dev libnl-3-dev libnl-genl-3-dev rpm wget make g++ git dpkg-dev sudo pkg-config protobuf-compiler
3636
apt-get install -y uuid-dev libjson-c-dev libkmod-dev libsystemd-dev autoconf automake libtool libpci-dev nasm libzstd-dev libext2fs-dev zlib1g-dev
3737

3838
DISTRO=${OS/:/1~}

src/overlaybd/otel/CMakeLists.txt

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ FetchContent_Declare(
77
opentelemetry-cpp
88
GIT_REPOSITORY https://github.com/open-telemetry/opentelemetry-cpp.git
99
GIT_TAG v1.22.0
10-
CMAKE_ARGS
11-
-DBUILD_TESTING=OFF
12-
-DWITH_EXAMPLES=OFF
13-
-DWITH_METRICS_PREVIEW=OFF
14-
-DWITH_LOGS_PREVIEW=OFF
1510
)
16-
FetchContent_MakeAvailable(opentelemetry-cpp)
1711

18-
# Get the OpenTelemetry source directory after fetching
19-
FetchContent_GetProperties(opentelemetry-cpp)
12+
# Set OpenTelemetry build options before making it available
13+
set(BUILD_TESTING OFF CACHE BOOL "Build tests" FORCE)
14+
set(WITH_EXAMPLES OFF CACHE BOOL "Build examples" FORCE)
15+
set(OPENTELEMETRY_INSTALL ON CACHE BOOL "Install OpenTelemetry" FORCE)
16+
set(WITH_OTLP_GRPC OFF CACHE BOOL "Build with OTLP GRPC" FORCE)
17+
set(WITH_OTLP_HTTP ON CACHE BOOL "Build with OTLP HTTP" FORCE)
18+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build with shared library" FORCE)
19+
20+
FetchContent_MakeAvailable(opentelemetry-cpp)
2021

2122
add_library(otel_lib STATIC ${SOURCE_OTEL})
2223
set_target_properties(otel_lib PROPERTIES LINKER_LANGUAGE CXX)
@@ -25,14 +26,17 @@ target_include_directories(otel_lib PUBLIC
2526
${CMAKE_CURRENT_SOURCE_DIR}
2627
${opentelemetry-cpp_SOURCE_DIR}/api/include
2728
${opentelemetry-cpp_SOURCE_DIR}/sdk/include
28-
${opentelemetry-cpp_SOURCE_DIR}/exporters/ostream/include
29+
${opentelemetry-cpp_SOURCE_DIR}/exporters/otlp/include
30+
${opentelemetry-cpp_SOURCE_DIR}/ext/include
2931
)
3032

3133
# Link against specific OpenTelemetry targets
32-
target_link_libraries(otel_lib PUBLIC
33-
opentelemetry_api
34-
opentelemetry_common
35-
opentelemetry_resources
36-
opentelemetry_trace
37-
opentelemetry_exporter_ostream_span
38-
)
34+
target_link_libraries(otel_lib PRIVATE
35+
opentelemetry-cpp::api
36+
opentelemetry-cpp::sdk
37+
opentelemetry-cpp::trace
38+
opentelemetry-cpp::otlp_http_client
39+
opentelemetry-cpp::http_client_curl
40+
opentelemetry-cpp::ext
41+
opentelemetry-cpp::otlp_http_exporter
42+
)

src/overlaybd/otel/tracer_common.cpp

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,44 @@
22

33
namespace overlaybd_otel {
44

5-
void InitTracer()
6-
{
7-
auto exporter = opentelemetry::exporter::trace::OStreamSpanExporterFactory::Create();
5+
void InitTracer() {
6+
// Create OTLP HTTP exporter configuration
7+
opentelemetry::exporter::otlp::OtlpHttpExporterOptions opts;
8+
9+
// Create OTLP/HTTP exporter using the factory
10+
auto exporter = opentelemetry::exporter::otlp::OtlpHttpExporterFactory::Create(opts);
11+
12+
opentelemetry::sdk::trace::BatchSpanProcessorOptions bspOpts{};
813
auto processor =
9-
opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(exporter));
14+
opentelemetry::sdk::trace::BatchSpanProcessorFactory::Create(std::move(exporter), bspOpts);
15+
16+
// Create a simple processor (we'll use simple instead of batch for now)
17+
// auto processor =
18+
// opentelemetry::sdk::trace::SimpleSpanProcessorFactory::Create(std::move(exporter));
1019
std::vector<std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>> processors;
1120
processors.push_back(std::move(processor));
12-
// Default is an always-on sampler.
21+
22+
// Default is an always-on sampler
1323
std::unique_ptr<opentelemetry::sdk::trace::TracerContext> context =
1424
opentelemetry::sdk::trace::TracerContextFactory::Create(std::move(processors));
1525
std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
1626
opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(context));
27+
1728
// Set the global trace provider
1829
opentelemetry::sdk::trace::Provider::SetTracerProvider(provider);
1930

20-
// set global propagator
21-
opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
22-
opentelemetry::nostd::shared_ptr<opentelemetry::context::propagation::TextMapPropagator>(
23-
new opentelemetry::trace::propagation::HttpTraceContext()));
31+
// // set global propagator
32+
// opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
33+
// opentelemetry::nostd::shared_ptr<opentelemetry::context::propagation::TextMapPropagator>(
34+
// new opentelemetry::trace::propagation::HttpTraceContext()));
2435
}
2536

26-
void CleanupTracer()
27-
{
37+
void CleanupTracer() {
2838
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
2939
opentelemetry::sdk::trace::Provider::SetTracerProvider(none);
3040
}
3141

32-
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name)
33-
{
42+
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name) {
3443
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
3544
return provider->GetTracer(tracer_name);
3645
}

src/overlaybd/otel/tracer_common.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,17 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
#pragma once
5-
6-
#include "opentelemetry/context/propagation/global_propagator.h"
7-
#include "opentelemetry/context/propagation/text_map_propagator.h"
8-
#include "opentelemetry/exporters/ostream/span_exporter_factory.h"
5+
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
6+
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
97
#include "opentelemetry/nostd/shared_ptr.h"
108
#include "opentelemetry/sdk/trace/exporter.h"
119
#include "opentelemetry/sdk/trace/processor.h"
1210
#include "opentelemetry/sdk/trace/provider.h"
13-
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
1411
#include "opentelemetry/sdk/trace/tracer_context.h"
1512
#include "opentelemetry/sdk/trace/tracer_context_factory.h"
1613
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
14+
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
15+
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"
1716
#include "opentelemetry/trace/propagation/http_trace_context.h"
1817
#include "opentelemetry/trace/provider.h"
1918

@@ -23,6 +22,7 @@
2322

2423
namespace overlaybd_otel {
2524

25+
2626
void InitTracer();
2727
void CleanupTracer();
2828
opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name);

0 commit comments

Comments
 (0)