ASP.NET 核心内置指标

本文介绍使用 System.Diagnostics.Metrics API 生成的 ASP.NET Core 的内置指标。 有关基于较旧 EventCounters API 的指标列表,请参阅 “可用计数器”。

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

Microsoft.AspNetCore.Components

指标 Microsoft.AspNetCore.Components 报告有关 Razor 组件路由更改和浏览器事件的信息:

指标:aspnetcore.components.navigation

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.navigation 计数器 {route} 跟踪应用中的路由更改总数。
特征 类型 说明 例子 状态
aspnetcore.components.type 字符串 导航到的组件。 TestComponent 始终
aspnetcore.components.route 字符串 组件的路由。 /test-route 始终

指标:aspnetcore.components.event_handler

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.event_handler 直方图 s 度量处理浏览器事件的持续时间,包括业务逻辑。
特征 类型 说明 例子 状态
aspnetcore.components.type 字符串 处理事件的组件类型。 TestComponent 始终
aspnetcore.components.method 字符串 处理事件的 C# 方法。 OnClick 始终
aspnetcore.components.attribute.name 字符串 处理事件的组件属性名称。 onclick 始终
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果引发异常。

Microsoft.AspNetCore.Components.Lifecycle

指标 Microsoft.AspNetCore.Components.Lifecycle 报告有关 Razor 组件生命周期事件的信息:

指标:aspnetcore.components.update_parameters

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.update_parameters 直方图 s 度量处理组件参数(包括业务逻辑)的持续时间。
特征 类型 说明 例子 状态
aspnetcore.components.type 字符串 处理事件的组件类型。 TestComponent 始终
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果引发异常。

指标:aspnetcore.components.render_diff

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.render_diff 直方图 s 跟踪呈现批处理的持续时间。
特征 类型 说明 例子 状态
aspnetcore.components.diff.length 整数 (int) 呈现差异的长度。 50 始终
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果引发异常。

Microsoft.AspNetCore.Components.Server.Circuits

指标Microsoft.AspNetCore.Components.Server.Circuits报告服务器端Blazor线路的信息Blazor ServerBlazor Web App,

指标:aspnetcore.components.circuit.active

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.circuit.active UpDownCounter {circuit} 显示当前内存中的活动线路数。

指标:aspnetcore.components.circuit.connected

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.circuit.connected UpDownCounter {circuit} 跟踪连接到客户端的线路数。

指标:aspnetcore.components.circuit.duration

名字 检测类型 单位(UCUM) 说明
aspnetcore.components.circuit.duration 直方图 s 测量线路生存期持续时间并提供总线路计数。

Microsoft.AspNetCore.Hosting

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

指标:http.server.request.duration

名字 检测类型 单位(UCUM) 说明
http.server.request.duration 直方图 s 测量入站 HTTP 请求的持续时间。
特征 类型 说明 例子 状态
http.route 字符串 匹配的路由。 {controller}/{action}/
{id?}
如果可用。
error.type 字符串 描述操作结束的错误类。 timeout;name_resolution_error;500 如果请求已以错误结束。
http.request.method 字符串 HTTP 请求方法。 GET;POST;HEAD 始终
http.response.status_code 整数 (int) HTTP 响应状态代码 200 如果发送了一个。
network.protocol.version 字符串 中指定的 network.protocol.name协议的版本。 3.1.1 始终
url.scheme 字符串 标识已用协议的 URI 方案 组件。 http;https 始终
aspnetcore.request.is_unhandled 布尔值 如果应用程序管道未处理请求,则为 True。 true 如果请求未处理。

在 ASP.NET Core 的托管层测量的入站 HTTP 请求所用的时间。 基础 Web 主机具有以下功能后开始时间度量:

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

时间结束时间:

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

使用 OpenTelemetry 时,此指标的默认存储桶设置为 [ 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 ]。

指标:http.server.active_requests

名字 检测类型 单位(UCUM) 说明
http.server.active_requests UpDownCounter {request} 度量当前正在进行的并发 HTTP 请求数。
特征 类型 说明 例子 状态
http.request.method 字符串 HTTP 请求方法。 [1] GET;POST;HEAD 始终
url.scheme 字符串 标识已用协议的 URI 方案 组件。 http;https 始终

Microsoft.AspNetCore.Routing

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

指标:aspnetcore.routing.match_attempts

