Skip to content

Commit 1129fe9

Browse files
Add OTel logs to currencyservice
1 parent 1c6b68b commit 1129fe9

File tree

7 files changed

+61
-22
lines changed

7 files changed

+61
-22
lines changed

.env

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ CHECKOUT_SERVICE_PORT=5050
4747
CHECKOUT_SERVICE_ADDR=checkoutservice:${CHECKOUT_SERVICE_PORT}
4848

4949
# Currency Service
50+
OPENTELEMETRY_CPP_VERSION=1.13.0
5051
CURRENCY_SERVICE_PORT=7001
5152
CURRENCY_SERVICE_ADDR=currencyservice:${CURRENCY_SERVICE_PORT}
5253

docker-compose.minimal.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,7 @@ services:
130130
cache_from:
131131
- ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice
132132
args:
133-
- GRPC_VERSION=1.46.0
134-
- OPENTELEMETRY_VERSION=1.5.0
133+
- OPENTELEMETRY_CPP_VERSION
135134
deploy:
136135
resources:
137136
limits:
@@ -141,6 +140,7 @@ services:
141140
- "${CURRENCY_SERVICE_PORT}"
142141
environment:
143142
- CURRENCY_SERVICE_PORT
143+
- VERSION=${IMAGE_VERSION}
144144
- OTEL_EXPORTER_OTLP_ENDPOINT
145145
- OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME
146146
depends_on:

docker-compose.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ services:
161161
cache_from:
162162
- ${IMAGE_NAME}:${IMAGE_VERSION}-currencyservice
163163
args:
164-
- GRPC_VERSION=1.46.0
165-
- OPENTELEMETRY_VERSION=1.5.0
164+
- OPENTELEMETRY_CPP_VERSION
166165
deploy:
167166
resources:
168167
limits:
@@ -172,6 +171,7 @@ services:
172171
- "${CURRENCY_SERVICE_PORT}"
173172
environment:
174173
- CURRENCY_SERVICE_PORT
174+
- VERSION=${IMAGE_VERSION}
175175
- OTEL_EXPORTER_OTLP_ENDPOINT
176176
- OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currencyservice # The C++ SDK does not support OTEL_SERVICE_NAME
177177
depends_on:

src/currencyservice/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ FROM alpine:3.18 as builder
1818

1919
RUN apk update && apk add git cmake make g++ grpc-dev protobuf-dev linux-headers
2020

21-
ARG OPENTELEMETRY_CPP_VERSION=1.13.0
21+
ARG OPENTELEMETRY_CPP_VERSION
2222

2323
RUN git clone https://github.com/open-telemetry/opentelemetry-cpp \
2424
&& cd opentelemetry-cpp/ \
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
5+
#include "opentelemetry/logs/provider.h"
6+
#include "opentelemetry/sdk/logs/logger.h"
7+
#include "opentelemetry/sdk/logs/logger_provider_factory.h"
8+
#include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
9+
#include "opentelemetry/sdk/logs/logger_context_factory.h"
10+
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
11+
12+
using namespace std;
13+
namespace nostd = opentelemetry::nostd;
14+
namespace otlp = opentelemetry::exporter::otlp;
15+
namespace logs = opentelemetry::logs;
16+
namespace logs_sdk = opentelemetry::sdk::logs;
17+
18+
namespace
19+
{
20+
void initLogger() {
21+
otlp::OtlpGrpcLogRecordExporterOptions loggerOptions;
22+
auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(loggerOptions);
23+
auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
24+
std::vector<std::unique_ptr<logs_sdk::LogRecordProcessor>> processors;
25+
processors.push_back(std::move(processor));
26+
auto context = logs_sdk::LoggerContextFactory::Create(std::move(processors));
27+
std::shared_ptr<logs::LoggerProvider> provider = logs_sdk::LoggerProviderFactory::Create(std::move(context));
28+
opentelemetry::logs::Provider::SetLoggerProvider(provider);
29+
}
30+
31+
nostd::shared_ptr<opentelemetry::logs::Logger> getLogger(std::string name){
32+
auto provider = logs::Provider::GetLoggerProvider();
33+
return provider->GetLogger(name + "_logger", name, OPENTELEMETRY_SDK_VERSION);
34+
}
35+
}

src/currencyservice/src/meter_common.h

+1-9
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,14 @@ namespace otlp_exporter = opentelemetry::exporter::otlp;
1616

