Skip to content

Commit 97fbdaa

Browse files
authored
Otlp http log example (#1062)
1 parent 3db551f commit 97fbdaa

File tree

9 files changed

+187
-2
lines changed

9 files changed

+187
-2
lines changed

examples/common/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
add_subdirectory(foo_library)
2+
if(WITH_LOGS_PREVIEW)
3+
add_subdirectory(logs_foo_library)
4+
endif()
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package(default_visibility = ["//visibility:public"])
2+
3+
cc_library(
4+
name = "common_logs_foo_library",
5+
srcs = [
6+
"foo_library.cc",
7+
],
8+
hdrs = [
9+
"foo_library.h",
10+
],
11+
defines = ["BAZEL_BUILD"],
12+
deps = [
13+
"//api",
14+
"//sdk:headers",
15+
],
16+
)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
add_library(common_logs_foo_library foo_library.h foo_library.cc)
2+
target_link_libraries(common_logs_foo_library PUBLIC ${CMAKE_THREAD_LIBS_INIT}
3+
opentelemetry_api)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
#ifdef ENABLE_LOGS_PREVIEW
4+
# include <map>
5+
# include <string>
6+
# include "opentelemetry/logs/provider.h"
7+
# include "opentelemetry/sdk/version/version.h"
8+
# include "opentelemetry/trace/provider.h"
9+
10+
namespace logs = opentelemetry::logs;
11+
namespace trace = opentelemetry::trace;
12+
namespace nostd = opentelemetry::nostd;
13+
14+
namespace
15+
{
16+
nostd::shared_ptr<trace::Tracer> get_tracer()
17+
{
18+
auto provider = trace::Provider::GetTracerProvider();
19+
return provider->GetTracer("foo_library", OPENTELEMETRY_SDK_VERSION);
20+
}
21+
22+
nostd::shared_ptr<logs::Logger> get_logger()
23+
{
24+
auto provider = logs::Provider::GetLoggerProvider();
25+
return provider->GetLogger("foo_library_logger");
26+
}
27+
} // namespace
28+
29+
void foo_library()
30+
{
31+
auto span = get_tracer()->StartSpan("span 1");
32+
auto scoped_span = trace::Scope(get_tracer()->StartSpan("foo_library"));
33+
auto ctx = span->GetContext();
34+
auto logger = get_logger();
35+
logger->Log(opentelemetry::logs::Severity::kDebug, "name", "body", {}, {}, ctx.trace_id(),
36+
ctx.span_id(), ctx.trace_flags(), opentelemetry::common::SystemTimestamp());
37+
}
38+
#endif
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#pragma once
5+
6+
void foo_library();

examples/otlp/BUILD

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,17 @@ cc_binary(
2323
"//sdk/src/trace",
2424
],
2525
)
26+
27+
cc_binary(
28+
name = "example_otlp_http_log",
29+
srcs = [
30+
"http_log_main.cc",
31+
],
32+
deps = [
33+
"//api",
34+
"//examples/common/logs_foo_library:common_logs_foo_library",
35+
"//exporters/otlp:otlp_http_exporter",
36+
"//exporters/otlp:otlp_http_log_exporter",
37+
"//sdk/src/trace",
38+
],
39+
)

examples/otlp/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,15 @@ if(WITH_OTLP_HTTP)
1414
target_link_libraries(
1515
example_otlp_http ${CMAKE_THREAD_LIBS_INIT} common_foo_library
1616
opentelemetry_trace opentelemetry_exporter_otlp_http)
17+
if(WITH_LOGS_PREVIEW)
18+
add_executable(example_otlp_http_log http_log_main.cc)
19+
target_link_libraries(
20+
example_otlp_http_log
21+
${CMAKE_THREAD_LIBS_INIT}
22+
common_logs_foo_library
23+
opentelemetry_trace
24+
opentelemetry_logs
25+
opentelemetry_exporter_otlp_http
26+
opentelemetry_exporter_otlp_http_log)
27+
endif()
1728
endif()

examples/otlp/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ This is an example of how to use the [OpenTelemetry
44
Protocol](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/README.md)
55
(OTLP) exporter.
66

