@Override
    public HttpResponse execute(ClientRequestContext ctx, HttpRequest req) throws Exception {
        final RequestHeadersBuilder newHeaders = req.headers().toBuilder();
        final ClientObservationContext clientObservationContext =
                new ClientObservationContext(ctx, newHeaders, req);
        final Observation observation = HttpClientObservationDocumentation.OBSERVATION.observation(
                httpClientObservationConvention, DefaultHttpClientObservationConvention.INSTANCE,
                () -> clientObservationContext, observationRegistry).start();
        final HttpRequest newReq = req.withHeaders(newHeaders);
        ctx.updateRequest(newReq);
        final RequestContextExtension ctxExtension = ctx.as(RequestContextExtension.class);

        if (observationRegistry.isNoop() || observation.isNoop()) {
            return unwrap().execute(ctx, newReq);
        }

        if (ctxExtension != null) {
            // Make the span the current span and run scope decorators when the ctx is pushed.
            ctxExtension.hook(observation::openScope);
        }

        enrichObservation(ctx, clientObservationContext, observation);

        return observation.scopedChecked(() -> unwrap().execute(ctx, newReq));
    }
Creates a new micrometer observation integrated {@link HttpClient} decorator
using the specified {@link ObservationRegistry} and {@link ObservationConvention}.
core/src/main/java/com/linecorp/armeria/client/observation/ObservationClient.java