The OTLP (OpenTelemetry Protocol) exporter implementation.
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
You can configure the OtlpExporter
through OtlpExporterOptions
properties and environment variables. The OtlpExporterOptions
setters take precedence over the environment variables.
-
BatchExportProcessorOptions
: Configuration options for the batch exporter. Only used if ExportProcessorType is set to Batch. -
Endpoint
: Target to which the exporter is going to send traces or metrics. The endpoint must be a valid Uri with scheme (http or https) and host, and MAY contain a port and path. -
ExportProcessorType
: Whether the exporter should use Batch or Simple exporting processor. -
Headers
: Optional headers for the connection. -
HttpClientFactory
: A factory function called to create theHttpClient
instance that will be used at runtime to transmit telemetry over HTTP when theHttpProtobuf
protocol is configured. See Configure HttpClient for more details. -
TimeoutMilliseconds
: Max waiting time for the backend to process a batch. -
Protocol
: OTLP transport protocol. Supported values:OtlpExportProtocol.Grpc
andOtlpExportProtocol.HttpProtobuf
.
See the TestOtlpExporter.cs
for
an example of how to use the exporter.
The following environment variables can be used to override the default
values of the OtlpExporterOptions
(following the OpenTelemetry specification).
Environment variable | OtlpExporterOptions property |
---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
Endpoint |
OTEL_EXPORTER_OTLP_HEADERS |
Headers |
OTEL_EXPORTER_OTLP_TIMEOUT |
TimeoutMilliseconds |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protocol (grpc or http/protobuf ) |
FormatException
is thrown in case of an invalid value for any of the
supported environment variables.
This package currently only supports exporting traces and metrics. Once the OTLP log data model is deemed stable, the OTLP log exporter will be folded into this package.
In the meantime, support for exporting logs is provided by installing the
OpenTelemetry.Exporter.OpenTelemetryProtocol.Logs
package.
If your application is targeting .NET Core 3.1, and you are using an insecure
(HTTP) endpoint, the following switch must be set before adding OtlpExporter
.
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport",
true);
See this for more information.
The HttpClientFactory
option is provided on OtlpExporterOptions
for users
who want to configure the HttpClient
used by the OtlpTraceExporter
and/or
OtlpMetricExporter
when HttpProtobuf
protocol is used. Simply replace the
function with your own implementation if you want to customize the generated
HttpClient
:
services.AddOpenTelemetryTracing((builder) => builder
.AddOtlpExporter(o =>
{
o.Protocol = OtlpExportProtocol.HttpProtobuf;
o.HttpClientFactory = () =>
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("X-MyCustomHeader", "value");
return client;
};
}));
For users using
IHttpClientFactory
you may also customize the named "OtlpTraceExporter" or "OtlpMetricExporter"
HttpClient
using the built-in AddHttpClient
extension:
services.AddHttpClient(
"OtlpTraceExporter",
configureClient: (client) =>
client.DefaultRequestHeaders.Add("X-MyCustomHeader", "value"));
Note: The single instance returned by HttpClientFactory
is reused by all
export requests.
This component uses an EventSource with the name "OpenTelemetry-Exporter-OpenTelemetryProtocol" for its internal logging. Please refer to SDK troubleshooting for instructions on seeing these internal logs.