ASP.NET Core 指标

本文介绍使用 System.Diagnostics.Metrics API 生成的 ASP.NET Core 的内置指标。 有关基于旧版 EventCounters API 的指标列表,请参阅此处

提示

有关如何收集、报告、扩充和测试 ASP.NET Core 指标的详细信息,请参阅使用 ASP.NET Core 指标

Microsoft.AspNetCore.Hosting

指标 Microsoft.AspNetCore.Hosting 报告有关 ASP.NET Core 收到的 HTTP 请求的高级信息:

指标:http.server.request.duration
名称 检测类型 单位 (UCUM) 说明
http.server.request.duration 直方图 s 测量入站 HTTP 请求的持续时间。
属性 类型 说明 示例 状态
http.route string 匹配的路由。 {controller}/{action}/{id?} 如果可用。
error.type string 描述操作结束时出现的一类错误。 .- . 如果请求已结束但出现错误。
http.request.method string HTTP 请求方法。 .- . 始终
http.response.status_code int HTTP 响应状态代码 200 如果发送了一个。
network.protocol.version string network.protocol.name 中指定的协议的版本。 3.1.1 Always
url.scheme string 标识所用协议的 URI 架构组件。 %> Always
aspnetcore.request.is_unhandled 布尔 如果应用程序管道未处理请求,则为 True。 true 如果未处理请求。

在 ASP.NET Core 托管层测量的处理入站 HTTP 请求所用的时间。 只要底层虚拟主机满足以下条件,时间测量就会开始:

  • 已充分分析入站网络流上用于识别新请求的 HTTP 请求头。
  • 已初始化上下文数据结构,如 HttpContext

时间结束条件:

  • ASP.NET Core 处理程序管道已完成执行。
  • 已发送所有响应数据。
  • 正在处理请求的上下文数据结构。

使用 OpenTelemetry 时,此指标的默认 Bucket 设置为 [0.005、0.01、0.025、0.05、0.075、0.1、0.25、0.5、0.75、1、2.5、5、7.5、10]。

从 .NET 8.0 开始可用。

指标:http.server.active_requests
名称 检测类型 单位 (UCUM) 说明
http.server.active_requests UpDownCounter {request} 计算当前正在进行的并发 HTTP 请求数。
属性 类型 说明 示例 状态
http.request.method string HTTP 请求方法。 [1] .- . 始终
url.scheme string 标识所用协议的 URI 架构组件。 %> Always

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.Routing

指标 Microsoft.AspNetCore.Routing 报告有关将 HTTP 请求路由到 ASP.NET Core 终结点的信息:

指标:aspnetcore.routing.match_attempts
名称 检测类型 单位 (UCUM) 说明
aspnetcore.routing.match_attempts 计数器 {match_attempt} 尝试与终结点匹配的请求数。
属性 类型 说明 示例 状态
aspnetcore.routing.match_status string 匹配结果 %> Always
aspnetcore.routing.is_fallback_route boolean 一个值,指示匹配的路由是否为回退路由。 True 如果已成功匹配路由。
http.route string 匹配的路由 {controller}/{action}/{id?} 如果已成功匹配路由。

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.Diagnostics

指标 Microsoft.AspNetCore.Diagnostics 报告来自 ASP.NET Core 错误处理中间件的诊断信息:

指标:aspnetcore.diagnostics.exceptions
名称 检测类型 单位 (UCUM) 说明
aspnetcore.diagnostics.exceptions 计数器 {exception} 异常处理中间件捕获的异常数。
Attribute 类型 说明 示例 状态
aspnetcore.diagnostics.exception.result string ASP.NET Core 异常中间件处理结果 %> 始终
aspnetcore.diagnostics.handler.type string 处理异常的 IExceptionHandler 实现的完整类型名称。 Contoso.MyHandler 如果异常由此处理程序处理。
exception.type string 异常类型的全名。 %> Always

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.RateLimiting

指标 Microsoft.AspNetCore.RateLimiting 报告来自 ASP.NET Core 速率限制中间件的速率限制信息:

指标:aspnetcore.rate_limiting.active_request_leases
名称 检测类型 单位 (UCUM) 说明
aspnetcore.rate_limiting.active_request_leases UpDownCounter {request} 当前在保留速率限制租约的服务器上处于活动状态的请求数。
属性 类型 说明 示例 状态
aspnetcore.rate_limiting.policy string 速率限制策略名称。 .- . 如果请求的匹配终结点具有速率限制策略。

从 .NET 8.0 开始可用。

