title | weight |
---|---|
Exporters |
50 |
{{% docs/languages/exporters/intro dotnet %}}
If you want to send telemetry data to an OTLP endpoint (like the OpenTelemetry Collector, Jaeger or Prometheus), you can choose between two different protocols to transport your data:
- HTTP/protobuf
- gRPC
Start by installing the
OpenTelemetry.Exporter.OpenTelemetryProtocol
package as a dependency for your project:
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol
If you're using ASP.NET Core install the
OpenTelemetry.Extensions.Hosting
package as well:
dotnet add package OpenTelemetry.Extensions.Hosting
Configure the exporters in your ASP.NET Core services:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
// The rest of your setup code goes here
.AddOtlpExporter())
.WithMetrics(metrics => metrics
// The rest of your setup code goes here
.AddOtlpExporter());
builder.Logging.AddOpenTelemetry(logging => {
// The rest of your setup code goes here
logging.AddOtlpExporter();
});
This will, by default, send telemetry using gRPC to http://localhost:4317, to customize this to use HTTP and the protobuf format, you can add options like this:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
// The rest of your setup code goes here
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/traces");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}))
.WithMetrics(metrics => metrics
// The rest of your setup code goes here
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/metrics");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}));
builder.Logging.AddOpenTelemetry(logging => {
// The rest of your setup code goes here
logging.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/logs");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
});
});
Configure the exporter when creating a TracerProvider
, MeterProvider
or
LoggerFactory
:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// Other setup code, like setting a resource goes here too
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/traces");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
})
.Build();
var meterProvider = Sdk.CreateMeterProviderBuilder()
// Other setup code, like setting a resource goes here too
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/metrics");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
})
.Build();
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("your-endpoint-here/v1/logs");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
})
});
});
Use environment variables to set values like headers and an endpoint URL for production.
The console exporter is useful for development and debugging tasks, and is the
simplest to set up. Start by installing the
OpenTelemetry.Exporter.Console
package as a dependency for your project:
dotnet add package OpenTelemetry.Exporter.Console
If you're using ASP.NET Core install the
OpenTelemetry.Extensions.Hosting
package as well:
dotnet add package OpenTelemetry.Extensions.Hosting
Configure the exporter in your ASP.NET Core services:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
// The rest of your setup code goes here
.AddConsoleExporter()
)
.WithMetrics(metrics => metrics
// The rest of your setup code goes here
.AddConsoleExporter()
);
builder.Logging.AddOpenTelemetry(logging => {
// The rest of your setup code goes here
logging.AddConsoleExporter();
});
Configure the exporter when creating a TracerProvider
, MeterProvider
or
LoggerFactory
:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// The rest of your setup code goes here
.AddConsoleExporter()
.Build();
var meterProvider = Sdk.CreateMeterProviderBuilder()
// The rest of your setup code goes here
.AddConsoleExporter()
.Build();
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(logging =>
{
logging.AddConsoleExporter();
});
});
{{% docs/languages/exporters/jaeger %}}
{{% include prometheus-setup.md %}}
Install the exporter package as a dependency for your application:
dotnet add package OpenTelemetry.Exporter.Prometheus.AspNetCore --version {{% version-from-registry exporter-dotnet-prometheus-aspnetcore %}}
If you're using ASP.NET Core install the
OpenTelemetry.Extensions.Hosting
package as well:
dotnet add package OpenTelemetry.Extensions.Hosting
Configure the exporter in your ASP.NET Core services:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
.WithMetrics(metrics => metrics.AddPrometheusExporter());
You'll then need to add the endpoint so that Prometheus can scrape your site.
You can do this using the IAppBuilder
extension like this:
var builder = WebApplication.CreateBuilder(args);
// .. Setup
var app = builder.Build();
app.UseOpenTelemetryPrometheusScrapingEndpoint();
await app.RunAsync();
{{% alert color="warning" title="Warning" %}}
This component is intended for dev inner-loop, there is no plan to make it
production ready. Production environments should use
OpenTelemetry.Exporter.Prometheus.AspNetCore
,
or a combination of
OpenTelemetry.Exporter.OpenTelemetryProtocol
and
OpenTelemetry Collector.
{{% /alert %}}
For applications not using ASP.NET Core, you can use the HttpListener
version
which is available in a
different package:
dotnet add package OpenTelemetry.Exporter.Prometheus.HttpListener --version {{% version-from-registry exporter-dotnet-prometheus-httplistener %}}
Then this is setup directly on the MeterProviderBuilder
:
var meterProvider = Sdk.CreateMeterProviderBuilder()
.AddMeter(MyMeter.Name)
.AddPrometheusHttpListener(
options => options.UriPrefixes = new string[] { "http://localhost:9464/" })
.Build();
Finally, register the Prometheus scraping middleware using the
UseOpenTelemetryPrometheusScrapingEndpoint
extension method on
IApplicationBuilder
:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseOpenTelemetryPrometheusScrapingEndpoint();
Further details on configuring the Prometheus exporter can be found here.
{{% include zipkin-setup.md %}}
To send your trace data to Zipkin, install the exporter package as a dependency for your application:
dotnet add package OpenTelemetry.Exporter.Zipkin
If you're using ASP.NET Core install the
OpenTelemetry.Extensions.Hosting
package as well:
dotnet add package OpenTelemetry.Extensions.Hosting
Configure the exporter in your ASP.NET Core services:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenTelemetry()
.WithTracing(tracing => tracing
// The rest of your setup code goes here
.AddZipkinExporter(options =>
{
options.Endpoint = new Uri("your-zipkin-uri-here");
}));
Configure the exporter when creating a tracer provider:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
// The rest of your setup code goes here
.AddZipkinExporter(options =>
{
options.Endpoint = new Uri("your-zipkin-uri-here");
})
.Build();