-
Notifications
You must be signed in to change notification settings - Fork 854
Closed
Labels
enhancementNew feature or requestNew feature or requestpkg:OpenTelemetry.Exporter.OpenTelemetryProtocolIssues related to OpenTelemetry.Exporter.OpenTelemetryProtocol NuGet packageIssues related to OpenTelemetry.Exporter.OpenTelemetryProtocol NuGet package
Milestone
Description
[This was requested by @davidfowl & @samsp-msft]
Goal
There is a lot of code required to configure traces, metrics, & logs to use OTLP at the same endpoint:
var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]);
if (useOtlpExporter)
{
builder.Services.Configure<OpenTelemetryLoggerOptions>(logging => logging.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryMeterProvider(metrics => metrics.AddOtlpExporter());
builder.Services.ConfigureOpenTelemetryTracerProvider(tracing => tracing.AddOtlpExporter());
}The goal is to turn this into a ~one-liner.
Proposal
OpenTelemetry (SDK)
namespace OpenTelemetry;
+public interface IOpenTelemetryBuilder
+{
+ IServiceCollection Services { get; }
+}OpenTelemetry.Extensions.Hosting
namespace OpenTelemetry;
-public sealed class OpenTelemetryBuilder
+public sealed class OpenTelemetryBuilder : IOpenTelemetryBuilder
{
// No other changes
}OpenTelemetry.Exporter.OpenTelemetryProtocol
namespace OpenTelemetry;
+public sealed class OtlpExporterBuilderOptions
+{
+ public bool EnableLogging { get; set; } = true;
+ public bool EnableMetrics { get; set; } = true;
+ public bool EnableTracing { get; set; } = true;
+ public OtlpExporterOptions DefaultOptions { get; }
+ public OtlpExporterOptions LoggingOptions { get; }
+ public OtlpExporterOptions MetricsOptions { get; }
+ public OtlpExporterOptions TracingOptions { get; }
+}
+public static class OpenTelemetryBuilderOtlpExporterExtensions
+{
+ public static T AddOtlpExporter<T>(this T builder) where T : IOpenTelemetryBuilder {}
+ public static T AddOtlpExporter<T>(this T builder, Action<OtlpExporterBuilderOptions>? configure) where T : IOpenTelemetryBuilder {}
+ public static T AddOtlpExporter<T>(this T builder, string? name, Action<OtlpExporterBuilderOptions>? configure) where T : IOpenTelemetryBuilder {}
+}Example implementation
Scenarios enabled
-
The primary goal is accomplished:
services.AddOpenTelemetry().AddOtlpExporter();
That will turn on OTLP respecting the various environment variables.
-
And also really nice configuration integration is enabled:
appSettings.json:
{ "opentelemetry_otlpexporter": { "DefaultOptions": { "Protocol": "HttpProtobuf" }, "LoggingOptions": { "Endpoint": "http://log_endpoint/" }, "MetricsOptions": { "Endpoint": "http://metric_endpoint/" }, "TracingOptions": { "Endpoint": "http://trace_endpoint/" } } }bootstrap:
services.Configure<OtlpExporterBuilderOptions>(appBuilder.Configuration.GetSection("opentelemetry_otlpexporter")); services.AddOpenTelemetry().AddOtlpExporter();
alanwest and matt-hensley
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or requestpkg:OpenTelemetry.Exporter.OpenTelemetryProtocolIssues related to OpenTelemetry.Exporter.OpenTelemetryProtocol NuGet packageIssues related to OpenTelemetry.Exporter.OpenTelemetryProtocol NuGet package