.NET 发出的 HTTP 客户端和服务器指标的语义约定

状态: 稳定

本文档定义了 .NET 组件和运行时发出的 HTTP 指标的语义约定。

HTTP 客户端

所有 HTTP 客户端指标都由 System.Net.Http meter 报告。

指标:http.client.request.duration

客户端请求持续时间衡量接收响应头所需的时间,不包括读取响应体的时间。

此指标遵循通用的 http.client.request.duration 定义。

注意

  • Meter 名称为 System.Net.Http
  • .NET 8.0 中添加了指标
  • 当报告 error.type 属性时,它包含以下之一:snake_case 格式的 HTTP 请求错误、完整的异常类型或收到的状态代码的字符串表示。
  • network.protocol.name 不会报告,应始终假定与 http 匹配。
  • server.port 匹配提供的 scheme 的默认值时(https443http80),则不报告此端口。
  • url.scheme 始终报告。

指标:http.client.open_connections

名称Instrument TypeUnit (UCUM)描述
http.client.open_connectionsUpDownCounter{connection}客户端当前处于活动或空闲状态的出站 HTTP 连接数。[1]

[1]: Meter 名称:System.Net.Http;添加于:.NET 8.0

属性类型描述示例需求级别
http.connection.state字符串HTTP 连接池中 HTTP 连接的状态。active; idle必需
network.peer.address字符串套接字连接的远程 IP 地址。10.1.2.80推荐
network.protocol.version字符串连接池中与连接关联的协议的协商版本。[1]1.1; 2; 3推荐
server.address字符串HTTP 请求发送到的 “URI origin” 的主机标识符。[2]example.com10.1.2.80/tmp/my.sock必需
server.portintHTTP 请求发送到的 “URI origin” 的端口标识符。[3]80; 8080; 443有条件要求:[4]
url.scheme字符串The URI 方案组件,用于标识所使用的协议。httphttpsftp推荐

[1]: HTTP 1.0 和 1.1 请求在连接池中共享连接,并且都报告为版本 1.1。因此,在连接指标上报告的 network.protocol.version 值与在 HTTP 1.0 请求的请求级别指标或 span 上报告的值不同。

[2]: 如果 HTTP 客户端请求显式指向 IP 地址,例如 http://x.x.x.x:8080,则 server.address 应为 IP 地址 x.x.x.x。不应使用 DNS 查找。

[3]: 从客户端观察时,并且当通过中间设备通信时,server.port 应表示任何中间设备(例如代理)后面的服务器端口(如果可用)。

[4]: 如果不是默认值(http scheme 为 80https443)。

http.connection.state 必须是以下之一

描述
activeactive 状态。
idleidle 状态。

指标:http.client.connection.duration

此指标应使用 ExplicitBucketBoundaries 指定,值为 [ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]

名称Instrument TypeUnit (UCUM)描述
http.client.connection.durationHistograms成功建立的出站 HTTP 连接的持续时间。[1]

[1]: Meter 名称:System.Net.Http;添加于:.NET 8.0

属性类型描述示例需求级别
network.peer.address字符串网络连接的对端地址 - IP 地址或 Unix 域套接字名称。10.1.2.80/tmp/my.sock推荐
network.protocol.version字符串连接池中与连接关联的协议的协商版本。[1]1.1; 2; 3推荐
server.address字符串HTTP 请求发送到的 “URI origin” 的主机标识符。[2]example.com10.1.2.80/tmp/my.sock必需
server.portintHTTP 请求发送到的 “URI origin” 的端口标识符。[3]80; 8080; 443有条件要求:[4]
url.scheme字符串The URI 方案组件,用于标识所使用的协议。httphttpsftp推荐

[1]: HTTP 1.0 和 1.1 请求在连接池中共享连接,并且都报告为版本 1.1。因此,在连接指标上报告的 network.protocol.version 值与在 HTTP 1.0 请求的请求级别指标或 span 上报告的值不同。

[2]: 如果 HTTP 客户端请求显式指向 IP 地址,例如 http://x.x.x.x:8080,则 server.address 应为 IP 地址 x.x.x.x。不应使用 DNS 查找。

[3]: 从客户端观察时,并且当通过中间设备通信时,server.port 应表示任何中间设备(例如代理)后面的服务器端口(如果可用)。

[4]: 如果不是默认值(http scheme 为 80https443)。

指标:http.client.request.time_in_queue

此指标应使用 ExplicitBucketBoundaries [ 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 ] 进行指定。

名称Instrument TypeUnit (UCUM)描述
http.client.request.time_in_queueHistograms请求在队列中等待可用连接的时间量。[1]

[1]: Meter 名称:System.Net.Http;添加于:.NET 8.0

