Skip to content

Commit 9dd4a8c

Browse files
authored
Merge pull request #170 from open-telemetry/main
[DOC] Add document and example for sharing gRPC Client (open-telemetry#3260)
2 parents 212764b + edb8937 commit 9dd4a8c

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

docs/cpp-sdk-factory-design.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,50 @@ This property makes it possible to:
9494
- deploy a new SDK shared library
9595
- keep the application unchanged
9696
97+
### Case study, using Factory and shared gRPC client between OTLP gRPC exporters
98+
99+
To reduce the cost of gRPC, the SDK allow users to share gRPC clients between
100+
OTLP gRPC exporters when these exporters have the same settings. This can be
101+
used as follows from the application code:
102+
103+
```cpp
104+
// Include following headers
105+
#include "opentelemetry/exporters/otlp/otlp_grpc_client_factory.h"
106+
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
107+
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h"
108+
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
109+
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h"
110+
111+
// Create exporters with shared gRPC Client
112+
namespace otlp = opentelemetry::exporter::otlp;
113+
114+
void SetupOtlp() {
115+
otlp::OtlpGrpcClientOptions client_opts;
116+
otlp::OtlpGrpcExporterOptions trace_opts;
117+
otlp::OtlpGrpcLogRecordExporterOptions log_opts;
118+
119+
// Setting client_opts, trace_opts and log_opts
120+
// client_opts.endpoint = "localhost:1234";
121+
// Or we can use client_opts = trace_opts; to copy options from environment of
122+
// trace OTLP exporter.
123+
124+
std::shared_ptr<otlp::OtlpGrpcClient> shared_client =
125+
otlp::OtlpGrpcClientFactory::Create(client_opts);
126+
127+
// Create exporters
128+
auto trace_exporter =
129+
otlp::OtlpGrpcExporterFactory::Create(trace_opts, shared_client);
130+
auto log_exporter =
131+
otlp::OtlpGrpcLogRecordExporterFactory::Create(log_opts, shared_client);
132+
133+
// Other initialization codes ...
134+
}
135+
```
136+
137+
Be careful, create OTLP exporters with an existing `OtlpGrpcClient` will ignore
138+
the options of gRPC when passing the `OtlpGrpcExporterOptions` or other option
139+
object.
140+
97141
## SDK extension
98142

99143
Applications owners who want to extend existing SDK classes are expected

examples/otlp/grpc_log_main.cc

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4+
#include "opentelemetry/exporters/otlp/otlp_grpc_client_factory.h"
45
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
56
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h"
67
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
@@ -37,10 +38,10 @@ opentelemetry::exporter::otlp::OtlpGrpcLogRecordExporterOptions log_opts;
3738
std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> tracer_provider;
3839
std::shared_ptr<opentelemetry::sdk::logs::LoggerProvider> logger_provider;
3940

40-
void InitTracer()
41+
void InitTracer(const std::shared_ptr<otlp::OtlpGrpcClient> &shared_client)
4142
{
4243
// Create OTLP exporter instance
43-
auto exporter = otlp::OtlpGrpcExporterFactory::Create(opts);
44+
auto exporter = otlp::OtlpGrpcExporterFactory::Create(opts, shared_client);
4445
auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
4546
tracer_provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
4647

@@ -62,10 +63,10 @@ void CleanupTracer()
6263
trace::Provider::SetTracerProvider(none);
6364
}
6465

65-
void InitLogger()
66+
void InitLogger(const std::shared_ptr<otlp::OtlpGrpcClient> &shared_client)
6667
{
6768
// Create OTLP exporter instance
68-
auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(log_opts);
69+
auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(log_opts, shared_client);
6970
auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
7071
logger_provider = logs_sdk::LoggerProviderFactory::Create(std::move(processor));
7172

@@ -102,8 +103,11 @@ int main(int argc, char *argv[])
102103
log_opts.ssl_credentials_cacert_path = argv[2];
103104
}
104105
}
105-
InitLogger();
106-
InitTracer();
106+
107+
std::shared_ptr<otlp::OtlpGrpcClient> shared_client = otlp::OtlpGrpcClientFactory::Create(opts);
108+
109+
InitLogger(shared_client);
110+
InitTracer(shared_client);
107111
foo_library();
108112
CleanupTracer();
109113
CleanupLogger();

0 commit comments

Comments
 (0)