我在 ASP.NET Core 应用程序中实现了一个自定义中间件,以使用 Prometheus 记录 HTTP 请求指标。我使用 link 实现了中间件。但是,尽管每个 HTTP 请求都会触发中间件,但在访问 /metrics 端点时这些自定义指标不会出现。
我已确认在中间件调用期间执行了 counter.Labels(...).Inc() 调用,但 Prometheus 指标输出中缺少预期指标。存在来自 OpenTelemetry 的其他默认指标。
我寻求帮助来确定此问题的根本原因,并确保 Prometheus 正确抓取和显示自定义指标。
我的 Startup.cs 类如下所示:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOpenTelemetry()
.WithMetrics(builder => builder
.AddRuntimeInstrumentation()
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddPrometheusExporter());
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, CustomDbContext dbContext, ILogger<RedactableDbContext> logger)
{
app.UseRequestMiddleware();
...
}
以下是我用于 OpenTelemetry 和 Prometheus 的库:
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.6.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.6.0" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.6.0-rc.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.6.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.5.1-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.5.1-beta.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.RunTime" Version="1.5.1" />
<PackageReference Include="prometheus-net.AspNetCore" Version="8.2.0" />
自定义指标需要使用 OpenTelemetry SDK 注册。
修改现有的设置代码以包含对
AddMeter
: 的调用
services.AddOpenTelemetry()
.WithMetrics(builder => builder
.AddRuntimeInstrumentation()
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddPrometheusExporter());
.AddMeter("YourMeterName"));
如果没有这个,Prometheus 导出器将不会知道您的自定义指标。