Uploaded image for project: 'HttpComponents HttpClient'
  1. HttpComponents HttpClient
  2. HTTPCLIENT-2274

Instrumenting HttpClient to gather http client request metrics.

    XMLWordPrintableJSON

Details

    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?

      Attachments

        Activity

          People

            Unassigned Unassigned
            cachescrubber Lars Uffmann
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: