Fix V0 HTTP client operation names to prevent duplicate endpoints in APM Endpoints view#10958
Draft
Fix V0 HTTP client operation names to prevent duplicate endpoints in APM Endpoints view#10958
Conversation
…APM Endpoints view
Common HTTP client libraries (Apache HttpClient, HttpURLConnection, etc.) were falling
through to the generic "http.request" default in ClientNamingV0.operationForComponent(),
causing the APM Endpoints view to show spurious duplicate endpoint rows — one for the
real servlet.request server span and one for each client span with the same URL path.
Each well-known HTTP client now has a distinct library-specific operation name consistent
with the existing pattern for OkHttp ("okhttp.request"), Play-WS ("play-ws.request"),
and Netty client ("netty.client.request"). The generic "http.request" fallback is kept
for truly unknown/custom HTTP clients.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
BenchmarksStartupParameters
See matching parameters
SummaryFound 0 performance improvements and 0 performance regressions! Performance is the same for 61 metrics, 10 unstable metrics. Startup time reports for petclinicgantt
title petclinic - global startup overhead: candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section tracing
Agent [baseline] (1.07 s) : 0, 1069519
Total [baseline] (11.082 s) : 0, 11082230
Agent [candidate] (1.06 s) : 0, 1059524
Total [candidate] (11.037 s) : 0, 11036623
section appsec
Agent [baseline] (1.244 s) : 0, 1244386
Total [baseline] (11.17 s) : 0, 11170141
Agent [candidate] (1.245 s) : 0, 1245080
Total [candidate] (11.067 s) : 0, 11067095
section iast
Agent [baseline] (1.239 s) : 0, 1239407
Total [baseline] (11.358 s) : 0, 11357510
Agent [candidate] (1.226 s) : 0, 1225897
Total [candidate] (11.284 s) : 0, 11283529
section profiling
Agent [baseline] (1.181 s) : 0, 1180788
Total [baseline] (10.925 s) : 0, 10925427
Agent [candidate] (1.19 s) : 0, 1189548
Total [candidate] (11.119 s) : 0, 11118577
gantt
title petclinic - break down per module: candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section tracing
crashtracking [baseline] (1.208 ms) : 0, 1208
crashtracking [candidate] (1.194 ms) : 0, 1194
BytebuddyAgent [baseline] (636.517 ms) : 0, 636517
BytebuddyAgent [candidate] (629.42 ms) : 0, 629420
AgentMeter [baseline] (29.564 ms) : 0, 29564
AgentMeter [candidate] (29.525 ms) : 0, 29525
GlobalTracer [baseline] (258.086 ms) : 0, 258086
GlobalTracer [candidate] (258.26 ms) : 0, 258260
AppSec [baseline] (31.861 ms) : 0, 31861
AppSec [candidate] (31.998 ms) : 0, 31998
Debugger [baseline] (60.777 ms) : 0, 60777
Debugger [candidate] (60.735 ms) : 0, 60735
Remote Config [baseline] (589.805 µs) : 0, 590
Remote Config [candidate] (614.752 µs) : 0, 615
Telemetry [baseline] (8.84 ms) : 0, 8840
Telemetry [candidate] (8.101 ms) : 0, 8101
Flare Poller [baseline] (5.939 ms) : 0, 5939
Flare Poller [candidate] (3.578 ms) : 0, 3578
section appsec
crashtracking [baseline] (1.183 ms) : 0, 1183
crashtracking [candidate] (1.203 ms) : 0, 1203
BytebuddyAgent [baseline] (657.07 ms) : 0, 657070
BytebuddyAgent [candidate] (657.66 ms) : 0, 657660
AgentMeter [baseline] (12.06 ms) : 0, 12060
AgentMeter [candidate] (12.117 ms) : 0, 12117
GlobalTracer [baseline] (257.285 ms) : 0, 257285
GlobalTracer [candidate] (257.772 ms) : 0, 257772
IAST [baseline] (24.268 ms) : 0, 24268
IAST [candidate] (24.174 ms) : 0, 24174
AppSec [baseline] (177.69 ms) : 0, 177690
AppSec [candidate] (177.465 ms) : 0, 177465
Debugger [baseline] (66.117 ms) : 0, 66117
Debugger [candidate] (66.027 ms) : 0, 66027
Remote Config [baseline] (620.275 µs) : 0, 620
Remote Config [candidate] (622.931 µs) : 0, 623
Telemetry [baseline] (8.316 ms) : 0, 8316
Telemetry [candidate] (8.307 ms) : 0, 8307
Flare Poller [baseline] (3.594 ms) : 0, 3594
Flare Poller [candidate] (3.588 ms) : 0, 3588
section iast
crashtracking [baseline] (1.23 ms) : 0, 1230
crashtracking [candidate] (1.202 ms) : 0, 1202
BytebuddyAgent [baseline] (805.09 ms) : 0, 805090
BytebuddyAgent [candidate] (794.934 ms) : 0, 794934
AgentMeter [baseline] (11.582 ms) : 0, 11582
AgentMeter [candidate] (11.387 ms) : 0, 11387
GlobalTracer [baseline] (248.618 ms) : 0, 248618
GlobalTracer [candidate] (246.593 ms) : 0, 246593
IAST [baseline] (25.575 ms) : 0, 25575
IAST [candidate] (25.372 ms) : 0, 25372
AppSec [baseline] (26.751 ms) : 0, 26751
AppSec [candidate] (26.518 ms) : 0, 26518
Debugger [baseline] (70.948 ms) : 0, 70948
Debugger [candidate] (69.472 ms) : 0, 69472
Remote Config [baseline] (531.318 µs) : 0, 531
Remote Config [candidate] (540.804 µs) : 0, 541
Telemetry [baseline] (9.231 ms) : 0, 9231
Telemetry [candidate] (10.29 ms) : 0, 10290
Flare Poller [baseline] (3.378 ms) : 0, 3378
Flare Poller [candidate] (3.652 ms) : 0, 3652
section profiling
crashtracking [baseline] (1.157 ms) : 0, 1157
crashtracking [candidate] (1.181 ms) : 0, 1181
BytebuddyAgent [baseline] (681.708 ms) : 0, 681708
BytebuddyAgent [candidate] (686.817 ms) : 0, 686817
AgentMeter [baseline] (8.995 ms) : 0, 8995
AgentMeter [candidate] (9.056 ms) : 0, 9056
GlobalTracer [baseline] (214.96 ms) : 0, 214960
GlobalTracer [candidate] (216.246 ms) : 0, 216246
AppSec [baseline] (32.043 ms) : 0, 32043
AppSec [candidate] (32.301 ms) : 0, 32301
Debugger [baseline] (65.874 ms) : 0, 65874
Debugger [candidate] (65.232 ms) : 0, 65232
Remote Config [baseline] (561.226 µs) : 0, 561
Remote Config [candidate] (580.071 µs) : 0, 580
Telemetry [baseline] (7.658 ms) : 0, 7658
Telemetry [candidate] (8.627 ms) : 0, 8627
Flare Poller [baseline] (3.433 ms) : 0, 3433
Flare Poller [candidate] (3.562 ms) : 0, 3562
ProfilingAgent [baseline] (93.647 ms) : 0, 93647
ProfilingAgent [candidate] (94.911 ms) : 0, 94911
Profiling [baseline] (94.202 ms) : 0, 94202
Profiling [candidate] (95.477 ms) : 0, 95477
Startup time reports for insecure-bankgantt
title insecure-bank - global startup overhead: candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section tracing
Agent [baseline] (1.062 s) : 0, 1062145
Total [baseline] (8.852 s) : 0, 8852181
Agent [candidate] (1.053 s) : 0, 1052964
Total [candidate] (8.818 s) : 0, 8817538
section iast
Agent [baseline] (1.235 s) : 0, 1235421
Total [baseline] (9.59 s) : 0, 9590149
Agent [candidate] (1.242 s) : 0, 1241780
Total [candidate] (9.548 s) : 0, 9548346
gantt
title insecure-bank - break down per module: candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section tracing
crashtracking [baseline] (1.212 ms) : 0, 1212
crashtracking [candidate] (1.201 ms) : 0, 1201
BytebuddyAgent [baseline] (631.955 ms) : 0, 631955
BytebuddyAgent [candidate] (627.265 ms) : 0, 627265
AgentMeter [baseline] (29.582 ms) : 0, 29582
AgentMeter [candidate] (29.245 ms) : 0, 29245
GlobalTracer [baseline] (257.761 ms) : 0, 257761
GlobalTracer [candidate] (256.181 ms) : 0, 256181
AppSec [baseline] (31.87 ms) : 0, 31870
AppSec [candidate] (31.618 ms) : 0, 31618
Debugger [baseline] (59.892 ms) : 0, 59892
Debugger [candidate] (59.469 ms) : 0, 59469
Remote Config [baseline] (594.496 µs) : 0, 594
Remote Config [candidate] (578.972 µs) : 0, 579
Telemetry [baseline] (8.073 ms) : 0, 8073
Telemetry [candidate] (7.982 ms) : 0, 7982
Flare Poller [baseline] (5.073 ms) : 0, 5073
Flare Poller [candidate] (3.504 ms) : 0, 3504
section iast
crashtracking [baseline] (1.21 ms) : 0, 1210
crashtracking [candidate] (1.2 ms) : 0, 1200
BytebuddyAgent [baseline] (802.315 ms) : 0, 802315
BytebuddyAgent [candidate] (807.081 ms) : 0, 807081
AgentMeter [baseline] (11.524 ms) : 0, 11524
AgentMeter [candidate] (11.903 ms) : 0, 11903
GlobalTracer [baseline] (248.542 ms) : 0, 248542
GlobalTracer [candidate] (249.505 ms) : 0, 249505
IAST [baseline] (25.575 ms) : 0, 25575
IAST [candidate] (25.766 ms) : 0, 25766
AppSec [baseline] (26.697 ms) : 0, 26697
AppSec [candidate] (26.968 ms) : 0, 26968
Debugger [baseline] (70.22 ms) : 0, 70220
Debugger [candidate] (68.713 ms) : 0, 68713
Remote Config [baseline] (530.341 µs) : 0, 530
Remote Config [candidate] (525.148 µs) : 0, 525
Telemetry [baseline] (9.107 ms) : 0, 9107
Telemetry [candidate] (10.224 ms) : 0, 10224
Flare Poller [baseline] (3.341 ms) : 0, 3341
Flare Poller [candidate] (3.669 ms) : 0, 3669
LoadParameters
See matching parameters
SummaryFound 4 performance improvements and 5 performance regressions! Performance is the same for 11 metrics, 16 unstable metrics.
Request duration reports for insecure-bankgantt
title insecure-bank - request duration [CI 0.99] : candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section baseline
no_agent (1.168 ms) : 1156, 1179
. : milestone, 1168,
iast (3.081 ms) : 3045, 3118
. : milestone, 3081,
iast_FULL (5.623 ms) : 5568, 5678
. : milestone, 5623,
iast_GLOBAL (3.704 ms) : 3645, 3762
. : milestone, 3704,
profiling (2.446 ms) : 2421, 2471
. : milestone, 2446,
tracing (1.821 ms) : 1806, 1837
. : milestone, 1821,
section candidate
no_agent (1.188 ms) : 1176, 1199
. : milestone, 1188,
iast (3.273 ms) : 3227, 3319
. : milestone, 3273,
iast_FULL (5.836 ms) : 5778, 5894
. : milestone, 5836,
iast_GLOBAL (3.47 ms) : 3411, 3529
. : milestone, 3470,
profiling (2.092 ms) : 2072, 2113
. : milestone, 2092,
tracing (1.867 ms) : 1851, 1884
. : milestone, 1867,
Request duration reports for petclinicgantt
title petclinic - request duration [CI 0.99] : candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section baseline
no_agent (17.826 ms) : 17648, 18005
. : milestone, 17826,
appsec (18.756 ms) : 18564, 18949
. : milestone, 18756,
code_origins (17.687 ms) : 17512, 17862
. : milestone, 17687,
iast (18.028 ms) : 17844, 18211
. : milestone, 18028,
profiling (18.907 ms) : 18714, 19100
. : milestone, 18907,
tracing (18.766 ms) : 18578, 18954
. : milestone, 18766,
section candidate
no_agent (19.131 ms) : 18936, 19325
. : milestone, 19131,
appsec (18.344 ms) : 18158, 18530
. : milestone, 18344,
code_origins (17.867 ms) : 17692, 18042
. : milestone, 17867,
iast (17.786 ms) : 17608, 17963
. : milestone, 17786,
profiling (18.546 ms) : 18360, 18732
. : milestone, 18546,
tracing (17.527 ms) : 17354, 17700
. : milestone, 17527,
DacapoParameters
See matching parameters
SummaryFound 0 performance improvements and 0 performance regressions! Performance is the same for 11 metrics, 1 unstable metrics. Execution time for biojavagantt
title biojava - execution time [CI 0.99] : candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section baseline
no_agent (15.477 s) : 15477000, 15477000
. : milestone, 15477000,
appsec (14.872 s) : 14872000, 14872000
. : milestone, 14872000,
iast (18.7 s) : 18700000, 18700000
. : milestone, 18700000,
iast_GLOBAL (17.973 s) : 17973000, 17973000
. : milestone, 17973000,
profiling (15.399 s) : 15399000, 15399000
. : milestone, 15399000,
tracing (14.89 s) : 14890000, 14890000
. : milestone, 14890000,
section candidate
no_agent (14.953 s) : 14953000, 14953000
. : milestone, 14953000,
appsec (14.736 s) : 14736000, 14736000
. : milestone, 14736000,
iast (18.052 s) : 18052000, 18052000
. : milestone, 18052000,
iast_GLOBAL (17.981 s) : 17981000, 17981000
. : milestone, 17981000,
profiling (14.782 s) : 14782000, 14782000
. : milestone, 14782000,
tracing (14.827 s) : 14827000, 14827000
. : milestone, 14827000,
Execution time for tomcatgantt
title tomcat - execution time [CI 0.99] : candidate=1.61.0-SNAPSHOT~29a41b198e, baseline=1.61.0-SNAPSHOT~1e19001696
dateFormat X
axisFormat %s
section baseline
no_agent (1.466 ms) : 1454, 1477
. : milestone, 1466,
appsec (3.786 ms) : 3564, 4008
. : milestone, 3786,
iast (2.254 ms) : 2185, 2323
. : milestone, 2254,
iast_GLOBAL (2.288 ms) : 2219, 2358
. : milestone, 2288,
profiling (2.086 ms) : 2030, 2141
. : milestone, 2086,
tracing (2.057 ms) : 2003, 2110
. : milestone, 2057,
section candidate
no_agent (1.467 ms) : 1456, 1478
. : milestone, 1467,
appsec (3.769 ms) : 3548, 3990
. : milestone, 3769,
iast (2.252 ms) : 2182, 2321
. : milestone, 2252,
iast_GLOBAL (2.292 ms) : 2222, 2362
. : milestone, 2292,
profiling (2.076 ms) : 2020, 2131
. : milestone, 2076,
tracing (2.057 ms) : 2004, 2111
. : milestone, 2057,
|
…mingV0 change Tests for AWS SDK, Elasticsearch REST client, OpenSearch, and Mule 4 each include child HTTP client spans within their trace assertions. These spans had their operation name hardcoded as "http.request" because the underlying HTTP libraries (Apache HttpClient and Grizzly async client) previously fell through to that default. Now that these components have explicit V0 operation names, update the assertions to match: apache-httpclient.request, apache-httpasyncclient.request, and grizzly-http-async-client.request accordingly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Spring Boot OpenLiberty smoke app uses RestTemplate backed by HttpURLConnection, which now produces "http-url-connection.request" instead of the generic "http.request" after the ClientNamingV0 fix. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… (round 3) Update Spring WebFlux bootTest, Spring Cloud Zuul, and AWS SNS tests to use the new component-specific operation names introduced for V0 schema. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e (round 4) TwilioClientV0Test.httpClientOperation() was using the generic ClientV0.operation() which returned "http.request". Update to "apache-httpclient.request" directly since Twilio uses the apache-httpclient component for its underlying HTTP requests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ClientNamingV0.operationForComponent()returned the generic"http.request"for common HTTP client libraries (Apache HttpClient, HttpURLConnection, Google HTTP Client, Grizzly, Spring WebFlux, Jetty Client, etc.). The APM Endpoints view groups spans by(operationName, method, path), so client spans targeting the same URLs as the service's own endpoints appeared as duplicate, empty endpoint rows alongside the realservlet.requestserver entries.okhttp.request), Play-WS (play-ws.request), and Netty client (netty.client.request). The"http.request"fallback is preserved for unknown/custom clients.http.client.request/http.server.request.Affected libraries
apache-httpclient/apache-httpclient5http.requestapache-httpclient.requestapache-httpasyncclienthttp.requestapache-httpasyncclient.requestcommons-http-clienthttp.requestcommons-http-client.requestgoogle-http-clienthttp.requestgoogle-http-client.requesthttp-url-connectionhttp.requesthttp-url-connection.requestjava-http-clienthttp.requestjava-http-client.requestgrizzly-http-async-clienthttp.requestgrizzly-http-async-client.requestspring-webflux-clienthttp.requestspring-webflux-client.requestjetty-clienthttp.requestjetty-client.requesthttp.requesthttp.request(unchanged)Test plan
ClientNamingV0OperationNameTestcertifies: each fixed library returns its specific name; pre-existing entries (okhttp, play-ws, netty, akka, pekko, jax-rs) are unaffected; unknown clients still fall back tohttp.request; no fixed name collides withservlet.requestorserverNaming.operationForProtocol("http"); APM Endpoints view aggregation keys differ between client and server spans for the same URL🤖 Generated with Claude Code