本文介绍使用 System.Net API 生成的 System.Diagnostics.Metrics 内置的网络指标。 有关基于备用
提示
有关如何收集、报告、扩充和测试 System.Net 指标的详细信息,请参阅 .NET中的
System.Net.NameResolution
System.Net.NameResolution 指标报告来自 Dns的 DNS 名称解析:
指标:dns.lookup.duration
| 名字 | 检测类型 | 单位 | 描述 |
|---|---|---|---|
dns.lookup.duration |
直方图 | s |
测量执行 DNS 查找所需的时间。 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
dns.question.name |
string |
要查询的名称。 |
www.example.com;dot.net |
总是 |
error.type |
string |
已知错误字符串或发生的异常的完整类型名称。 |
host_not_found;System.Net.Sockets.SocketException |
如果发生错误 |
此指标测量发出 DNS 请求所需的时间。 这些请求可以通过调用 Dns 或间接地在更高级别的 API(如 HttpClient)中调用方法。
执行 DNS 查找时出现大多数错误都会引发 SocketException。 为了更好地消除常见错误情况,SocketErrorCode中提供了具有特定 error.type 的套接字异常显式错误名称:
| SocketErrorCode | error.type |
|---|---|
| HostNotFound | host_not_found |
| TryAgain | try_again |
| AddressFamilyNotSupported | address_family_not_supported |
| NoRecovery | no_recovery |
将具有任何其他 SocketError 值的套接字异常报告为 System.Net.Sockets.SocketException。
使用 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 ]。
从 .NET 8 开始可用。
System.Net.Http
System.Net.Http 指标报告来自 System.Net.Http的 HTTP 请求和连接信息:
http.client.open_connectionshttp.client.connection.durationhttp.client.request.durationhttp.client.request.time_in_queuehttp.client.active_requests
指标:http.client.open_connections
| 名字 | 检测类型 | 单位(UCUM) | 描述 |
|---|---|---|---|
http.client.open_connections |
UpDownCounter<T> | {connection} |
客户端上当前处于活动状态或空闲的出站 HTTP 连接数 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
http.connection.state |
string |
HTTP 连接池中的 HTTP 连接状态。 |
active;idle |
总是 |
network.protocol.version |
string |
使用的 HTTP 协议的版本。 |
1.1;2 |
总是 |
server.address |
string |
HTTP 请求发送到 |
example.com |
总是 |
server.port |
int |
HTTP 请求发送到 |
80;8080;443 |
如果未默认(80 方案的http,则为 443https) |
network.peer.address |
string |
套接字连接的对等 IP 地址。 | 10.5.3.2 |
总是 |
url.scheme |
string |
标识已用协议的 URI 方案 组件。 |
http;https;ftp |
总是 |
HttpClient配置为使用默认 SocketsHttpHandler时,维护用于发送 HTTP 消息的网络连接缓存池。 此指标计算池中当前连接数。 活动连接正在处理活动请求。 活动连接可以传输数据或等待客户端或服务器。 空闲连接不处理任何请求,但保持打开状态,以便可以更快地处理未来的请求。
从 .NET 8 开始可用。
指标:http.client.connection.duration
| 名字 | 检测类型 | 单位(UCUM) | 描述 |
|---|---|---|---|
http.client.connection.duration |
直方图 | s |
成功建立出站 HTTP 连接的持续时间。 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
network.protocol.version |
string |
使用的 HTTP 协议的版本。 |
1.1;2 |
总是 |
server.address |
string |
HTTP 请求发送到 |
example.com |
总是 |
server.port |
int |
HTTP 请求发送到 |
80;8080;443 |
如果未默认(80 方案的http,则为 443https) |
network.peer.address |
string |
套接字连接的 IP 地址。 | 10.5.3.2 |
总是 |
url.scheme |
string |
标识已用协议的 URI 方案 组件。 |
http;https;ftp |
总是 |
仅当 HttpClient 配置为使用默认 SocketsHttpHandler时,才会捕获此指标。
由于此指标正在跟踪连接持续时间,理想情况下,http 连接用于多个请求,因此存储桶应比用于请求持续时间的存储桶长。 例如,使用 [ 0.01、0.02、0.05、0.1、0.2、0.5、1、2、5、10、30、60、120、300 ] 提供 5 分钟大桶。
从 .NET 8 开始可用。
指标:http.client.request.duration
| 名字 | 检测类型 | 单位(UCUM) | 描述 |
|---|---|---|---|
http.client.request.duration |
Histogram<T> | s |
出站 HTTP 请求的持续时间。 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
error.type |
string |
请求失败原因:snake_case或完整异常类型或 HTTP 4xx/5xx 状态代码中 |
System.Threading.Tasks.TaskCanceledException;name_resolution_error;secure_connection_error;404 |
如果请求失败。 |
http.request.method |
string |
HTTP 请求方法。 |
GET;POST;HEAD;_OTHER [2] |
总是 |
http.response.status_code |
int |
HTTP 响应状态代码。 | 200 |
如果收到响应。 |
network.protocol.version |
string |
使用的 HTTP 协议的版本。 |
1.1;2 |
如果收到响应。 |
server.address |
string |
HTTP 请求发送到 |
example.com |
总是 |
server.port |
int |
HTTP 请求发送到 |
80;8080;443 |
取决于 .NET 版本。 [3] |
url.scheme |
string |
标识已用协议的 URI 方案 组件。 |
http;https;ftp |
总是 |
[1] error.type: 如果请求失败,该值将设置为以下值之一:
- 类型为 TaskCanceledException的异常名称。
- 指示客户端或服务器错误的状态代码,例如,
500。 - 如果 HttpRequestException 与 HttpRequestError以外的
Unknown发生,则蛇例中的枚举值,例如,name_resolution_error。
[2] http.request.method:http.request.method:** 如果该方法是 RFC9110中列出的已知方法之一,则该值包含方法名称;否则,该值 _OTHER。 用户提供的方法名称将以不区分大小写的方式映射到已知名称。 例如,如果用户提供名称 GeT,它将映射到 GET。
[3] server.port: 值存在依赖于版本:
.NET 8 :如果不是默认的,则为 <( 方案, ) - .NET 9+:始终存在
HTTP 客户端请求持续时间测量基础客户端处理程序完成请求所需的时间。 完成请求包括从网络流读取响应标头的时间。 它不包括读取响应正文所用的时间。
使用 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 ]。
从 .NET 8 开始可用。
提示
此指标可以 扩充。
指标:http.client.request.time_in_queue
| 名字 | 检测类型 | 单位(UCUM) | 描述 |
|---|---|---|---|
http.client.request.time_in_queue |
Histogram<T> | s |
等待可用连接的队列上请求所花费的时间量。 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
http.request.method |
string |
HTTP 请求方法。 |
GET;POST;HEAD |
总是 |
network.protocol.version |
string |
使用的 HTTP 协议的版本。 |
1.1;2 |
总是 |
server.address |
string |
HTTP 请求发送到 |
example.com |
总是 |
server.port |
int |
HTTP 请求发送到 |
80;8080;443 |
如果未默认(80 方案的http,则为 443https) |
url.scheme |
string |
标识已用协议的 URI 方案 组件。 |
http;https;ftp |
总是 |
HttpClient,配置为使用默认 SocketsHttpHandler时,使用网络连接池发送 HTTP 请求。 如果所有连接都在忙于处理其他请求,则新请求将置于队列中,并等待网络连接可供使用。 此检测测量在通过网络发送的任何内容之前,HTTP 请求在该队列中等待的时间。
从 .NET 8 开始可用。
指标:http.client.active_requests
| 名字 | 检测类型 | 单位(UCUM) | 描述 |
|---|---|---|---|
http.client.active_requests |
UpDownCounter<T> | {request} |
活动 HTTP 请求数。 |
| 属性 | 类型 | 描述 | 例子 | 存在 |
|---|---|---|---|---|
http.request.method |
string |
HTTP 请求方法。 |
GET;POST;HEAD |
总是 |
server.address |
string |
HTTP 请求发送到 |
example.com |
总是 |
server.port |
int |
HTTP 请求发送到 |
80;8080;443 |
如果未默认(80 方案的http,则为 443https) |
url.scheme |
string |
标识已用协议的 URI 方案 组件。 |
http;https;ftp |
总是 |
此指标计算被视为活动的请求数。 请求在 http.client.request.duration 检测测量的同一时间段处于活动状态。
从 .NET 8 开始可用。