Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Information Provided
-
5.2.1
-
None
Description
I recently started using the [micrometer|https://micrometer.io/] binding for HttpClient version 4 and 5, b both classic and async.
Digging a bit deeper into the implementation I noticed that the async instrumentation is not able to measure IO errors.
My attempt to solve this (https://github.com/micrometer-metrics/micrometer/pull/3801)
is using a HttpRequestRetryStrategy to capture exceptions. Not only it feels a bit awkward using the retry strategy to meter errors, I discovered that only errors occurring during an established connection could be metered. Connection related IO errors (connection refused, connection timeout, etc.) are not metered.
The issue seems to be that the RequestInterceptor used to start then observation, is not called before a connection is established. I see the same behavior with the classic http client instrumentation which is using a HttpRequestExecutor, not an Interceptor.
This means
- the metrics do not include the time needed to establish a connection.
- The metrics do not count failed connection attempts.
Could you advise on how to instrument HttpClient (classic and async) in order to be able to meter connection related time and errors?