7-
The application in `grpc_main.cc` initializes an `OtlpGrpcExporter` instance and
8-
the application in `http_main.cc` initializes an `OtlpHttpExporter` instance
7+
The application in `grpc_main.cc` initializes an `OtlpGrpcExporter` instance,
8+
the application in `http_main.cc` initializes an `OtlpHttpExporter` instance.
9+
The application in `http_log_main.cc` initializes an `OtlpHttpLogExporter` instance
910
and they register a tracer provider from the [OpenTelemetry
1011
SDK](https://github.com/open-telemetry/opentelemetry-cpp). The application then
1112
calls a `foo_library` which has been instrumented using the [OpenTelemetry

examples/otlp/http_log_main.cc

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#ifdef ENABLE_LOGS_PREVIEW
5+
# include "opentelemetry/exporters/otlp/otlp_http_exporter.h"
6+
# include "opentelemetry/exporters/otlp/otlp_http_log_exporter.h"
7+
# include "opentelemetry/logs/provider.h"
8+
# include "opentelemetry/sdk/logs/logger_provider.h"
9+
# include "opentelemetry/sdk/logs/simple_log_processor.h"
10+
# include "opentelemetry/sdk/trace/simple_processor.h"
11+
# include "opentelemetry/sdk/trace/tracer_provider.h"
12+
# include "opentelemetry/trace/provider.h"
13+
14+
# include <string>
15+
16+
# ifdef BAZEL_BUILD
17+
# include "examples/common/logs_foo_library/foo_library.h"
18+
# else
19+
# include "logs_foo_library/foo_library.h"
20+
# endif
21+
22+
namespace trace = opentelemetry::trace;
23+
namespace nostd = opentelemetry::nostd;
24+
namespace otlp = opentelemetry::exporter::otlp;
25+
namespace logs_sdk = opentelemetry::sdk::logs;
26+
namespace logs = opentelemetry::logs;
27+
namespace trace_sdk = opentelemetry::sdk::trace;
28+
29+
namespace
30+
{
31+
32+
opentelemetry::exporter::otlp::OtlpHttpExporterOptions opts;
33+
void InitTracer()
34+
{
35+
// Create OTLP exporter instance
36+
auto exporter = std::unique_ptr<trace_sdk::SpanExporter>(new otlp::OtlpHttpExporter(opts));
37+
auto processor = std::unique_ptr<trace_sdk::SpanProcessor>(
38+
new trace_sdk::SimpleSpanProcessor(std::move(exporter)));
39+
auto provider =
40+
nostd::shared_ptr<trace::TracerProvider>(new trace_sdk::TracerProvider(std::move(processor)));
41+
// Set the global trace provider
42+
trace::Provider::SetTracerProvider(provider);
43+
}
44+
45+
opentelemetry::exporter::otlp::OtlpHttpLogExporterOptions logger_opts;
46+
void InitLogger()
47+
{
48+
logger_opts.console_debug = true;
49+
// Create OTLP exporter instance
50+
auto exporter =
51+
std::unique_ptr<logs_sdk::LogExporter>(new otlp::OtlpHttpLogExporter(logger_opts));
52+
auto processor = std::shared_ptr<logs_sdk::LogProcessor>(
53+
new logs_sdk::SimpleLogProcessor(std::move(exporter)));
54+
auto sdkProvider = std::shared_ptr<logs_sdk::LoggerProvider>(new logs_sdk::LoggerProvider());
55+
sdkProvider->SetProcessor(processor);
56+
auto apiProvider = nostd::shared_ptr<logs::LoggerProvider>(sdkProvider);
57+
auto provider = nostd::shared_ptr<logs::LoggerProvider>(apiProvider);
58+
opentelemetry::logs::Provider::SetLoggerProvider(provider);
59+
}
60+
} // namespace
61+
62+
int main(int argc, char *argv[])
63+
{
64+
if (argc > 1)
65+
{
66+
opts.url = argv[1];
67+
logger_opts.url = argv[1];
68+
if (argc > 2)
69+
{
70+
std::string debug = argv[2];
71+
opts.console_debug = debug != "" && debug != "0" && debug != "no";
72+
}
73+
74+
if (argc > 3)
75+
{
76+
std::string binary_mode = argv[3];
77+
if (binary_mode.size() >= 3 && binary_mode.substr(0, 3) == "bin")
78+
{
79+
opts.content_type = opentelemetry::exporter::otlp::HttpRequestContentType::kBinary;
80+
logger_opts.content_type = opentelemetry::exporter::otlp::HttpRequestContentType::kBinary;
81+
}
82+
}
83+
}
84+
InitLogger();
85+
InitTracer();
86+
foo_library();
87+
}
88+
#else
89+
int main()
90+
{
91+
return 0;
92+
}
93+
#endif

0 commit comments

Comments
 (0)