如何为ASP.NET Core应用单独配置OpenTelemetry Prometheus采集端口
解决方案:为OpenTelemetry Prometheus端点单独配置端口
在ASP.NET Core中,要实现主应用(5002端口)和OpenTelemetry指标端点(4000端口)分离,有两种可靠的实现方式:
方式一:单进程多端口+请求筛选
这种方式无需额外进程,通过让主应用监听多个端口,再用端口筛选隔离不同功能:
先配置Kestrel监听主应用端口和指标端口:
var builder = WebApplication.CreateBuilder(args); builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(5002); // 主应用端口 options.ListenAnyIP(4000); // 指标专用端口 });用
MapWhen分离指标端点和主应用中间件:var app = builder.Build(); // 仅对4000端口提供指标端点服务 app.MapWhen(context => context.Connection.LocalPort == 4000, metricsApp => { metricsApp.UseOpenTelemetryPrometheusScrapingEndpoint(); // 此处无需添加主应用的其他中间件,避免干扰 }); // 仅对5002端口提供主应用服务 app.MapWhen(context => context.Connection.LocalPort != 4000, mainApp => { mainApp.UseRouting(); mainApp.UseAuthorization(); mainApp.MapControllers(); // 其他主应用中间件配置 }); app.Run();
方式二:独立Host承载指标端点
如果希望指标服务完全独立于主应用(和你之前使用AddMetricServer的模式更接近),可以启动第二个独立的Host:
配置并启动主应用Host:
var mainBuilder = WebApplication.CreateBuilder(args); mainBuilder.WebHost.ConfigureKestrel(options => options.ListenAnyIP(5002)); // 添加主应用服务 mainBuilder.Services.AddControllers(); // ...其他主应用服务配置 var mainApp = mainBuilder.Build(); // 主应用中间件配置 mainApp.UseRouting(); mainApp.UseAuthorization(); mainApp.MapControllers();配置独立的指标Host:
var metricsBuilder = WebApplication.CreateBuilder(args); metricsBuilder.WebHost.ConfigureKestrel(options => options.ListenAnyIP(4000)); // 配置OpenTelemetry,确保和主应用共享指标源 metricsBuilder.Services.AddOpenTelemetry() .WithMetrics(builder => { builder.AddPrometheusExporter(); builder.AddAspNetCoreInstrumentation(); // 采集ASP.NET Core指标 // 添加其他需要的指标采集器 }); var metricsApp = metricsBuilder.Build(); metricsApp.UseOpenTelemetryPrometheusScrapingEndpoint();同时启动两个Host:
await Task.WhenAll( mainApp.RunAsync(), metricsApp.RunAsync() );
这种方式的优势是指标服务和主应用完全隔离,即使主应用出现异常,指标端点仍可能正常对外提供监控数据。
关于你原有配置的说明
你之前尝试的UseOpenTelemetryPrometheusScrapingEndpoint(context => context.Connection.LocalPort == 4000)不生效,核心原因是主应用的Kestrel未监听4000端口,导致该筛选条件永远无法匹配。必须先配置Kestrel监听目标端口,再配合端口筛选才能生效。
内容的提问来源于stack exchange,提问作者Lucas Dalmarco
相关产品推荐
相关产品推荐