名字 检测类型 单位(UCUM) 说明
aspnetcore.routing.match_attempts 计数器 {match_attempt} 尝试与终结点匹配的请求数。
特征 类型 说明 例子 状态
aspnetcore.routing.match_status 字符串 匹配结果 success;failure 始终
aspnetcore.routing.is_fallback_route 布尔型 一个值,该值指示匹配的路由是否为回退路由。 True 如果已成功匹配路由。
http.route 字符串 匹配的路由 {controller}/{action}/
{id?}
如果已成功匹配路由。

Microsoft.AspNetCore.Diagnostics

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

指标:aspnetcore.diagnostics.exceptions

名字 检测类型 单位(UCUM) 说明
aspnetcore.diagnostics.exceptions 计数器 {exception} 异常处理中间件捕获的异常数。
特征 类型 说明 例子 状态
aspnetcore.diagnostics.exception.result 字符串 ASP.NET 核心异常中间件处理结果 handled;unhandled 始终
aspnetcore.diagnostics.handler.type 字符串 处理异常的实现的 IExceptionHandler 全类型名称。 Contoso.MyHandler 如果此处理程序处理了异常。
exception.type 字符串 异常类型的全名。 System.OperationCanceledException;Contoso.MyException 始终

Microsoft.AspNetCore.RateLimiting

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

指标:aspnetcore.rate_limiting.active_request_leases

名字 检测类型 单位(UCUM) 说明
aspnetcore.rate_limiting.active_request_leases UpDownCounter {request} 当前在保留速率限制租约的服务器上处于活动状态的请求数。
特征 类型 说明 例子 状态
aspnetcore.rate_limiting.policy 字符串 速率限制策略名称。 fixed;sliding;token 如果请求的匹配终结点具有速率限制策略。

指标:aspnetcore.rate_limiting.request_lease.duration

名字 检测类型 单位(UCUM) 说明
aspnetcore.rate_limiting.request_lease.duration 直方图 s 服务器上请求保留的速率限制租约的持续时间。
特征 类型 说明 例子 状态
aspnetcore.rate_limiting.policy 字符串 速率限制策略名称。 fixed;sliding;token 如果请求的匹配终结点具有速率限制策略。

指标:aspnetcore.rate_limiting.queued_requests

名字 检测类型 单位(UCUM) 说明
aspnetcore.rate_limiting.queued_requests UpDownCounter {request} 当前排队等待获取速率限制租约的请求数。
特征 类型 说明 例子 状态
aspnetcore.rate_limiting.policy 字符串 速率限制策略名称。 fixed;sliding;token 如果请求的匹配终结点具有速率限制策略。

指标:aspnetcore.rate_limiting.request.time_in_queue

名字 检测类型 单位(UCUM) 说明
aspnetcore.rate_limiting.request.time_in_queue 直方图 s 请求在等待获取速率限制租约的队列中花费的时间。
特征 类型 说明 例子 状态
aspnetcore.rate_limiting.policy 字符串 速率限制策略名称。 fixed;sliding;token 如果请求的匹配终结点具有速率限制策略。
aspnetcore.rate_limiting.result 字符串 速率限制结果显示是获取租约还是包含拒绝原因。 acquired;request_canceled 始终

指标:aspnetcore.rate_limiting.requests

名字 检测类型 单位(UCUM) 说明
aspnetcore.rate_limiting.requests 计数器 {request} 尝试获取速率限制租约的请求数。
特征 类型 说明 例子 状态
aspnetcore.rate_limiting.policy 字符串 速率限制策略名称。 fixed;sliding;token 如果请求的匹配终结点具有速率限制策略。
aspnetcore.rate_limiting.result 字符串 速率限制结果显示是获取租约还是包含拒绝原因。 acquired;request_canceled 始终

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 字符串 标头名称。 Content-Type 始终
error.type 字符串 错误消息。 Unable to parse media type value. 始终

指标:aspnetcore.header_parsing.cache_accesses

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

名字 检测类型 单位(UCUM) 说明
aspnetcore.header_parsing.cache_accesses 计数器 {cache_access} 访问存储已分析标头值的缓存的次数。
特征 类型 说明 例子 状态
aspnetcore.header_parsing.header.name 字符串 标头名称。 Content-Type 始终
aspnetcore.header_parsing.cache_access.type 字符串 一个值,该值指示是否在缓存中找到标头的值。 Hit;Miss 始终

Microsoft.AspNetCore.Server.Kestrel

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

