From 1e5bf35e681fc4b7f0ee9bf37cc30dda53920f83 Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Thu, 23 Jul 2026 18:37:29 -0400 Subject: [PATCH 1/2] Add OTLP export flags to tracer startup diagnostic log Emit otlp_traces_export_enabled, otlp_metrics_export_enabled, and otlp_logs_export_enabled booleans in the DATADOG TRACER CONFIGURATION startup log, aligning the .NET tracer with the shared cross-tracer diagnostic-log schema. Co-Authored-By: Claude Opus 4.8 (1M context) --- tracer/src/Datadog.Trace/TracerManager.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tracer/src/Datadog.Trace/TracerManager.cs b/tracer/src/Datadog.Trace/TracerManager.cs index 5b1f57f728de..a526b4f91592 100644 --- a/tracer/src/Datadog.Trace/TracerManager.cs +++ b/tracer/src/Datadog.Trace/TracerManager.cs @@ -555,6 +555,15 @@ void WriteDictionary(IReadOnlyDictionary dictionary) writer.WritePropertyName("activity_listener_enabled"); writer.WriteValue(instanceSettings.IsActivityListenerEnabled); + writer.WritePropertyName("otlp_traces_export_enabled"); + writer.WriteValue(exporterSettings.TracesEncoding is TracesEncoding.OtlpProtobuf or TracesEncoding.OtlpJson); + + writer.WritePropertyName("otlp_metrics_export_enabled"); + writer.WriteValue(instanceSettings.OtlpRuntimeMetricsEnabled); + + writer.WritePropertyName("otlp_logs_export_enabled"); + writer.WriteValue(instanceSettings.OpenTelemetryLogsEnabled && instanceSettings.OtelLogsExporterEnabled); + writer.WritePropertyName("profiler_enabled"); writer.WriteValue(Profiler.Instance.Status.IsProfilerReady); From a50aa5f81c3f3c1227f2ea63a1e25d92b95949ef Mon Sep 17 00:00:00 2001 From: Brian Marks Date: Fri, 24 Jul 2026 17:34:18 -0400 Subject: [PATCH 2/2] Future-proof OTLP traces-encoding check with IsOtlp() helper Replace the hardcoded `TracesEncoding is OtlpProtobuf or OtlpJson` checks in the startup diagnostic log and the agent-writer selection with a centralized `IsOtlp()` extension defined as "any non-Datadog-native encoding". This is behavior-preserving for the current encodings but automatically covers any future OTLP encoding (e.g. gRPC), and still reports false on the unsupported-protocol fallback to Datadog-native. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Agent/TracesEncodingExtensions.cs | 22 +++++++++++++++++++ tracer/src/Datadog.Trace/TracerManager.cs | 2 +- .../src/Datadog.Trace/TracerManagerFactory.cs | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tracer/src/Datadog.Trace/Agent/TracesEncodingExtensions.cs diff --git a/tracer/src/Datadog.Trace/Agent/TracesEncodingExtensions.cs b/tracer/src/Datadog.Trace/Agent/TracesEncodingExtensions.cs new file mode 100644 index 000000000000..8191c9bb5b4e --- /dev/null +++ b/tracer/src/Datadog.Trace/Agent/TracesEncodingExtensions.cs @@ -0,0 +1,22 @@ +// +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +#nullable enable + +namespace Datadog.Trace.Agent; + +internal static class TracesEncodingExtensions +{ + /// + /// Returns true when traces are exported using any OTLP encoding. + /// + /// + /// Defined as "not a Datadog-native encoding" so future OTLP encodings (e.g. gRPC) are covered + /// automatically; if a new Datadog-native encoding is added, exclude it here. The unsupported-OTLP-protocol + /// fallback resolves to , so this correctly returns false for it. + /// + public static bool IsOtlp(this TracesEncoding encoding) + => encoding is not TracesEncoding.DatadogV0_4; +} diff --git a/tracer/src/Datadog.Trace/TracerManager.cs b/tracer/src/Datadog.Trace/TracerManager.cs index a526b4f91592..71356fc3d522 100644 --- a/tracer/src/Datadog.Trace/TracerManager.cs +++ b/tracer/src/Datadog.Trace/TracerManager.cs @@ -556,7 +556,7 @@ void WriteDictionary(IReadOnlyDictionary dictionary) writer.WriteValue(instanceSettings.IsActivityListenerEnabled); writer.WritePropertyName("otlp_traces_export_enabled"); - writer.WriteValue(exporterSettings.TracesEncoding is TracesEncoding.OtlpProtobuf or TracesEncoding.OtlpJson); + writer.WriteValue(exporterSettings.TracesEncoding.IsOtlp()); writer.WritePropertyName("otlp_metrics_export_enabled"); writer.WriteValue(instanceSettings.OtlpRuntimeMetricsEnabled); diff --git a/tracer/src/Datadog.Trace/TracerManagerFactory.cs b/tracer/src/Datadog.Trace/TracerManagerFactory.cs index a2ddc20c6525..668511e2bf22 100644 --- a/tracer/src/Datadog.Trace/TracerManagerFactory.cs +++ b/tracer/src/Datadog.Trace/TracerManagerFactory.cs @@ -285,7 +285,7 @@ protected virtual ISpanSampler GetSpanSampler(TracerSettings settings) protected virtual IAgentWriter GetAgentWriter(TracerSettings settings, IStatsdManager statsd, Action> updateSampleRates, Action updateConfigHash, IDiscoveryService discoveryService, TelemetrySettings telemetrySettings) { - if (settings.Manager.InitialExporterSettings.TracesEncoding is TracesEncoding.OtlpProtobuf or TracesEncoding.OtlpJson) + if (settings.Manager.InitialExporterSettings.TracesEncoding.IsOtlp()) { var otlpApi = new ManagedApiOtlp(settings); var otlpStatsAggregator = StatsAggregator.Create(otlpApi, settings, discoveryService, statsd, isOtlp: true);