You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus无法抓取.NET 9 Web应用指标的问题求助

.NET 9 Web应用与Prometheus集成后指标无法正常同步的问题

我按照微软官方指南将Prometheus与.NET 9 Web应用集成,但指标数据无法正常同步到Prometheus中。已补充指南缺失的关键配置(如app.UseOpenTelemetryPrometheusScrapingEndpoint();),当前访问应用的/metrics端点可正常查看指标,控制台也能显示追踪数据,但Prometheus仅返回少量无效指标,未达到预期数量。

Prometheus Docker配置

global:
  scrape_interval:     60s # 默认每15秒抓取一次目标

  # 与外部系统通信时,将这些标签附加到任何时间序列或警报(联邦、远程存储、Alertmanager)
  external_labels:
    monitor: 'rackemapp-monitor'

scrape_configs:
  # 作业名将作为标签`job=<job_name>`添加到从此配置抓取的任何时间序列中
  - job_name: 'rackemapp-web'
    scheme: https
    scrape_interval: 5s
    tls_config:
      insecure_skip_verify: true
    static_configs:
      - targets: ['localhost:44368']

.NET 9应用Startup.cs配置

// 应用自定义指标
var homeMeter = new Meter("RackEmAppWeb.HomePageCounter", "1.0.0");
var countHomePageVisits = homeMeter.CreateCounter<int>("homepage.count", description: "统计首页访问次数");

// 应用自定义ActivitySource
var homeActivitySource = new ActivitySource("RackEmAppWeb.HomePageCounter");

var tracingOtlpEndpoint = "http://localhost:4317";
var otel = services.AddOpenTelemetry();

// 配置OpenTelemetry资源,设置应用名称
otel.ConfigureResource(resource => resource
    .AddService(serviceName: "Web Platform"));

// 添加ASP.NET Core指标和自定义指标,并导出到Prometheus
otel.WithMetrics(metrics => metrics
    // OpenTelemetry提供的指标
    .AddAspNetCoreInstrumentation()
    .AddMeter(homeMeter.Name)
    // .NET 8中ASP.NET Core提供的指标
    .AddMeter("Microsoft.AspNetCore.Hosting")
    .AddMeter("Microsoft.AspNetCore.Server.Kestrel")
    // System.Net库提供的指标
    .AddMeter("System.Net.Http")
    .AddMeter("System.Net.NameResolution")
    .AddSqlClientInstrumentation()
    .AddConsoleExporter()
    .AddPrometheusExporter());

countHomePageVisits.Add(1);

// 添加ASP.NET Core追踪和自定义ActivitySource,并导出到Jaeger
otel.WithTracing(tracing =>
{
    tracing.AddAspNetCoreInstrumentation();
    tracing.AddHttpClientInstrumentation();
    tracing.AddSource(homeActivitySource.Name);
    tracing.AddSqlClientInstrumentation();
    if (tracingOtlpEndpoint != null)
    {
        tracing.AddOtlpExporter(otlpOptions =>
        {
            otlpOptions.Endpoint = new Uri(tracingOtlpEndpoint);
        });
    }
    else
    {
        tracing.AddConsoleExporter();
    }
});

排查方向

  • Docker网络映射问题:容器内的localhost指向容器自身,而非宿主机。将targets改为宿主机IP(如host.docker.internal:44368,适用于Windows/macOS),或启动Prometheus容器时添加--network host参数使用宿主机网络。
  • HTTPS连接异常:即便开启了insecure_skip_verify,仍可能存在SSL握手问题。临时将应用切换为HTTP,修改Prometheus配置的scheme: http并对应调整端口,测试是否能正常抓取。
  • 指标未触发:部分ASP.NET Core指标(如请求计数)需要实际请求触发,确保已访问过应用接口生成指标数据。
  • 查看Prometheus日志:执行docker logs <prometheus容器ID>,检查是否存在抓取目标的错误(如连接超时、证书错误)。
  • 中间件顺序验证:确认app.UseOpenTelemetryPrometheusScrapingEndpoint()放在app.UseRouting()之后、app.UseEndpoints()之前,保证端点可被正常访问。

内容的提问来源于stack exchange,提问作者Matthew Warr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:28:12