指标:aspnetcore.rate_limiting.request_lease.duration
名称 检测类型 单位 (UCUM) 说明
aspnetcore.rate_limiting.request_lease.duration 直方图 s 服务器上请求保留的速率限制租约的持续时间。
属性 类型 说明 示例 状态
aspnetcore.rate_limiting.policy string 速率限制策略名称。 .- . 如果请求的匹配终结点具有速率限制策略。

从 .NET 8.0 开始可用。

指标:aspnetcore.rate_limiting.queued_requests
名称 检测类型 单位 (UCUM) 说明
aspnetcore.rate_limiting.queued_requests UpDownCounter {request} 当前排队等待获取速率限制租约的请求数。
Attribute 类型 说明 示例 状态
aspnetcore.rate_limiting.policy string 速率限制策略名称。 .- . 如果请求的匹配终结点具有速率限制策略。

从 .NET 8.0 开始可用。

指标:aspnetcore.rate_limiting.request.time_in_queue
名称 检测类型 单位 (UCUM) 说明
aspnetcore.rate_limiting.request.time_in_queue 直方图 s 请求在等待获取速率限制租约的队列中花费的时间。
Attribute 类型 说明 示例 状态
aspnetcore.rate_limiting.policy string 速率限制策略名称。 .- . 如果请求的匹配终结点具有速率限制策略。
aspnetcore.rate_limiting.result string 速率限制结果显示是获取租约还是包含拒绝原因。 %> Always

从 .NET 8.0 开始可用。

指标:aspnetcore.rate_limiting.requests
名称 检测类型 单位 (UCUM) 说明
aspnetcore.rate_limiting.requests 计数器 {request} 尝试获取速率限制租约的请求数。
属性 类型 说明 示例 状态
aspnetcore.rate_limiting.policy string 速率限制策略名称。 .- . 如果请求的匹配终结点具有速率限制策略。
aspnetcore.rate_limiting.result string 速率限制结果显示是获取租约还是包含拒绝原因。 %> Always

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.HeaderParsing

指标 Microsoft.AspNetCore.HeaderParsing 报告有关 ASP.NET Core 标头分析的信息:

指标:aspnetcore.header_parsing.parse_errors
名称 检测类型 单位 (UCUM) 说明
aspnetcore.header_parsing.parse_errors 计数器 {parse_error} 分析 HTTP 请求头时发生的错误数。
属性 类型 说明 示例 状态
aspnetcore.header_parsing.header.name string 标头名称。 Content-Type 始终
error.type string 错误消息。 Unable to parse media type value. 始终

从 .NET 8.0 开始可用。

指标:aspnetcore.header_parsing.cache_accesses

该指标仅针对支持缓存的 HTTP 请求头分析程序发出。

名称 检测类型 单位 (UCUM) 说明
aspnetcore.header_parsing.cache_accesses 计数器 {cache_access} 访问某个存储已分析标头值的缓存的次数。
属性 类型 说明 示例 状态
aspnetcore.header_parsing.header.name string 标头名称。 Content-Type 始终
aspnetcore.header_parsing.cache_access.type string 一个值,指示是否已在缓存中找到标头的值。 %> Always

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.Server.Kestrel

指标 Microsoft.AspNetCore.Server.Kestrel 报告来自 ASP.NET Core Kestrel Web 服务器的 HTTP 连接信息:

指标:kestrel.active_connections
名称 检测类型 单位 (UCUM) 说明
kestrel.active_connections UpDownCounter {connection} 服务器上当前处于活动状态的连接数。
Attribute 类型 说明 示例 状态
network.transport string OSI 传输层进程内通信方法 %> 始终
network.type string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

从 .NET 8.0 开始可用。

指标:kestrel.connection.duration
名称 检测类型 单位 (UCUM) 说明
kestrel.connection.duration 直方图 s 服务器上的连接持续时间。
属性 类型 说明 示例 状态
error.type string 异常类型的全名。 %> 如果引发了异常。
network.protocol.name string OSI 应用程序层或非 OSI 等效项。 %> 始终
network.protocol.version string network.protocol.name 中指定的协议的版本。 %> 始终
network.transport string OSI 传输层进程内通信方法 %> 始终
network.type string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp
tls.protocol.version string TLS 协议版本。 %> 如果连接使用 TLS 进行保护。

由于此指标用于跟踪连接持续时间,并且理想情况下 http 连接会用于多个请求,因此相应 Bucket 应该比用于请求持续时间的 Bucket 更长。 例如,使用 [0.01、0.02、0.05、0.1、0.2、0.5、1、2、5、10、30、60、120、300] 可提供 5 分钟的 Bucket 上限。

从 .NET 8.0 开始可用。

