Update OtlpExporter options (#1781)

* Modify OtlpExporterOptions

* Updated CHANGELOG.md

* Address PR comments

* Address PR comments

* Updated the Timeout property summary

* Updated CHANGELOG.md

Co-authored-by: Cijo Thomas <cithomas@microsoft.com>
This commit is contained in:
Utkarsh Umesan Pillai 2021-02-03 13:26:58 -08:00 committed by GitHub
parent fbfdb7030d
commit e0bcc80f33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 59 additions and 10 deletions

View File

@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool

View File

@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool

View File

@ -11,9 +11,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool

View File

@ -9,9 +9,11 @@ OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.get -> System.Uri
OpenTelemetry.Exporter.OtlpExporterOptions.Endpoint.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
OpenTelemetry.Exporter.OtlpExporterOptions.ExportProcessorType.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> Grpc.Core.Metadata
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.get -> string
OpenTelemetry.Exporter.OtlpExporterOptions.Headers.set -> void
OpenTelemetry.Exporter.OtlpExporterOptions.OtlpExporterOptions() -> void
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.get -> int
OpenTelemetry.Exporter.OtlpExporterOptions.TimeoutMilliseconds.set -> void
OpenTelemetry.Trace.OtlpTraceExporterHelperExtensions
override OpenTelemetry.Exporter.OtlpTraceExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> activityBatch) -> OpenTelemetry.ExportResult
override OpenTelemetry.Exporter.OtlpTraceExporter.OnShutdown(int timeoutMilliseconds) -> bool

View File

@ -6,8 +6,12 @@
`OpenTelemetry.Exporter` namespace.
([#1770](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1770))
* Changed default port for OTLP Exporter from 55680 to 4317
* Default ServiceName, if not found in Resource, is obtained from SDK
using GetDefaultResource().
* Default ServiceName, if not found in Resource, is obtained from SDK using
GetDefaultResource().
* Modified the data type of Headers option to string; Added a new option called
TimeoutMilliseconds for computing the `deadline` to be used by gRPC client for
`Export`
([#1781](https://github.com/open-telemetry/opentelemetry-dotnet/pull/1781))
## 1.0.0-rc2

View File

@ -62,9 +62,15 @@ namespace OpenTelemetry.Exporter
#endif
/// <summary>
/// Gets or sets optional headers for the connection.
/// Gets or sets optional headers for the connection. Refer to the <a href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#specifying-headers-via-environment-variables">
/// specification</a> for information on the expected format for Headers.
/// </summary>
public Metadata Headers { get; set; } = new Metadata();
public string Headers { get; set; }
/// <summary>
/// Gets or sets the max waiting time (in milliseconds) for the backend to process each span batch. The default value is 10000.
/// </summary>
public int TimeoutMilliseconds { get; set; } = 10000;
/// <summary>
/// Gets or sets the export processor type to be used with the OpenTelemetry Protocol Exporter.

View File

@ -45,6 +45,7 @@ namespace OpenTelemetry.Exporter
#endif
private readonly OtlpCollector.TraceService.ITraceServiceClient traceClient;
private readonly Metadata headers;
private DateTime deadline;
/// <summary>
/// Initializes a new instance of the <see cref="OtlpTraceExporter"/> class.
@ -63,7 +64,12 @@ namespace OpenTelemetry.Exporter
internal OtlpTraceExporter(OtlpExporterOptions options, OtlpCollector.TraceService.ITraceServiceClient traceServiceClient = null)
{
this.options = options ?? throw new ArgumentNullException(nameof(options));
this.headers = options.Headers ?? throw new ArgumentException("Headers were not provided on options.", nameof(options));
this.headers = GetMetadataFromHeaders(options.Headers);
if (this.options.TimeoutMilliseconds <= 0)
{
throw new ArgumentException("Timeout value provided is not a positive number.", nameof(this.options.TimeoutMilliseconds));
}
if (traceServiceClient != null)
{
this.traceClient = traceServiceClient;
@ -97,10 +103,11 @@ namespace OpenTelemetry.Exporter
OtlpCollector.ExportTraceServiceRequest request = new OtlpCollector.ExportTraceServiceRequest();
request.AddBatch(this.ProcessResource, activityBatch);
this.deadline = DateTime.UtcNow.AddMilliseconds(this.options.TimeoutMilliseconds);
try
{
this.traceClient.Export(request, headers: this.headers);
this.traceClient.Export(request, headers: this.headers, deadline: this.deadline);
}
catch (RpcException ex)
{
@ -159,5 +166,29 @@ namespace OpenTelemetry.Exporter
return Task.WaitAny(new Task[] { this.channel.ShutdownAsync(), Task.Delay(timeoutMilliseconds) }) == 0;
}
private static Metadata GetMetadataFromHeaders(string headers)
{
var metadata = new Metadata();
if (!string.IsNullOrEmpty(headers))
{
Array.ForEach(
headers.Split(','),
(pair) =>
{
var keyValueData = pair.Split('=');
if (keyValueData.Length != 2)
{
throw new ArgumentException("Headers provided in an invalid format.");
}
var key = keyValueData[0].Trim();
var value = keyValueData[1].Trim();
metadata.Add(key, value);
});
}
return metadata;
}
}
}