Description
Background and motivation
System.Net.Http has event counters. In .NET 8 we want to add metrics counters. These will sit side-by-side with event counters for backward compatibility.
Metrics counters add new features (histograms, tags) that allow for richer data to be represented by fewer counters. For example, there are event counters in hosting for total-requests
and failed-requests
counters. One metrics counter can represent these with a tag to represent the status.
API Proposal
The proposal for this issue covers the meter name, counters name and description and tags. The IDs and names are a public API that can't easily change after shipping.
System.Net.Http
Notes: current-requests
and request-duration
follow OTel's lead: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/http-metrics.md#http-client
http-client-current-requests
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-current-requests |
UpDownCounter | {request} |
Number of outbound HTTP requests that are currently active on the client. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
method |
string | HTTP request method. | GET ; POST ; HEAD |
Always |
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
http-client-request-duration
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-request-duration |
Histogram | s |
The duration of outbound HTTP requests. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
method |
string | HTTP request method. | GET ; POST ; HEAD |
Always |
status-code |
int | HTTP response status code. | 200 |
Always |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
Custom tags | n/a | Custom tags added from TBD. | organization =contoso |
n/a |
http-client-failed-requests
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-failed-requests |
Counter | {request} |
Number of outbound HTTP requests that have failed. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
method |
string | HTTP request method. | GET ; POST ; HEAD |
Always |
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
exception-name |
string | Name of the .NET exception thrown during the request. | System.OperationCanceledException |
If unhandled exception |
http-client-current-connections
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-current-connections |
UpDownCounter | {connection} |
Number of outbound HTTP connections that are currently active on the client. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
http-client-current-idle-connections
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-current-idle-connections |
UpDownCounter | {connection} |
Number of outbound HTTP connections that are currently idle on the client. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
http-client-connection-duration
Name | Instrument Type | Unit | Description |
---|---|---|---|
http-client-connection-duration |
Histogram | s |
The duration of outbound HTTP connections. |
Attribute | Type | Description | Examples | Presence |
---|---|---|---|---|
scheme |
string | The URI scheme identifying the used protocol. | http ; https |
Always |
host |
string | Host identifier of the "URI origin" HTTP request is sent to. | localhost |
Always |
port |
int | Port identifier of the "URI origin" HTTP request is sent to. | 8080 |
Added if not default (80 for http or 443 for https) |
protocol |
string | HTTP request protocol. | HTTP/1.1 ; HTTP/2 ; HTTP/3 |
Always |
reason |
string | Reason why the connection ended. | ??? | Always |
API Usage
Metrics are collected using libraries, tooling or MeterListener
https://learn.microsoft.com/en-us/dotnet/core/diagnostics/metrics-collection
Alternative Designs
No response
Risks
No response