指标:kestrel.active_connections

名字 检测类型 单位(UCUM) 说明
kestrel.active_connections UpDownCounter {connection} 服务器上当前处于活动状态的连接数。
特征 类型 说明 例子 状态
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

指标:kestrel.connection.duration

名字 检测类型 单位(UCUM) 说明
kestrel.connection.duration 直方图 s 服务器上的连接持续时间。
特征 类型 说明 例子 状态
error.type 字符串 描述连接结束的错误类型,或连接管道期间引发的未经处理的异常类型。 可以在 Web 服务器指标的语义约定Kestrel中找到已知的连接错误。 connection_reset;invalid_request_headers;System.OperationCanceledException 如果连接以已知错误结束或引发异常。
network.protocol.name 字符串 OSI 应用程序层或非 OSI 等效层 http;web_sockets 始终
network.protocol.version 字符串 中指定的 network.protocol.name协议的版本。 1.1;2 始终
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp
tls.protocol.version 字符串 TLS 协议版本。 1.2;1.3 如果连接使用 TLS 进行保护。

由于此指标正在跟踪连接持续时间,理想情况下,http 连接用于多个请求,因此存储桶应比用于请求持续时间的存储桶长。 例如,使用 [ 0.01、0.02、0.05、0.1、0.2、0.5、1、2、5、10、30、60、120、300] 提供 5 分钟大桶。

当连接以已知错误结尾时,属性值 error.type 将设置为已知错误类型。 可以在 Web 服务器指标的语义约定Kestrel中找到已知的连接错误。

指标:kestrel.rejected_connections

名字 检测类型 单位(UCUM) 说明
kestrel.rejected_connections 计数器 {connection} 服务器拒绝的连接数。
特征 类型 说明 例子 状态
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

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

指标:kestrel.queued_connections

名字 检测类型 单位(UCUM) 说明
kestrel.queued_connections UpDownCounter {connection} 当前已排队且正在等待启动的连接数。
特征 类型 说明 例子 状态
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

指标:kestrel.queued_requests

名字 检测类型 单位(UCUM) 说明
kestrel.queued_requests UpDownCounter {request} 多路复用连接(HTTP/2 和 HTTP/3)上的 HTTP 请求数,这些请求当前已排队并正在等待启动。
特征 类型 说明 例子 状态
network.protocol.name 字符串 OSI 应用程序层或非 OSI 等效层 http;web_sockets 始终
network.protocol.version 字符串 中指定的 network.protocol.name协议的版本。 1.1;2 始终
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

指标:kestrel.upgraded_connections

名字 检测类型 单位(UCUM) 说明
kestrel.upgraded_connections UpDownCounter {connection} 当前升级的连接数(WebSocket)。
特征 类型 说明 例子 状态
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

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

指标:kestrel.tls_handshake.duration

名字 检测类型 单位(UCUM) 说明
kestrel.tls_handshake.duration 直方图 s 服务器上的 TLS 握手持续时间。
特征 类型 说明 例子 状态
error.type 字符串 异常类型的全名。 System.OperationCanceledException;Contoso.MyException 如果引发了异常。
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp
tls.protocol.version 字符串 TLS 协议版本。 1.2;1.3 如果连接使用 TLS 进行保护。

使用 OpenTelemetry 时,此 metic 的默认存储桶设置为 [ 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 ]。

指标:kestrel.active_tls_handshakes

名字 检测类型 单位(UCUM) 说明
kestrel.active_tls_handshakes UpDownCounter {handshake} 服务器上当前正在进行的 TLS 握手数。
特征 类型 说明 例子 状态
network.transport 字符串 OSI 传输层进程间通信方法 tcp;unix 始终
network.type 字符串 OSI 网络层 或非 OSI 等效项。 ipv4;ipv6 如果传输为 tcpudp
server.address 字符串 如果没有反向 DNS 查找,则服务器地址域名可用;否则为 IP 地址或 Unix 域套接字名称。 example.com 始终
server.port 整数 (int) 服务器端口号 80;8080;443 如果传输为 tcpudp

Microsoft.AspNetCore.Http.Connections

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

指标:signalr.server.connection.duration

名字 检测类型 单位(UCUM) 说明
signalr.server.connection.duration 直方图 s 服务器上的连接持续时间。
特征 类型 说明 例子 状态
signalr.connection.status 字符串 SignalR HTTP 连接关闭状态。 app_shutdown;timeout 始终
signalr.transport 字符串 SignalR 传输类型 web_sockets;long_polling 始终
价值 说明
normal_closure 连接正常关闭。
timeout 由于超时,连接已关闭。
app_shutdown 连接已关闭,因为应用正在关闭。

signalr.transport 是以下项之一:

价值 说明
server_sent_events 服务器发送的事件
long_polling 长轮询
web_sockets WebSocket

由于此指标跟踪连接持续时间,理想情况下 SignalR 连接是持久的,因此存储桶应比请求持续时间使用的持续时间长。 例如,使用 [0, 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300] 提供 5 分钟的高桶。

指标:signalr.server.active_connections

名字 检测类型 单位(UCUM) 说明
signalr.server.active_connections UpDownCounter {connection} 服务器上当前处于活动状态的连接数。
特征 类型 说明 例子 状态
signalr.connection.status 字符串 SignalR HTTP 连接关闭状态。 app_shutdown;timeout 始终
signalr.transport 字符串 SignalR 传输类型 web_sockets;long_polling 始终

Microsoft.AspNetCore.Authorization

指标 Microsoft.AspNetCore.Authorization 报告有关 ASP.NET Core 应用中 授权尝试 的信息:

指标:aspnetcore.authorization.attempts

名字 检测类型 单位(UCUM) 说明
aspnetcore.authorization.attempts 计数器 {request} 尝试授权的请求总数。
特征 类型 说明 例子 状态
user.is_authenticated 布尔型 请求是否来自经过身份验证的用户 true Required
aspnetcore.authorization.policy 字符串 授权策略的名称。 AtLeast21;EmployeeOnly Conditionally required 如果使用授权策略。
aspnetcore.authorization.result 字符串 授权是成功还是失败。 success;failure Conditionally Required 如果在授权期间未引发异常,则为 。
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果请求已以错误结束,则为

Microsoft.AspNetCore.Authentication

指标 Microsoft.AspNetCore.Authentication 报告有关 ASP.NET Core 应用中 的身份验证 的信息:

指标:aspnetcore.authentication.authenticate.duration

名字 检测类型 单位(UCUM) 说明
aspnetcore.authentication.authenticate.duration 直方图 s 请求的身份验证持续时间。
特征 类型 说明 例子 状态
aspnetcore.authentication.result 字符串 身份验证结果。 success;failure;none;_OTHER 如果请求未以错误结尾,则为
aspnetcore.authentication.scheme 字符串 身份验证方案的名称。 Bearer;Cookies 如果请求未以错误结尾,则为
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException Conditionally Required 如果身份验证失败或请求,则为 已以错误结束。

指标:aspnetcore.authentication.challenges

名字 检测类型 单位(UCUM) 说明
aspnetcore.authentication.challenges 计数器 {request} 对方案提出质询的总次数。
特征 类型 说明 例子 状态
aspnetcore.authentication.scheme 字符串 身份验证方案的名称。 Bearer;Cookies 如果请求未以错误结尾,则为
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果请求已以错误结束,则为

指标:aspnetcore.authentication.forbids

名字 检测类型 单位(UCUM) 说明
aspnetcore.authentication.forbids 计数器 {request} 经过身份验证的用户尝试访问其不允许访问的资源的总次数。
特征 类型 说明 例子 状态
aspnetcore.authentication.scheme 字符串 身份验证方案的名称。 Bearer;Cookies 如果请求未以错误结尾,则为
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果请求已以错误结束,则为

指标:aspnetcore.authentication.sign_ins

名字 检测类型 单位(UCUM) 说明
aspnetcore.authentication.sign_ins 计数器 {request} 主体使用方案登录的总次数。
特征 类型 说明 例子 状态
aspnetcore.authentication.scheme 字符串 身份验证方案的名称。 Bearer;Cookies 如果请求未以错误结尾,则为
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果请求已以错误结束,则为

指标:aspnetcore.authentication.sign_outs

名字 检测类型 单位(UCUM) 说明
aspnetcore.authentication.sign_outs 计数器 {request} 主体使用方案注销的总次数。
特征 类型 说明 例子 状态
aspnetcore.authentication.scheme 字符串 身份验证方案的名称。 Bearer;Cookies 如果请求未以错误结尾,则为
error.type 字符串 异常类型的全名。 System.InvalidOperationException;Contoso.MyException 如果请求已以错误结束,则为