ASP.NET Core 指标
本文介绍使用 System.Diagnostics.Metrics API 生成的 ASP.NET Core 的内置指标。 有关基于旧版 EventCounters API 的指标列表,请参阅此处。
Microsoft.AspNetCore.Hosting
指标 Microsoft.AspNetCore.Hosting
报告有关 ASP.NET Core 收到的 HTTP 请求的高级信息:
指标:http.server.request.duration
属性 |
类型 |
说明 |
示例 |
状态 |
http.route |
string |
匹配的路由。 |
{controller}/{action}/{id?} |
如果可用。 |
error.type |
string |
描述操作结束时出现的一类错误。 |
timeout ; name_resolution_error ; 500 |
如果请求已结束但出现错误。 |
http.request.method |
string |
HTTP 请求方法。 |
GET ; POST ; HEAD |
始终 |
http.response.status_code |
int |
HTTP 响应状态代码。 |
200 |
如果发送了一个。 |
network.protocol.version |
string |
network.protocol.name 中指定的协议的版本。 |
3.1.1 |
Always |
url.scheme |
string |
标识所用协议的 URI 架构组件。 |
http ; https |
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
属性 |
类型 |
说明 |
示例 |
状态 |
http.request.method |
string |
HTTP 请求方法。 [1] |
GET ; POST ; HEAD |
始终 |
url.scheme |
string |
标识所用协议的 URI 架构组件。 |
http ; https |
Always |
从 .NET 8.0 开始可用。
Microsoft.AspNetCore.Routing
指标 Microsoft.AspNetCore.Routing
报告有关将 HTTP 请求路由到 ASP.NET Core 终结点的信息:
指标:aspnetcore.routing.match_attempts
属性 |
类型 |
说明 |
示例 |
状态 |
aspnetcore.routing.match_status |
string |
匹配结果 |
success ; failure |
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
Attribute |
类型 |
说明 |
示例 |
状态 |
aspnetcore.diagnostics.exception.result |
string |
ASP.NET Core 异常中间件处理结果 |
handled ; unhandled |
始终 |
aspnetcore.diagnostics.handler.type |
string |
处理异常的 IExceptionHandler 实现的完整类型名称。 |
Contoso.MyHandler |
如果异常由此处理程序处理。 |
exception.type |
string |
异常类型的全名。 |
System.OperationCanceledException ; Contoso.MyException |
Always |
从 .NET 8.0 开始可用。
Microsoft.AspNetCore.RateLimiting
指标 Microsoft.AspNetCore.RateLimiting
报告来自 ASP.NET Core 速率限制中间件的速率限制信息:
指标:aspnetcore.rate_limiting.active_request_leases
属性 |
类型 |
说明 |
示例 |
状态 |
aspnetcore.rate_limiting.policy |
string |
速率限制策略名称。 |
fixed ; sliding ; token |
如果请求的匹配终结点具有速率限制策略。 |
从 .NET 8.0 开始可用。
指标:aspnetcore.rate_limiting.request_lease.duration
属性 |
类型 |
说明 |
示例 |
状态 |
aspnetcore.rate_limiting.policy |
string |
速率限制策略名称。 |
fixed ; sliding ; token |
如果请求的匹配终结点具有速率限制策略。 |
从 .NET 8.0 开始可用。
指标:aspnetcore.rate_limiting.queued_requests
Attribute |
类型 |
说明 |
示例 |
状态 |
aspnetcore.rate_limiting.policy |
string |
速率限制策略名称。 |
fixed ; sliding ; token |
如果请求的匹配终结点具有速率限制策略。 |
从 .NET 8.0 开始可用。
指标:aspnetcore.rate_limiting.request.time_in_queue
Attribute |
类型 |
说明 |
示例 |
状态 |
aspnetcore.rate_limiting.policy |
string |
速率限制策略名称。 |
fixed ; sliding ; token |
如果请求的匹配终结点具有速率限制策略。 |
aspnetcore.rate_limiting.result |
string |
速率限制结果显示是获取租约还是包含拒绝原因。 |
acquired ; request_canceled |
Always |
从 .NET 8.0 开始可用。
指标:aspnetcore.rate_limiting.requests
属性 |
类型 |
说明 |
示例 |
状态 |
aspnetcore.rate_limiting.policy |
string |
速率限制策略名称。 |
fixed ; sliding ; token |
如果请求的匹配终结点具有速率限制策略。 |
aspnetcore.rate_limiting.result |
string |
速率限制结果显示是获取租约还是包含拒绝原因。 |
acquired ; request_canceled |
Always |
从 .NET 8.0 开始可用。
指标 Microsoft.AspNetCore.HeaderParsing
报告有关 ASP.NET Core 标头分析的信息:
名称 |
检测类型 |
单位 (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 开始可用。
该指标仅针对支持缓存的 HTTP 请求头分析程序发出。
名称 |
检测类型 |
单位 (UCUM) |
说明 |
aspnetcore.header_parsing.cache_accesses |
计数器 |
{cache_access} |
访问某个存储已分析标头值的缓存的次数。 |
属性 |
类型 |
说明 |
示例 |
状态 |
aspnetcore.header_parsing.header.name |
string |
标头名称。 |
Content-Type |
始终 |
aspnetcore.header_parsing.cache_access.type |
string |
一个值,指示是否已在缓存中找到标头的值。 |
Hit ; Miss |
Always |
从 .NET 8.0 开始可用。
Microsoft.AspNetCore.Server.Kestrel
指标 Microsoft.AspNetCore.Server.Kestrel
报告来自 ASP.NET Core Kestrel Web 服务器的 HTTP 连接信息:
指标:kestrel.active_connections
Attribute |
类型 |
说明 |
示例 |
状态 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
从 .NET 8.0 开始可用。
指标:kestrel.connection.duration
属性 |
类型 |
说明 |
示例 |
状态 |
error.type |
string |
描述连接结束的错误类型,或连接管道期间引发的未经处理的异常类型。 可以在 Kestrel Web 服务器指标的语义约定中找到已知的连接错误。 |
connection_reset ; invalid_request_headers ; System.OperationCanceledException |
如果连接以已知错误结束或引发异常。 |
network.protocol.name |
string |
OSI 应用程序层或非 OSI 等效项。 |
http ; web_sockets |
始终 |
network.protocol.version |
string |
network.protocol.name 中指定的协议的版本。 |
1.1 ; 2 |
始终 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
tls.protocol.version |
string |
TLS 协议版本。 |
1.2 ; 1.3 |
如果连接使用 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 9 开始,当连接以已知错误结束时, error.type
属性值将设置为已知错误类型。 可以在 Kestrel Web 服务器指标的语义约定中找到已知的连接错误。
从 .NET 8 开始可用。
指标:kestrel.rejected_connections
属性 |
类型 |
说明 |
示例 |
状态 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
当当前活动计数超过使用 MaxConcurrentConnections
配置的值时,连接将被拒绝。
从 .NET 8.0 开始可用。
指标:kestrel.queued_connections
属性 |
类型 |
说明 |
示例 |
状态 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
从 .NET 8.0 开始可用。
指标:kestrel.queued_requests
名称 |
检测类型 |
单位 (UCUM) |
说明 |
kestrel.queued_requests |
UpDownCounter |
{request} |
当前已排队并正在等待启动的多路复用连接(HTTP/2 和 HTTP/3)上的 HTTP 请求数。 |
属性 |
类型 |
说明 |
示例 |
状态 |
network.protocol.name |
string |
OSI 应用程序层或非 OSI 等效项。 |
http ; web_sockets |
始终 |
network.protocol.version |
string |
network.protocol.name 中指定的协议的版本。 |
1.1 ; 2 |
始终 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
从 .NET 8.0 开始可用。
指标:kestrel.upgraded_connections
属性 |
类型 |
说明 |
示例 |
状态 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
计数器仅跟踪 HTTP/1.1 连接。
从 .NET 8.0 开始可用。
指标:kestrel.tls_handshake.duration
属性 |
类型 |
说明 |
示例 |
状态 |
error.type |
string |
异常类型的全名。 |
System.OperationCanceledException ; Contoso.MyException |
如果引发了异常。 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
tls.protocol.version |
string |
TLS 协议版本。 |
1.2 ; 1.3 |
如果连接使用 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
属性 |
类型 |
说明 |
示例 |
状态 |
network.transport |
string |
OSI 传输层或进程内通信方法。 |
tcp ; unix |
始终 |
network.type |
string |
OSI 网络层或非 OSI 等效项。 |
ipv4 ; ipv6 |
如果传输为 tcp 或 udp 。 |
server.address |
string |
如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 |
example.com |
始终 |
server.port |
int |
服务器端口号 |
80 ; 8080 ; 443 |
如果传输为 tcp 或 udp 。 |
从 .NET 8.0 开始可用。
Microsoft.AspNetCore.Http.Connections
指标 Microsoft.AspNetCore.Http.Connections
报告来自 ASP.NET Core SignalR 的连接信息:
指标:signalr.server.connection.duration
属性 |
类型 |
说明 |
示例 |
状态 |
signalr.connection.status |
string |
SignalR HTTP 连接关闭状态。 |
app_shutdown ; timeout |
始终 |
signalr.transport |
string |
SignalR 传输类型 |
web_sockets ; long_polling |
Always |
从 .NET 8.0 开始可用。
值 |
说明 |
normal_closure |
已正常关闭连接。 |
timeout |
由于超时,已关闭连接。 |
app_shutdown |
由于应用正在关闭,因此已关闭连接。 |
signalr.transport
是下列值之一:
由于此指标用于跟踪连接持续时间,并且理想情况下 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
Attribute |
类型 |
说明 |
示例 |
状态 |
signalr.connection.status |
string |
SignalR HTTP 连接关闭状态。 |
app_shutdown ; timeout |
始终 |
signalr.transport |
string |
SignalR 传输类型 |
web_sockets ; long_polling |
Always |
从 .NET 8.0 开始可用。