1717
namespace
1818
{
19-
std::string version{ "1.3.0" };
20-
std::string name{ "app_currency" };
21-
std::string schema{ "https://opentelemetry.io/schemas/1.2.0" };
22-
2319
void initMeter()
2420
{
2521
// Build MetricExporter
2622
otlp_exporter::OtlpGrpcMetricExporterOptions otlpOptions;
27-
// Configuration via environment variable not supported yet
28-
//otlpOptions.aggregation_temporality = otlp_exporter::PreferredAggregationTemporality::kCumulative;
2923
auto exporter = otlp_exporter::OtlpGrpcMetricExporterFactory::Create(otlpOptions);
3024

3125
// Build MeterProvider and Reader
3226
metric_sdk::PeriodicExportingMetricReaderOptions options;
33-
//options.export_interval_millis = std::chrono::milliseconds(60000);
34-
//options.export_timeout_millis = std::chrono::milliseconds(30000);
3527
std::unique_ptr<metric_sdk::MetricReader> reader{
3628
new metric_sdk::PeriodicExportingMetricReader(std::move(exporter), options) };
3729
auto provider = std::shared_ptr<metrics_api::MeterProvider>(new metric_sdk::MeterProvider());
@@ -40,7 +32,7 @@ namespace
4032
metrics_api::Provider::SetMeterProvider(provider);
4133
}
4234

43-
nostd::unique_ptr<metrics_api::Counter<uint64_t>> initIntCounter()
35+
nostd::unique_ptr<metrics_api::Counter<uint64_t>> initIntCounter(std::string name, std::string version)
4436
{
4537
std::string counter_name = name + "_counter";
4638
auto provider = metrics_api::Provider::GetMeterProvider();

src/currencyservice/src/server.cpp

+19-8
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 <cstdlib>
45
#include <iostream>
56
#include <math.h>
67
#include <demo.grpc.pb.h>
@@ -11,6 +12,7 @@
1112
#include "opentelemetry/trace/span_context_kv_iterable_view.h"
1213
#include "opentelemetry/baggage/baggage.h"
1314
#include "opentelemetry/nostd/string_view.h"
15+
#include "logger_common.h"
1416
#include "meter_common.h"
1517
#include "tracer_common.h"
1618

@@ -80,7 +82,11 @@ namespace
8082
{"ZAR", 16.0583},
8183
};
8284

85+
std::string version = std::getenv("VERSION");
86+
std::string name{ "currencyservice" };
87+
8388
nostd::unique_ptr<metrics_api::Counter<uint64_t>> currency_counter;
89+
nostd::shared_ptr<opentelemetry::logs::Logger> logger;
8490

8591
class HealthServer final : public grpc::health::v1::Health::Service
8692
{
@@ -127,10 +133,11 @@ class CurrencyService final : public oteldemo::CurrencyService::Service
127133

128134
span->AddEvent("Currencies fetched, response sent back");
129135
span->SetStatus(StatusCode::kOk);
136+
137+
logger->Info(std::string(__func__) + " successful");
138+
130139
// Make sure to end your spans!
131140
span->End();
132-
133-
std::cout << __func__ << " successful" << std::endl;
134141
return Status::OK;
135142
}
136143

@@ -203,14 +210,18 @@ class CurrencyService final : public oteldemo::CurrencyService::Service
203210
// End the span
204211
span->AddEvent("Conversion successful, response sent back");
205212
span->SetStatus(StatusCode::kOk);
206-
std::cout << __func__ << " conversion successful" << std::endl;
213+
214+
logger->Info(std::string(__func__) + " conversion successful");
215+
207216
span->End();
208217
return Status::OK;
209218

210219
} catch(...) {
211220
span->AddEvent("Conversion failed");
212221
span->SetStatus(StatusCode::kError);
213-
std::cout << __func__ << " conversion failure" << std::endl;
222+
223+
logger->Error(std::string(__func__) + " conversion failure");
224+
214225
span->End();
215226
return Status::CANCELLED;
216227
}
@@ -237,7 +248,7 @@ void RunServer(uint16_t port)
237248
builder.AddListeningPort(address, grpc::InsecureServerCredentials());
238249

239250
std::unique_ptr<Server> server(builder.BuildAndStart());
240-
std::cout << "Currency Server listening on port: " << address << std::endl;
251+
logger->Debug("Currency Server listening on port: " + address);
241252
server->Wait();
242253
server->Shutdown();
243254
}
@@ -252,11 +263,11 @@ int main(int argc, char **argv) {
252263

253264
uint16_t port = atoi(argv[1]);
254265

255-
std::cout << "Port: " << port << "\n";
256-
257266
initTracer();
258267
initMeter();
259-
currency_counter = initIntCounter();
268+
initLogger();
269+
currency_counter = initIntCounter(name, version);
270+
logger = getLogger(name);
260271
RunServer(port);
261272

262273
return 0;

0 commit comments

Comments
 (0)