mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-08-02 23:12:51 +02:00
more fun setting up tracing
This commit is contained in:
parent
8e733ff0da
commit
0ae551a970
2 changed files with 55 additions and 33 deletions
|
@ -317,7 +317,7 @@ ifeq (${ZT_OTEL},1)
|
||||||
OTEL_INSTALL_DIR=ext/opentelemetry-cpp-${OTEL_VERSION}/localinstall
|
OTEL_INSTALL_DIR=ext/opentelemetry-cpp-${OTEL_VERSION}/localinstall
|
||||||
DEFS+=-DZT_OPENTELEMETRY_ENABLED=1
|
DEFS+=-DZT_OPENTELEMETRY_ENABLED=1
|
||||||
INCLUDES+=-I${OTEL_INSTALL_DIR}/include
|
INCLUDES+=-I${OTEL_INSTALL_DIR}/include
|
||||||
LDLIBS+=-L${OTEL_INSTALL_DIR}/lib -lopentelemetry_common -lopentelemetry_resources -lopentelemetry_otlp_recordable -lopentelemetry_exporter_in_memory_metric -lopentelemetry_exporter_in_memory -lopentelemetry_exporter_ostream_logs -lopentelemetry_exporter_ostream_metrics -lopentelemetry_exporter_ostream_span -lopentelemetry_exporter_otlp_grpc -lopentelemetry_exporter_otlp_grpc_client -lopentelemetry_exporter_otlp_grpc_log -lopentelemetry_exporter_otlp_grpc_metrics -lopentelemetry_trace -lopentelemetry_common -lopentelemetry_resources -lopentelemetry_logs -lopentelemetry_metrics -lopentelemetry_version
|
LDLIBS+=-L${OTEL_INSTALL_DIR}/lib -lopentelemetry_exporter_in_memory_metric -lopentelemetry_exporter_in_memory -lopentelemetry_exporter_ostream_logs -lopentelemetry_exporter_ostream_metrics -lopentelemetry_exporter_ostream_span -lopentelemetry_exporter_otlp_grpc -lopentelemetry_exporter_otlp_grpc_client -lopentelemetry_exporter_otlp_grpc_log -lopentelemetry_exporter_otlp_grpc_metrics -lopentelemetry_otlp_recordable -lopentelemetry_common -lopentelemetry_trace -lopentelemetry_common -lopentelemetry_resources -lopentelemetry_logs -lopentelemetry_metrics -lopentelemetry_proto -lopentelemetry_proto_grpc -lopentelemetry_version -lprotobuf -lgrpc++
|
||||||
else
|
else
|
||||||
OTEL_INSTALL_DIR=ext/opentelemetry-cpp-api-only
|
OTEL_INSTALL_DIR=ext/opentelemetry-cpp-api-only
|
||||||
INCLUDES+=-I${OTEL_INSTALL_DIR}/include
|
INCLUDES+=-I${OTEL_INSTALL_DIR}/include
|
||||||
|
@ -343,7 +343,7 @@ endif
|
||||||
ifeq ($(ZT_CONTROLLER),1)
|
ifeq ($(ZT_CONTROLLER),1)
|
||||||
override CXXFLAGS+=-Wall -Wno-deprecated -std=c++17 -pthread $(INCLUDES) -DNDEBUG $(DEFS)
|
override CXXFLAGS+=-Wall -Wno-deprecated -std=c++17 -pthread $(INCLUDES) -DNDEBUG $(DEFS)
|
||||||
override LDLIBS+=-Lext/libpqxx-7.7.3/install/ubuntu22.04/$(EXT_ARCH)/lib -lpqxx -lpq ext/hiredis-1.0.2/lib/ubuntu22.04/$(EXT_ARCH)/libhiredis.a ext/redis-plus-plus-1.3.3/install/ubuntu22.04/$(EXT_ARCH)/lib/libredis++.a -lssl -lcrypto
|
override LDLIBS+=-Lext/libpqxx-7.7.3/install/ubuntu22.04/$(EXT_ARCH)/lib -lpqxx -lpq ext/hiredis-1.0.2/lib/ubuntu22.04/$(EXT_ARCH)/libhiredis.a ext/redis-plus-plus-1.3.3/install/ubuntu22.04/$(EXT_ARCH)/lib/libredis++.a -lssl -lcrypto
|
||||||
override DEFS+=-DZT_CONTROLLER_USE_LIBPQ -DZT_NO_PEER_METRICS -DZT_OTEL_EXPORTER
|
override DEFS+=-DZT_CONTROLLER_USE_LIBPQ -DZT_NO_PEER_METRICS -DZT_OPENTELEMETRY_ENABLED
|
||||||
override INCLUDES+=-I/usr/include/postgresql -Iext/libpqxx-7.7.3/install/ubuntu22.04/$(EXT_ARCH)/include -Iext/hiredis-1.0.2/include/ -Iext/redis-plus-plus-1.3.3/install/ubuntu22.04/$(EXT_ARCH)/include/sw/
|
override INCLUDES+=-I/usr/include/postgresql -Iext/libpqxx-7.7.3/install/ubuntu22.04/$(EXT_ARCH)/include -Iext/hiredis-1.0.2/include/ -Iext/redis-plus-plus-1.3.3/install/ubuntu22.04/$(EXT_ARCH)/include/sw/
|
||||||
ifeq ($(ZT_DEBUG),1)
|
ifeq ($(ZT_DEBUG),1)
|
||||||
override LDLIBS+=rustybits/target/debug/libsmeeclient.a
|
override LDLIBS+=rustybits/target/debug/libsmeeclient.a
|
||||||
|
@ -430,7 +430,7 @@ doc: manpages
|
||||||
|
|
||||||
ifeq (${ZT_OTEL},1)
|
ifeq (${ZT_OTEL},1)
|
||||||
otel:
|
otel:
|
||||||
cd ext/opentelemetry-cpp-1.21.0 && mkdir -p localinstall && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(shell pwd)/ext/opentelemetry-cpp-1.21.0/localinstall -DBUILD_TESTING=OFF -DOPENTELEMETRY_INSTALL=ON -DWITH_BENCHMARK=OFF -DWITH_EXAMPLES=OFF -DWITH_FUNC_TESTS=OFF -DUSE_THIRDPARTY_LIBRARIES=ON -DWITH_OTLP_GRPC=ON -DWITH_OTLP_HTTP=OFF -DWITH_PROMETHEUS=OFF
|
cd ext/opentelemetry-cpp-1.21.0 && mkdir -p localinstall && cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(shell pwd)/ext/opentelemetry-cpp-1.21.0/localinstall -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_TESTING=OFF -DOPENTELEMETRY_INSTALL=ON -DWITH_BENCHMARK=OFF -DWITH_EXAMPLES=OFF -DWITH_FUNC_TESTS=OFF -DUSE_THIRDPARTY_LIBRARIES=ON -DWITH_OTLP_GRPC=ON -DWITH_OTLP_HTTP=OFF -DWITH_PROMETHEUS=OFF
|
||||||
cd ext/opentelemetry-cpp-1.21.0/build && make -j4 install
|
cd ext/opentelemetry-cpp-1.21.0/build && make -j4 install
|
||||||
else
|
else
|
||||||
otel:
|
otel:
|
||||||
|
@ -460,7 +460,7 @@ _buildx:
|
||||||
@echo docker buildx inspect --bootstrap
|
@echo docker buildx inspect --bootstrap
|
||||||
|
|
||||||
central-controller: FORCE
|
central-controller: FORCE
|
||||||
make ZT_OTEL=1 otel && make -j4 ZT_CONTROLLER=1 ZT_OTEL=1 one
|
make ZT_OTEL=1 otel && ZT_OTEL=1 make -j4 ZT_CONTROLLER=1 one
|
||||||
|
|
||||||
central-controller-docker: _buildx FORCE
|
central-controller-docker: _buildx FORCE
|
||||||
docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push
|
docker buildx build --platform linux/amd64,linux/arm64 --no-cache -t registry.zerotier.com/zerotier-central/ztcentral-controller:${TIMESTAMP} -f ext/central-controller-docker/Dockerfile --build-arg git_branch=`git name-rev --name-only HEAD` . --push
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
* of this software will be governed by version 2.0 of the Apache License.
|
* of this software will be governed by version 2.0 of the Apache License.
|
||||||
*/
|
*/
|
||||||
/****/
|
/****/
|
||||||
|
#define ZT_OPENTELEMETRY_ENABLED 1
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
@ -59,12 +60,32 @@
|
||||||
|
|
||||||
#include <cpp-httplib/httplib.h>
|
#include <cpp-httplib/httplib.h>
|
||||||
|
|
||||||
#ifdef ZT_OTEL_EXPORTER
|
#ifdef ZT_OPENTELEMETRY_ENABLED
|
||||||
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter.h"
|
#include "opentelemetry/exporters/otlp/otlp_grpc_exporter.h"
|
||||||
|
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter.h"
|
||||||
|
#include "opentelemetry/exporters/otlp/otlp_grpc_metric_exporter.h"
|
||||||
|
#include "opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader.h"
|
||||||
|
#include "opentelemetry/sdk/metrics/meter_provider.h"
|
||||||
|
#include "opentelemetry/sdk/metrics/metric_reader.h"
|
||||||
|
#include "opentelemetry/sdk/metrics/provider.h"
|
||||||
#include "opentelemetry/sdk/resource/resource.h"
|
#include "opentelemetry/sdk/resource/resource.h"
|
||||||
#endif
|
#include "opentelemetry/sdk/trace/processor.h"
|
||||||
|
#include "opentelemetry/sdk/trace/provider.h"
|
||||||
|
#include "opentelemetry/sdk/trace/samplers/trace_id_ratio.h"
|
||||||
|
#include "opentelemetry/sdk/trace/simple_processor.h"
|
||||||
|
#include "opentelemetry/sdk/trace/tracer.h"
|
||||||
|
#include "opentelemetry/sdk/trace/tracer_context.h"
|
||||||
|
#include "opentelemetry/sdk/trace/tracer_provider.h"
|
||||||
|
|
||||||
|
namespace sdktrace = opentelemetry::v1::sdk::trace;
|
||||||
|
namespace sdkmetrics = opentelemetry::v1::sdk::metrics;
|
||||||
|
namespace sdklogs = opentelemetry::v1::sdk::logs;
|
||||||
|
namespace sdkresource = opentelemetry::v1::sdk::resource;
|
||||||
|
#else
|
||||||
|
#include "opentelemetry/logs/logger.h"
|
||||||
|
#include "opentelemetry/metrics/provider.h"
|
||||||
#include "opentelemetry/trace/provider.h"
|
#include "opentelemetry/trace/provider.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ZT_SSO_ENABLED
|
#if ZT_SSO_ENABLED
|
||||||
#include <zeroidc.h>
|
#include <zeroidc.h>
|
||||||
|
@ -920,7 +941,8 @@ class OneServiceImpl : public OneService {
|
||||||
std::string _ssoRedirectURL;
|
std::string _ssoRedirectURL;
|
||||||
|
|
||||||
#ifdef ZT_OPENTELEMETRY_ENABLED
|
#ifdef ZT_OPENTELEMETRY_ENABLED
|
||||||
nostd::shared_ptr<sdktrace::TracerProvider> _traceProvider;
|
|
||||||
|
opentelemetry::nostd::shared_ptr<opentelemetry::v1::trace::TracerProvider> _traceProvider;
|
||||||
std::string _exporterEndpoint;
|
std::string _exporterEndpoint;
|
||||||
double _exporterSampleRate;
|
double _exporterSampleRate;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1041,25 +1063,25 @@ class OneServiceImpl : public OneService {
|
||||||
{
|
{
|
||||||
if (! _exporterEndpoint.empty() && _exporterSampleRate > 0.0) {
|
if (! _exporterEndpoint.empty() && _exporterSampleRate > 0.0) {
|
||||||
// Set up OpenTelemetry exporter and tracer provider
|
// Set up OpenTelemetry exporter and tracer provider
|
||||||
opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
|
opentelemetry::v1::exporter::otlp::OtlpGrpcExporterOptions opts;
|
||||||
opts.endpoint = _exporterEndpoint + "/v1/traces";
|
opts.endpoint = _exporterEndpoint + "/v1/traces";
|
||||||
auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
||||||
auto processor = std::unique_ptr<opentelemetry::sdk::trace::SpanProcessor>(new opentelemetry::sdk::trace::SimpleSpanProcessor(std::move(exporter)));
|
auto processor = std::unique_ptr<sdktrace::SpanProcessor>(new sdktrace::SimpleSpanProcessor(std::move(exporter)));
|
||||||
|
auto processors = std::vector<std::unique_ptr<sdktrace::SpanProcessor> >();
|
||||||
char buf[16];
|
processors.push_back(std::move(processor));
|
||||||
|
char buf[256];
|
||||||
auto versionString = std::stringstream();
|
auto versionString = std::stringstream();
|
||||||
versionString << ZEROTIER_ONE_VERSION_MAJOR << "." << ZEROTIER_ONE_VERSION_MINOR << "." << ZEROTIER_ONE_VERSION_REVISION;
|
versionString << ZEROTIER_ONE_VERSION_MAJOR << "." << ZEROTIER_ONE_VERSION_MINOR << "." << ZEROTIER_ONE_VERSION_REVISION;
|
||||||
auto resource_attributes = opentelemetry::sdk::resource::ResourceAttributes { { "service.name", "zerotier-one" },
|
auto resource_attributes = sdkresource::ResourceAttributes { { "service.name", "zerotier-one" },
|
||||||
{ "service.version", versionString.str() },
|
{ "service.version", versionString.str() },
|
||||||
{ "service.node_id", _node->identity().address().toString(buf) },
|
{ "service.node_id", _node->identity().address().toString(buf) },
|
||||||
{ "service.namespace", "com.zerotier.zerotier-one" } };
|
{ "service.namespace", "com.zerotier.zerotier-one" } };
|
||||||
auto resource = std::unique_ptr<opentelemetry::sdk::resource::Resource>(new opentelemetry::sdk::resource::Resource(resource_attributes));
|
|
||||||
auto sampler = std::unique_ptr<sdktrace::TraceIdRatioBasedSampler>(new sdktrace::TraceIdRatioBasedSampler(_exporterSampleRate));
|
|
||||||
auto tracer_context = std::make_shared<sdktrace::TracerContext>(std::move(processor), resource, std::move(sampler));
|
|
||||||
_traceProvider = nostd::shared_ptr<sdktrace::TracerProvider>(new sdktrace::TracerProvider(tracer_context));
|
|
||||||
|
|
||||||
opentelemetry::trace::Provider::SetTracerProvider(_traceProvider);
|
auto resource = sdkresource::Resource::Create(resource_attributes);
|
||||||
opentelemetry::trace::Provider::
|
auto sampler = std::unique_ptr<sdktrace::Sampler>(new sdktrace::TraceIdRatioBasedSampler(_exporterSampleRate));
|
||||||
|
auto tracer_context = std::make_unique<sdktrace::TracerContext>(std::move(processors), resource, std::move(sampler));
|
||||||
|
_traceProvider = opentelemetry::nostd::shared_ptr<sdktrace::TracerProvider>(new sdktrace::TracerProvider(std::move(tracer_context)));
|
||||||
|
sdktrace::Provider::SetTracerProvider(_traceProvider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1067,12 +1089,12 @@ class OneServiceImpl : public OneService {
|
||||||
{
|
{
|
||||||
if (! _exporterEndpoint.empty()) {
|
if (! _exporterEndpoint.empty()) {
|
||||||
// Set up OpenTelemetry metrics exporter
|
// Set up OpenTelemetry metrics exporter
|
||||||
opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
|
// opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
|
||||||
opts.endpoint = _exporterEndpoint + "/v1/metrics";
|
// opts.endpoint = _exporterEndpoint + "/v1/metrics";
|
||||||
auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
// auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
||||||
auto processor = std::unique_ptr<opentelemetry::sdk::metrics::MetricReader>(new opentelemetry::sdk::metrics::PeriodicExportingMetricReader(std::move(exporter), std::chrono::seconds(5)));
|
// auto processor = std::unique_ptr<sdkmetrics::MetricReader>(new sdkmetrics::PeriodicExportingMetricReader(std::move(exporter)));
|
||||||
auto meter_provider = nostd::shared_ptr<sdkmetrics::MeterProvider>(new sdkmetrics::MeterProvider(std::move(processor)));
|
// auto meter_provider = opentelemetry::v1::nostd::shared_ptr<sdkmetrics::MeterProvider>(new sdkmetrics::MeterProvider(std::move(processor)));
|
||||||
opentelemetry::metrics::Provider::SetMeterProvider(meter_provider);
|
// sdkmetrics::Provider::SetMeterProvider(meter_provider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1080,12 +1102,12 @@ class OneServiceImpl : public OneService {
|
||||||
{
|
{
|
||||||
if (! _exporterEndpoint.empty()) {
|
if (! _exporterEndpoint.empty()) {
|
||||||
// Set up OpenTelemetry logging exporter
|
// Set up OpenTelemetry logging exporter
|
||||||
opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
|
// opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
|
||||||
opts.endpoint = _exporterEndpoint + "/v1/logs";
|
// opts.endpoint = _exporterEndpoint + "/v1/logs";
|
||||||
auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
// auto exporter = std::unique_ptr<opentelemetry::exporter::otlp::OtlpGrpcExporter>(new opentelemetry::exporter::otlp::OtlpGrpcExporter(opts));
|
||||||
auto processor = std::unique_ptr<opentelemetry::sdk::logs::LogRecordProcessor>(new opentelemetry::sdk::logs::SimpleLogRecordProcessor(std::move(exporter)));
|
// auto processor = std::unique_ptr<opentelemetry::v1::sdk::logs::LogRecordProcessor>(new opentelemetry::v1::sdk::logs::SimpleLogRecordProcessor(std::move(exporter)));
|
||||||
auto logger_provider = nostd::shared_ptr<sdklogs::LoggerProvider>(new sdklogs::LoggerProvider(std::move(processor)));
|
// auto logger_provider = opentelemetry::nostd::shared_ptr<opentelemetry::v1::sdk::logs::LoggerProvider>(new opentelemetry::v1::sdk::logs::LoggerProvider(std::move(processor)));
|
||||||
opentelemetry::logs::Provider::SetLoggerProvider(logger_provider);
|
// opentelemetry::logs::Provider::SetLoggerProvider(logger_provider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue