Skip to content

Commit 19e3e43

Browse files
committed
Allow telemetry to be enabled/disabled using DD_INSTRUMENTATION_TELEMETRY_ENABLED
1 parent e54bd30 commit 19e3e43

File tree

7 files changed

+68
-43
lines changed

7 files changed

+68
-43
lines changed

src/datadog/datadog_agent.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,18 +144,19 @@ DatadogAgent::DatadogAgent(
144144
event_scheduler_(config.event_scheduler),
145145
cancel_scheduled_flush_(event_scheduler_->schedule_recurring_event(
146146
config.flush_interval, [this]() { flush(); })),
147-
cancel_telemetry_timer_(event_scheduler_->schedule_recurring_event(
148-
std::chrono::seconds(10),
149-
[this, n = 0]() mutable {
150-
n++;
151-
tracer_telemetry_->capture_metrics();
152-
if (n % 6 == 0) {
153-
send_heartbeat_and_telemetry();
154-
}
155-
})),
156147
flush_interval_(config.flush_interval) {
157148
assert(logger_);
158149
assert(tracer_telemetry_);
150+
if (tracer_telemetry_->enabled()) {
151+
cancel_telemetry_timer_ = event_scheduler_->schedule_recurring_event(
152+
std::chrono::seconds(10), [this, n = 0]() mutable {
153+
n++;
154+
tracer_telemetry_->capture_metrics();
155+
if (n % 6 == 0) {
156+
send_heartbeat_and_telemetry();
157+
}
158+
});
159+
}
159160
}
160161

161162
DatadogAgent::~DatadogAgent() {

src/datadog/environment.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ namespace environment {
2727
#define LIST_ENVIRONMENT_VARIABLES(MACRO) \
2828
MACRO(DD_AGENT_HOST) \
2929
MACRO(DD_ENV) \
30+
MACRO(DD_INSTRUMENTATION_TELEMETRY_ENABLED) \
3031
MACRO(DD_PROPAGATION_STYLE_EXTRACT) \
3132
MACRO(DD_PROPAGATION_STYLE_INJECT) \
3233
MACRO(DD_TRACE_PROPAGATION_STYLE_EXTRACT) \

src/datadog/tracer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
244244
: logger_(config.logger),
245245
collector_(/* see constructor body */),
246246
defaults_(std::make_shared<SpanDefaults>(config.defaults)),
247-
tracer_telemetry_(
248-
std::make_shared<TracerTelemetry>(clock, logger_, defaults_)),
247+
tracer_telemetry_(std::make_shared<TracerTelemetry>(
248+
config.report_telemetry, clock, logger_, defaults_)),
249249
trace_sampler_(
250250
std::make_shared<TraceSampler>(config.trace_sampler, clock)),
251251
span_sampler_(std::make_shared<SpanSampler>(config.span_sampler, clock)),
@@ -264,7 +264,9 @@ Tracer::Tracer(const FinalizedTracerConfig& config,
264264
auto agent = std::make_shared<DatadogAgent>(agent_config, tracer_telemetry_,
265265
clock, config.logger);
266266
collector_ = agent;
267-
agent->send_app_started(config_json());
267+
if (tracer_telemetry_->enabled()) {
268+
agent->send_app_started(config_json());
269+
}
268270
}
269271

270272
if (config.log_on_startup) {

src/datadog/tracer_config.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,13 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &config) {
323323
result.collector = config.collector;
324324
}
325325

326+
bool report_telemetry = config.report_telemetry;
327+
if (auto enabled_env =
328+
lookup(environment::DD_INSTRUMENTATION_TELEMETRY_ENABLED)) {
329+
report_telemetry = !falsy(*enabled_env);
330+
}
331+
result.report_telemetry = report_telemetry;
332+
326333
if (auto trace_sampler_config = finalize_config(config.trace_sampler)) {
327334
result.trace_sampler = std::move(*trace_sampler_config);
328335
} else {

src/datadog/tracer_config.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ struct TracerConfig {
5050
// variable.
5151
bool report_traces = true;
5252

53+
// `report_telemetry` indicates whether telemetry about the tracer will be
54+
// sent to a collector (`true`) or discarded on completion (`false`). If
55+
// `report_telemetry` is `false`, then this feature is disabled.
56+
// `report_telemetry` is overridden by the
57+
// `DD_INSTRUMENTATION_TELEMETRY_ENABLED` environment variable.
58+
bool report_telemetry = true;
59+
5360
// `trace_sampler` configures trace sampling. Trace sampling determines which
5461
// traces are sent to Datadog. See `trace_sampler_config.h`.
5562
TraceSamplerConfig trace_sampler;
@@ -130,6 +137,7 @@ class FinalizedTracerConfig {
130137
std::shared_ptr<Logger> logger;
131138
bool log_on_startup;
132139
bool trace_id_128_bit;
140+
bool report_telemetry;
133141

134142
std::string runtime_id = uuid();
135143
};

src/datadog/tracer_telemetry.cpp

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,43 @@ namespace datadog {
1010
namespace tracing {
1111

1212
TracerTelemetry::TracerTelemetry(
13-
const Clock& clock, const std::shared_ptr<Logger>& logger,
13+
bool enabled, const Clock& clock, const std::shared_ptr<Logger>& logger,
1414
const std::shared_ptr<const SpanDefaults>& span_defaults)
15-
: clock_(clock),
15+
: enabled_(enabled),
16+
clock_(clock),
1617
logger_(logger),
1718
span_defaults_(span_defaults),
1819
hostname_(get_hostname().value_or("hostname-unavailable")) {
19-
metrics_snapshots_.emplace_back(metrics_.tracer.spans_created,
20-
MetricSnapshot{});
21-
metrics_snapshots_.emplace_back(metrics_.tracer.spans_finished,
22-
MetricSnapshot{});
23-
metrics_snapshots_.emplace_back(metrics_.tracer.trace_segments_created_new,
24-
MetricSnapshot{});
25-
metrics_snapshots_.emplace_back(
26-
metrics_.tracer.trace_segments_created_continued, MetricSnapshot{});
27-
metrics_snapshots_.emplace_back(metrics_.tracer.trace_segments_closed,
28-
MetricSnapshot{});
29-
metrics_snapshots_.emplace_back(metrics_.trace_api.requests,
30-
MetricSnapshot{});
31-
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_1xx,
32-
MetricSnapshot{});
33-
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_2xx,
34-
MetricSnapshot{});
35-
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_3xx,
36-
MetricSnapshot{});
37-
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_4xx,
38-
MetricSnapshot{});
39-
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_5xx,
40-
MetricSnapshot{});
41-
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_timeout,
42-
MetricSnapshot{});
43-
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_network,
44-
MetricSnapshot{});
45-
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_status_code,
46-
MetricSnapshot{});
20+
if (enabled_) {
21+
metrics_snapshots_.emplace_back(metrics_.tracer.spans_created,
22+
MetricSnapshot{});
23+
metrics_snapshots_.emplace_back(metrics_.tracer.spans_finished,
24+
MetricSnapshot{});
25+
metrics_snapshots_.emplace_back(metrics_.tracer.trace_segments_created_new,
26+
MetricSnapshot{});
27+
metrics_snapshots_.emplace_back(
28+
metrics_.tracer.trace_segments_created_continued, MetricSnapshot{});
29+
metrics_snapshots_.emplace_back(metrics_.tracer.trace_segments_closed,
30+
MetricSnapshot{});
31+
metrics_snapshots_.emplace_back(metrics_.trace_api.requests,
32+
MetricSnapshot{});
33+
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_1xx,
34+
MetricSnapshot{});
35+
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_2xx,
36+
MetricSnapshot{});
37+
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_3xx,
38+
MetricSnapshot{});
39+
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_4xx,
40+
MetricSnapshot{});
41+
metrics_snapshots_.emplace_back(metrics_.trace_api.responses_5xx,
42+
MetricSnapshot{});
43+
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_timeout,
44+
MetricSnapshot{});
45+
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_network,
46+
MetricSnapshot{});
47+
metrics_snapshots_.emplace_back(metrics_.trace_api.errors_status_code,
48+
MetricSnapshot{});
49+
}
4750
}
4851

4952
std::string TracerTelemetry::app_started(nlohmann::json&& tracer_config) {

src/datadog/tracer_telemetry.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class Logger;
1313
class SpanDefaults;
1414

1515
class TracerTelemetry {
16+
bool enabled_ = false;
1617
Clock clock_;
1718
std::shared_ptr<Logger> logger_;
1819
std::shared_ptr<const SpanDefaults> span_defaults_;
@@ -63,8 +64,10 @@ class TracerTelemetry {
6364
} metrics_;
6465

6566
public:
66-
TracerTelemetry(const Clock& clock, const std::shared_ptr<Logger>& logger,
67+
TracerTelemetry(bool enabled, const Clock& clock,
68+
const std::shared_ptr<Logger>& logger,
6769
const std::shared_ptr<const SpanDefaults>& span_defaults);
70+
bool enabled() { return enabled_; };
6871
auto& metrics() { return metrics_; };
6972
std::string app_started(nlohmann::json&& tracer_config);
7073
void capture_metrics();

0 commit comments

Comments
 (0)