指标:kestrel.rejected_connections
名称 检测类型 单位 (UCUM) 说明
kestrel.rejected_connections 计数器 {connection} 服务器拒绝的连接数。
属性 类型 说明 示例 状态
network.transport string OSI 传输层进程内通信方法 %> 始终
network.type string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

当当前活动计数超过使用 MaxConcurrentConnections 配置的值时,连接将被拒绝。

从 .NET 8.0 开始可用。

指标:kestrel.queued_connections
名称 检测类型 单位 (UCUM) 说明
kestrel.queued_connections UpDownCounter {connection} 当前已排队且正在等待启动的连接数。
属性 类型 说明 示例 状态
network.transport string OSI 传输层进程内通信方法 %> 始终
network.transport string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

从 .NET 8.0 开始可用。

指标:kestrel.queued_requests
名称 检测类型 单位 (UCUM) 说明
kestrel.queued_requests UpDownCounter {request} 当前已排队并正在等待启动的多路复用连接(HTTP/2 和 HTTP/3)上的 HTTP 请求数。
属性 类型 说明 示例 状态
network.protocol.name string OSI 应用程序层或非 OSI 等效项。 %> 始终
network.protocol.version string network.protocol.name 中指定的协议的版本。 %> 始终
network.transport string OSI 传输层进程内通信方法 %> 始终
network.transport string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

从 .NET 8.0 开始可用。

指标:kestrel.upgraded_connections
名称 检测类型 单位 (UCUM) 说明
kestrel.upgraded_connections UpDownCounter {connection} 当前升级的连接数 (WebSockets)。
属性 类型 说明 示例 状态
network.transport string OSI 传输层进程内通信方法 %> 始终
network.transport string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

计数器仅跟踪 HTTP/1.1 连接。

从 .NET 8.0 开始可用。

指标:kestrel.tls_handshake.duration
名称 检测类型 单位 (UCUM) 说明
kestrel.tls_handshake.duration 直方图 s 服务器上的 TLS 握手持续时间。
属性 类型 说明 示例 状态
error.type string 异常类型的全名。 %> 如果引发了异常。
network.transport string OSI 传输层进程内通信方法 %> 始终
network.transport string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp
tls.protocol.version string TLS 协议版本。 %> 如果连接使用 TLS 进行保护。

使用 OpenTelemetry 时,此指标的默认 Bucket 设置为 [0.005、0.01、0.025、0.05、0.075、0.1、0.25、0.5、0.75、1、2.5、5、7.5、10]。

从 .NET 8.0 开始可用。

指标:kestrel.active_tls_handshakes
名称 检测类型 单位 (UCUM) 说明
kestrel.active_tls_handshakes UpDownCounter {handshake} 服务器上当前正在进行的 TLS 握手的数量。
属性 类型 说明 示例 状态
network.transport string OSI 传输层进程内通信方法 %> 始终
network.transport string OSI 网络层或非 OSI 等效项。 %> 如果传输为 tcpudp
server.address string 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port int 服务器端口号 .- . 如果传输为 tcpudp

从 .NET 8.0 开始可用。

Microsoft.AspNetCore.Http.Connections

指标 Microsoft.AspNetCore.Http.Connections 报告来自 ASP.NET Core SignalR 的连接信息:

指标:signalr.server.connection.duration
名称 检测类型 单位 (UCUM) 说明
signalr.server.connection.duration 直方图 s 服务器上的连接持续时间。
属性 类型 说明 示例 状态
signalr.connection.status string SignalR HTTP 连接关闭状态。 %> 始终
signalr.transport string SignalR 传输类型 %> Always

从 .NET 8.0 开始可用。

说明
normal_closure 已正常关闭连接。
timeout 由于超时,已关闭连接。
app_shutdown 由于应用正在关闭,因此已关闭连接。

signalr.transport 是下列值之一:

协议
server_sent_events server-sent 事件
long_polling 长轮询
web_sockets WebSocket

由于此指标用于跟踪连接持续时间,并且理想情况下 SignalR 连接是持久的,因此相应 Bucket 应该比用于请求持续时间的 Bucket 更长。 例如,使用 [0、0.01、0.02、0.05、0.1、0.2、0.5、1、2、5、10、30、60、120、300] 可提供 5 分钟的 Bucket 上限。

从 .NET 8.0 开始可用。

指标:signalr.server.active_connections
名称 检测类型 单位 (UCUM) 说明
signalr.server.active_connections UpDownCounter {connection} 服务器上当前处于活动状态的连接数。
Attribute 类型 说明 示例 状态
signalr.connection.status string SignalR HTTP 连接关闭状态。 %> 始终
signalr.transport string SignalR 传输类型 %> Always

从 .NET 8.0 开始可用。