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

OTel疑问:ASP.NET Core部署IIS后kestrel_queued_connections未导出

部署IIS后Kestrel指标消失的原因及解决办法

核心根源:IIS反向代理的运行模式

ASP.NET Core部署到IIS时,默认是IIS做反向代理——用户请求先到IIS,再转发给内部的Kestrel服务器。这时候Kestrel不直接对外监听端口,只监听本地回环地址,它的连接计数器(包括你需要的kestrel_queued_connections)统计的是IIS和Kestrel之间的内部连接,而非用户到IIS的真实连接。

常见具体原因

  • 指标触发条件未满足:IIS和Kestrel之间的内部连接都是短连接,流量小的时候Kestrel的指标数值可能始终为0,被采集器过滤掉,导致/metrics页面看不到。
  • 托管模式选错:如果用了IIS集成模式(InProcess),Kestrel根本没独立运行,是IIS直接处理请求,Kestrel的核心组件没初始化,自然出不来计数器。
  • 部署时配置遗漏:上线时可能没在Program.cs里明确启用Kestrel指标,或者IIS应用池权限不够,读不到Kestrel的性能计数器。

解决方法

  1. 确认托管模式:检查web.config里的<aspNetCore>节点,确保hostingModel是OutOfProcess(进程外模式,ASP.NET Core默认)。
  2. 强制开启Kestrel指标采集:在Program.cs里显式配置,保证采集器能捕获内部连接:
    builder.Services.AddMetrics()
        .AddKestrelMetrics();
    
    同时确保app.UseMetricsEndpoint()的调用顺序正确,在中间件链的合适位置。
  3. 改用IIS自身计数器:如果要统计用户端的连接队列,直接用IIS自带的Web Service性能计数器,比如Current Connections、Connection Attempts/sec,这些更能反映真实的外部请求情况。
  4. 调整应用池权限:给IIS应用池身份(比如ApplicationPoolIdentity)添加读取性能计数器的权限,可通过本地安全策略配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:22:49