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
aspnetcore.rate_limiting.request_lease.duration
aspnetcore.rate_limiting.queued_requests
aspnetcore.rate_limiting.request.time_in_queue
aspnetcore.rate_limiting.requests
指标: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
kestrel.connection.duration
kestrel.rejected_connections
kestrel.queued_connections
kestrel.queued_requests
kestrel.upgraded_connections
kestrel.tls_handshake.duration
kestrel.active_tls_handshakes
指标:kestrel.active_connections
名称 | 检测类型 | 单位 (UCUM) | 说明 |
---|---|---|---|
kestrel.active_connections |
UpDownCounter | {connection} |
服务器上当前处于活动状态的连接数。 |
Attribute | 类型 | 说明 | 示例 | 状态 |
---|---|---|---|---|
network.transport |
string | OSI 传输层或进程内通信方法。 | %> | 始终 |
network.type |
string | OSI 网络层或非 OSI 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
从 .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 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
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 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
当当前活动计数超过使用 MaxConcurrentConnections
配置的值时,连接将被拒绝。
从 .NET 8.0 开始可用。
指标:kestrel.queued_connections
名称 | 检测类型 | 单位 (UCUM) | 说明 |
---|---|---|---|
kestrel.queued_connections |
UpDownCounter | {connection} |
当前已排队且正在等待启动的连接数。 |
属性 | 类型 | 说明 | 示例 | 状态 |
---|---|---|---|---|
network.transport |
string | OSI 传输层或进程内通信方法。 | %> | 始终 |
network.transport |
string | OSI 网络层或非 OSI 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 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 等效项。 | %> | 始终 |
network.protocol.version |
string | network.protocol.name 中指定的协议的版本。 |
%> | 始终 |
network.transport |
string | OSI 传输层或进程内通信方法。 | %> | 始终 |
network.transport |
string | OSI 网络层或非 OSI 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
从 .NET 8.0 开始可用。
指标:kestrel.upgraded_connections
名称 | 检测类型 | 单位 (UCUM) | 说明 |
---|---|---|---|
kestrel.upgraded_connections |
UpDownCounter | {connection} |
当前升级的连接数 (WebSockets)。 |
属性 | 类型 | 说明 | 示例 | 状态 |
---|---|---|---|---|
network.transport |
string | OSI 传输层或进程内通信方法。 | %> | 始终 |
network.transport |
string | OSI 网络层或非 OSI 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
计数器仅跟踪 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 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
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 等效项。 | %> | 如果传输为 tcp 或 udp 。 |
server.address |
string | 如果无需反向 DNS 查找就可用,则为服务器地址域名;否则为 IP 地址或 Unix 域套接字名称。 | example.com |
始终 |
server.port |
int | 服务器端口号 | .- . | 如果传输为 tcp 或 udp 。 |
从 .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 开始可用。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