.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 的默认值时(https为443,http为80),则不报告此端口。 url.scheme始终报告。
指标:http.client.open_connections
| 名称 | Instrument Type | Unit (UCUM) | 描述 |
|---|---|---|---|
http.client.open_connections | UpDownCounter | {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.com;10.1.2.80;/tmp/my.sock | 必需 |
server.port | int | HTTP 请求发送到的 “URI origin” 的端口标识符。[3] | 80; 8080; 443 | 有条件要求:[4] |
url.scheme | 字符串 | The URI 方案组件,用于标识所使用的协议。 | http;https;ftp | 推荐 |
[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 为 80,https 为 443)。
http.connection.state 必须是以下之一
| 值 | 描述 |
|---|---|
active | active 状态。 |
idle | idle 状态。 |
指标: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 Type | Unit (UCUM) | 描述 |
|---|---|---|---|
http.client.connection.duration | Histogram | s | 成功建立的出站 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.com;10.1.2.80;/tmp/my.sock | 必需 |
server.port | int | HTTP 请求发送到的 “URI origin” 的端口标识符。[3] | 80; 8080; 443 | 有条件要求:[4] |
url.scheme | 字符串 | The URI 方案组件,用于标识所使用的协议。 | http;https;ftp | 推荐 |
[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 为 80,https 为 443)。
指标: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 Type | Unit (UCUM) | 描述 |
|---|---|---|---|
http.client.request.time_in_queue | Histogram | s | 请求在队列中等待可用连接的时间量。[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.com;10.1.2.80;/tmp/my.sock | 必需 |
server.port | int | HTTP 请求发送到的 “URI origin” 的端口标识符。[4] | 80; 8080; 443 | 有条件要求:[5] |
url.scheme | 字符串 | The URI 方案组件,用于标识所使用的协议。 | http;https;ftp | 推荐 |
[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 为 80,https 为 443)。
http.request.method 具有以下已知值列表。如果适用其中一个,则必须使用相应的 值,否则可以使用自定义值。
| 值 | 描述 |
|---|---|
CONNECT | CONNECT 方法。 |
DELETE | DELETE 方法。 |
GET | GET 方法。 |
HEAD | HEAD 方法。 |
OPTIONS | OPTIONS 方法。 |
PATCH | PATCH 方法。 |
POST | POST 方法。 |
PUT | PUT 方法。 |
TRACE | TRACE 方法。 |
_OTHER | 仪器不了解的任何 HTTP 方法。 |
指标:http.client.active_requests
| 名称 | Instrument Type | Unit (UCUM) | 描述 |
|---|---|---|---|
http.client.active_requests | UpDownCounter | {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.com;10.1.2.80;/tmp/my.sock | 必需 |
server.port | int | HTTP 请求发送到的 “URI origin” 的端口标识符。[3] | 80; 8080; 443 | 有条件要求:[4] |
url.scheme | 字符串 | The URI 方案组件,用于标识所使用的协议。 | http;https;ftp | 推荐 |
[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 为 80,https 为 443)。
http.request.method 具有以下已知值列表。如果适用其中一个,则必须使用相应的 值,否则可以使用自定义值。
| 值 | 描述 |
|---|---|
CONNECT | CONNECT 方法。 |
DELETE | DELETE 方法。 |
GET | GET 方法。 |
HEAD | HEAD 方法。 |
OPTIONS | OPTIONS 方法。 |
PATCH | PATCH 方法。 |
POST | POST 方法。 |
PUT | PUT 方法。 |
TRACE | TRACE 方法。 |
_OTHER | 仪器不了解的任何 HTTP 方法。 |
HTTP 服务器
所有 HTTP 服务器指标都由 Microsoft.AspNetCore.Hosting meter 报告。
指标:http.server.request.duration
衡量从接收到最后一个字节的时间。此指标遵循通用的 http.server.request.duration 定义。
注意
Meter 名称为
Microsoft.AspNetCore.HostingASP.NET Core 8.0 中添加了指标
可选的
server.address和server.port属性未报告附加属性
- 当请求未被应用程序管道处理时,会报告
aspnetcore.request.is_unhandled布尔属性。否则将被忽略。
- 当请求未被应用程序管道处理时,会报告
指标:http.server.active_requests
衡量服务器上当前活动的 HTTP 请求数。此指标遵循通用的 http.server.active_requests 定义。
注意
- Meter 名称为
Microsoft.AspNetCore.Hosting - 可选的
server.address和server.port属性未报告 - ASP.NET Core 8.0 中添加了指标