属性类型描述示例需求级别
http.request.method字符串HTTP 请求方法。[1]GET; POST; HEAD推荐
network.protocol.version字符串连接池中与连接关联的协议的协商版本。[2]1.1; 2; 3推荐
server.address字符串HTTP 请求发送到的 “URI origin” 的主机标识符。[3]example.com10.1.2.80/tmp/my.sock必需
server.portintHTTP 请求发送到的 “URI origin” 的端口标识符。[4]80; 8080; 443有条件要求:[5]
url.scheme字符串The URI 方案组件,用于标识所使用的协议。httphttpsftp推荐

[1]: HTTP 请求方法值是 RFC9110 中列出的“已知”方法之一,以及 RFC5789 中定义的 PATCH 方法。如果 HTTP 请求方法未知,则将 http.request.method 属性设置为 _OTHER。目前无法覆盖已知 HTTP 方法的列表。

[2]: HTTP 1.0 和 1.1 请求在连接池中共享连接,并且都报告为版本 1.1。因此,在连接指标上报告的 network.protocol.version 值与在 HTTP 1.0 请求的请求级别指标或 span 上报告的值不同。

[3]: 如果 HTTP 客户端请求显式指向 IP 地址,例如 http://x.x.x.x:8080,则 server.address 应为 IP 地址 x.x.x.x。不应使用 DNS 查找。

[4]: 从客户端观察时,并且当通过中间设备通信时,server.port 应表示任何中间设备(例如代理)后面的服务器端口(如果可用)。

[5]: 如果不是默认值(http scheme 为 80https443)。

http.request.method 具有以下已知值列表。如果适用其中一个,则必须使用相应的 ,否则可以使用自定义值。

描述
CONNECTCONNECT 方法。
DELETEDELETE 方法。
GETGET 方法。
HEADHEAD 方法。
OPTIONSOPTIONS 方法。
PATCHPATCH 方法。
POSTPOST 方法。
PUTPUT 方法。
TRACETRACE 方法。
_OTHER仪器不了解的任何 HTTP 方法。

指标:http.client.active_requests

名称Instrument TypeUnit (UCUM)描述
http.client.active_requestsUpDownCounter{request}活动 HTTP 请求数。[1]

[1]: Meter 名称:System.Net.Http;添加于:.NET 8.0

属性类型描述示例需求级别
http.request.method字符串HTTP 请求方法。[1]GET; POST; HEAD推荐
server.address字符串HTTP 请求发送到的 “URI origin” 的主机标识符。[2]example.com10.1.2.80/tmp/my.sock必需
server.portintHTTP 请求发送到的 “URI origin” 的端口标识符。[3]80; 8080; 443有条件要求:[4]
url.scheme字符串The URI 方案组件,用于标识所使用的协议。httphttpsftp推荐

[1]: HTTP 请求方法值是 RFC9110 中列出的“已知”方法之一,以及 RFC5789 中定义的 PATCH 方法。如果 HTTP 请求方法未知,则将 http.request.method 属性设置为 _OTHER。目前无法覆盖已知 HTTP 方法的列表。

[2]: 如果 HTTP 客户端请求显式指向 IP 地址,例如 http://x.x.x.x:8080,则 server.address 应为 IP 地址 x.x.x.x。不应使用 DNS 查找。

[3]: 从客户端观察时,并且当通过中间设备通信时,server.port 应表示任何中间设备(例如代理)后面的服务器端口(如果可用)。

[4]: 如果不是默认值(http scheme 为 80https443)。

http.request.method 具有以下已知值列表。如果适用其中一个,则必须使用相应的 ,否则可以使用自定义值。

描述
CONNECTCONNECT 方法。
DELETEDELETE 方法。
GETGET 方法。
HEADHEAD 方法。
OPTIONSOPTIONS 方法。
PATCHPATCH 方法。
POSTPOST 方法。
PUTPUT 方法。
TRACETRACE 方法。
_OTHER仪器不了解的任何 HTTP 方法。

HTTP 服务器

所有 HTTP 服务器指标都由 Microsoft.AspNetCore.Hosting meter 报告。

指标:http.server.request.duration

衡量从接收到最后一个字节的时间。此指标遵循通用的 http.server.request.duration 定义。

注意

  • Meter 名称为 Microsoft.AspNetCore.Hosting

  • ASP.NET Core 8.0 中添加了指标

  • 可选的 server.addressserver.port 属性未报告

  • 附加属性

    • 当请求被应用程序管道处理时,会报告 aspnetcore.request.is_unhandled 布尔属性。否则将被忽略。

指标:http.server.active_requests

衡量服务器上当前活动的 HTTP 请求数。此指标遵循通用的 http.server.active_requests 定义。

注意

  • Meter 名称为 Microsoft.AspNetCore.Hosting
  • 可选的 server.addressserver.port 属性未报告
  • ASP.NET Core 8.0 中添加了指标