An OpenTelemetry Prometheus exporter for configuring an ASP.NET Core application with an endpoint for Prometheus to scrape.
Note
This exporter does not support Exemplars. For using Exemplars, use the OTLP Exporter and use a component like OTel Collector to expose metrics (with exemplars) to Prometheus. This tutorial shows one way how to do that.
dotnet add package --prerelease OpenTelemetry.Exporter.Prometheus.AspNetCore
-
When using OpenTelemetry.Extensions.Hosting package on .NET 6.0+:
services.AddOpenTelemetry() .WithMetrics(builder => builder .AddPrometheusExporter());
-
Or configure directly:
Call the
MeterProviderBuilder.AddPrometheusExporter
extension to register the Prometheus exporter.var meterProvider = Sdk.CreateMeterProviderBuilder() .AddPrometheusExporter() .Build(); builder.Services.AddSingleton(meterProvider);
-
Register Prometheus scraping middleware using the
UseOpenTelemetryPrometheusScrapingEndpoint
extension method onIApplicationBuilder
:var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.UseOpenTelemetryPrometheusScrapingEndpoint();
Overloads of the
UseOpenTelemetryPrometheusScrapingEndpoint
extension are provided to change the path or for more advanced configuration a predicate function can be used:app.UseOpenTelemetryPrometheusScrapingEndpoint( context => context.Request.Path == "/internal/metrics" && context.Connection.LocalPort == 5067);
This can be used in combination with configuring multiple ports on the ASP.NET application to expose the scraping endpoint on a different port.
The PrometheusExporter
can be configured using the PrometheusAspNetCoreOptions
properties.
Defines the path for the Prometheus scrape endpoint for the middleware
registered by
UseOpenTelemetryPrometheusScrapingEndpoint
. Default value: "/metrics"
.
Configures scrape endpoint response caching. Multiple scrape requests within the
cache duration time period will receive the same previously generated response.
The default value is 300
. Set to 0
to disable response caching.
This component uses an EventSource with the name "OpenTelemetry-Exporter-Prometheus" for its internal logging. Please refer to SDK troubleshooting for instructions on seeing these internal logs.