opentelemetry-dotnet
opentelemetry-dotnet copied to clipboard
http.route attribute is not reported for health check request
Bug Report
List of all OpenTelemetry NuGet
packages and version that you are
using (e.g. OpenTelemetry 1.0.2):
<PackageReference Include="OpenTelemetry" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.7.0" />
Runtime version (e.g. net462, net48, netcoreapp3.1, net6.0 etc. You can
find this information from the *.csproj file):
net6.0
Symptom
http.server.request.duration metric emitted for /hc health request doesn't have http.route attribute.
What is the expected behavior?
http.server.request.duration metric emitted has http.route attribute with a value of "/hc".
What is the actual behavior?
http.route attribute is absent:
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 GET https://localhost:5001/hc - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/1.1 GET https://localhost:5001/hc - - - 200 - text/plain 16.8060ms
Resource associated with Metric:
telemetry.sdk.name: opentelemetry
telemetry.sdk.language: dotnet
telemetry.sdk.version: 1.7.0
service.name: unknown_service:SandboxOTel
Metric Name: http.server.request.duration, Duration of HTTP server requests., Unit: s, Meter: OpenTelemetry.Instrumentation.AspNetCore/1.0.0.0
(2024-01-11T19:08:40.5818922Z, 2024-01-11T19:08:50.5163489Z] http.request.method: GET http.response.status_code: 200 network.protocol.version: 1.1 url.scheme: https Histogram
Value: Sum: 0.0204545 Count: 1 Min: 0.0204545 Max: 0.0204545
(-Infinity,0.005]:0
(0.005,0.01]:0
(0.01,0.025]:1
(0.025,0.05]:0
(0.05,0.075]:0
(0.075,0.1]:0
(0.1,0.25]:0
(0.25,0.5]:0
(0.5,0.75]:0
(0.75,1]:0
(1,2.5]:0
(2.5,5]:0
(5,7.5]:0
(7.5,10]:0
(10,+Infinity]:0
Reproduce
var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Services.AddOpenTelemetry()
.WithMetrics(metricsBuilder =>
{
metricsBuilder.AddMeter("*");
metricsBuilder.AddAspNetCoreInstrumentation();
metricsBuilder.AddConsoleExporter();
});
builder.Services.AddSingleton(new Meter("Sandbox"));
builder.Services.AddHealthChecks();
var app = builder.Build();
app.UseHealthChecks("/hc", new HealthCheckOptions()
{
Predicate = (check) => check.Tags.Contains("live"),
});
app.Run();
Additional Context
None.