Skip to content

Report gRPC status code in client-computed stats#10805

Open
bric3 wants to merge 3 commits intomasterfrom
bdu/report-grpc-status-code-to-tracer-client-computed-stats
Open

Report gRPC status code in client-computed stats#10805
bric3 wants to merge 3 commits intomasterfrom
bdu/report-grpc-status-code-to-tracer-client-computed-stats

Conversation

@bric3
Copy link
Contributor

@bric3 bric3 commented Mar 11, 2026

What Does This Do

Reports the gRPC status code via Client Computed Stats.

This status is supported since 7.65.0 in the agent (DataDog/datadog-agent#34220), which is the minimal version needed to support CCS as well.

Current grpc instrumentations capture the status code, but not its numeric value, so it was chosen to add a new span tag that will be used in the client aggregation.

    span.setTag("status.code", status.getCode().name());
    span.setTag("grpc.status.code", status.getCode().name());
+   span.setTag("rpc.grpc.status_code", status.getCode().value());

This affects grpc and armeria instrumentations.

Note an additional system will be added DataDog/system-tests#6483

Motivation

Completeness of CCS.

Additional notes

When client-computed stats (CCS) are enabled, the agent merges stats it computes itself from raw spans with stats pre-computed by the tracer.

For gRPC spans, without Client Computed Stats (metrics) the agent resolves the status code from the span's tags via getGRPCStatusCode(), which always returns a numeric string (e.g. 4) or an empty string. With CCS enabled, the code uses GRPCStatusCode without translation.

flowchart TB
      subgraph tracer["dd-trace-java"]
          span["gRPC span<br>grpc.status.code = 'DEADLINE_EXCEEDED'<br>rpc.grpc.status_code = 4"]

          span -->|raw spans| v04["POST /v0.4/traces<br>msgpack"]
          span --> agg["ConflatingMetricsAggregator<br>reads rpc.grpc.status_code<br>GRPCStatusCode = '4'"]
          agg -->|pre-computed stats| v06["POST /v0.6/stats<br>msgpack · GRPCStatusCode: '4'"]
      end

      subgraph agent["datadog-agent"]
          v04 --> agentPath["NewAggregationFromSpan<br>getGRPCStatusCode<br>meta[grpc.status.code]='DEADLINE_EXCEEDED' → '4'"]
          v06 --> ccsPath["NewAggregationFromGroup<br>GRPCStatusCode → '4'"]

          agentPath --> k1["key{GRPCStatusCode:'4',...}"]
          ccsPath   --> k2["key{GRPCStatusCode:'4',...}"]
      end
Loading

This change mimics the aggregation of the agent, and what is expected from the agent, in NewAggregationFromGroup.

Protocol wise ClientGroupedStats.GRPC_status_code is a string.

@bric3 bric3 added type: bug Bug report and fix comp: metrics Metrics labels Mar 11, 2026
@bric3 bric3 requested a review from amarziali March 11, 2026 13:30
@bric3 bric3 force-pushed the bdu/report-grpc-status-code-to-tracer-client-computed-stats branch from 9ca27a6 to b39ed92 Compare March 11, 2026 13:41
@pr-commenter
Copy link

pr-commenter bot commented Mar 11, 2026

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bdu/report-grpc-status-code-to-tracer-client-computed-stats
git_commit_date 1773300530 1773333398
git_commit_sha c1e9ac6 07ec949
release_version 1.61.0-SNAPSHOT~c1e9ac6389 1.61.0-SNAPSHOT~07ec9497bd
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1773335116 1773335116
ci_job_id 1501315117 1501315117
ci_pipeline_id 102185275 102185275
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-1-dnmkp433 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-1-dnmkp433 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
module Agent Agent
parent None None

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 60 metrics, 11 unstable metrics.

Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.058 s) : 0, 1058195
Total [baseline] (8.831 s) : 0, 8830555
Agent [candidate] (1.061 s) : 0, 1060565
Total [candidate] (8.814 s) : 0, 8813956
section iast
Agent [baseline] (1.234 s) : 0, 1234495
Total [baseline] (9.568 s) : 0, 9567534
Agent [candidate] (1.236 s) : 0, 1236223
Total [candidate] (9.551 s) : 0, 9550536
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.058 s -
Agent iast 1.234 s 176.301 ms (16.7%)
Total tracing 8.831 s -
Total iast 9.568 s 736.979 ms (8.3%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.061 s -
Agent iast 1.236 s 175.658 ms (16.6%)
Total tracing 8.814 s -
Total iast 9.551 s 736.58 ms (8.4%)
gantt
    title insecure-bank - break down per module: candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.193 ms) : 0, 1193
crashtracking [candidate] (1.189 ms) : 0, 1189
BytebuddyAgent [baseline] (628.675 ms) : 0, 628675
BytebuddyAgent [candidate] (627.709 ms) : 0, 627709
AgentMeter [baseline] (29.115 ms) : 0, 29115
AgentMeter [candidate] (29.103 ms) : 0, 29103
GlobalTracer [baseline] (256.959 ms) : 0, 256959
GlobalTracer [candidate] (257.032 ms) : 0, 257032
AppSec [baseline] (31.671 ms) : 0, 31671
AppSec [candidate] (31.553 ms) : 0, 31553
Debugger [baseline] (58.87 ms) : 0, 58870
Debugger [candidate] (58.644 ms) : 0, 58644
Remote Config [baseline] (593.265 µs) : 0, 593
Remote Config [candidate] (587.928 µs) : 0, 588
Telemetry [baseline] (8.667 ms) : 0, 8667
Telemetry [candidate] (8.69 ms) : 0, 8690
Flare Poller [baseline] (6.345 ms) : 0, 6345
Flare Poller [candidate] (10.099 ms) : 0, 10099
section iast
crashtracking [baseline] (1.217 ms) : 0, 1217
crashtracking [candidate] (1.203 ms) : 0, 1203
BytebuddyAgent [baseline] (802.126 ms) : 0, 802126
BytebuddyAgent [candidate] (803.751 ms) : 0, 803751
AgentMeter [baseline] (11.595 ms) : 0, 11595
AgentMeter [candidate] (11.609 ms) : 0, 11609
GlobalTracer [baseline] (248.829 ms) : 0, 248829
GlobalTracer [candidate] (248.352 ms) : 0, 248352
AppSec [baseline] (26.584 ms) : 0, 26584
AppSec [candidate] (26.564 ms) : 0, 26564
Debugger [baseline] (62.578 ms) : 0, 62578
Debugger [candidate] (62.997 ms) : 0, 62997
Remote Config [baseline] (536.586 µs) : 0, 537
Remote Config [candidate] (547.541 µs) : 0, 548
Telemetry [baseline] (14.907 ms) : 0, 14907
Telemetry [candidate] (15.415 ms) : 0, 15415
Flare Poller [baseline] (4.694 ms) : 0, 4694
Flare Poller [candidate] (4.279 ms) : 0, 4279
IAST [baseline] (25.303 ms) : 0, 25303
IAST [candidate] (25.323 ms) : 0, 25323
Loading
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.054 s) : 0, 1054372
Total [baseline] (11.037 s) : 0, 11036900
Agent [candidate] (1.069 s) : 0, 1069188
Total [candidate] (11.089 s) : 0, 11089326
section appsec
Agent [baseline] (1.244 s) : 0, 1244267
Total [baseline] (11.08 s) : 0, 11080146
Agent [candidate] (1.248 s) : 0, 1247556
Total [candidate] (11.185 s) : 0, 11184541
section iast
Agent [baseline] (1.228 s) : 0, 1228354
Total [baseline] (11.24 s) : 0, 11240347
Agent [candidate] (1.226 s) : 0, 1225849
Total [candidate] (11.234 s) : 0, 11233644
section profiling
Agent [baseline] (1.18 s) : 0, 1180236
Total [baseline] (10.978 s) : 0, 10978266
Agent [candidate] (1.18 s) : 0, 1179879
Total [candidate] (11.028 s) : 0, 11027695
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.054 s -
Agent appsec 1.244 s 189.895 ms (18.0%)
Agent iast 1.228 s 173.982 ms (16.5%)
Agent profiling 1.18 s 125.864 ms (11.9%)
Total tracing 11.037 s -
Total appsec 11.08 s 43.245 ms (0.4%)
Total iast 11.24 s 203.446 ms (1.8%)
Total profiling 10.978 s -58.634 ms (-0.5%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.069 s -
Agent appsec 1.248 s 178.368 ms (16.7%)
Agent iast 1.226 s 156.661 ms (14.7%)
Agent profiling 1.18 s 110.69 ms (10.4%)
Total tracing 11.089 s -
Total appsec 11.185 s 95.216 ms (0.9%)
Total iast 11.234 s 144.319 ms (1.3%)
Total profiling 11.028 s -61.631 ms (-0.6%)
gantt
    title petclinic - break down per module: candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.209 ms) : 0, 1209
crashtracking [candidate] (1.203 ms) : 0, 1203
BytebuddyAgent [baseline] (626.084 ms) : 0, 626084
BytebuddyAgent [candidate] (635.074 ms) : 0, 635074
AgentMeter [baseline] (28.956 ms) : 0, 28956
AgentMeter [candidate] (29.201 ms) : 0, 29201
GlobalTracer [baseline] (256.365 ms) : 0, 256365
GlobalTracer [candidate] (258.307 ms) : 0, 258307
AppSec [baseline] (31.522 ms) : 0, 31522
AppSec [candidate] (31.75 ms) : 0, 31750
Debugger [baseline] (59.301 ms) : 0, 59301
Debugger [candidate] (60.049 ms) : 0, 60049
Remote Config [baseline] (588.919 µs) : 0, 589
Remote Config [candidate] (610.702 µs) : 0, 611
Telemetry [baseline] (8.589 ms) : 0, 8589
Telemetry [candidate] (8.786 ms) : 0, 8786
Flare Poller [baseline] (5.766 ms) : 0, 5766
Flare Poller [candidate] (8.03 ms) : 0, 8030
section appsec
crashtracking [baseline] (1.188 ms) : 0, 1188
crashtracking [candidate] (1.189 ms) : 0, 1189
BytebuddyAgent [baseline] (658.091 ms) : 0, 658091
BytebuddyAgent [candidate] (657.681 ms) : 0, 657681
AgentMeter [baseline] (11.971 ms) : 0, 11971
AgentMeter [candidate] (12.127 ms) : 0, 12127
GlobalTracer [baseline] (257.385 ms) : 0, 257385
GlobalTracer [candidate] (259.237 ms) : 0, 259237
IAST [baseline] (23.816 ms) : 0, 23816
IAST [candidate] (24.063 ms) : 0, 24063
AppSec [baseline] (177.084 ms) : 0, 177084
AppSec [candidate] (177.469 ms) : 0, 177469
Debugger [baseline] (65.399 ms) : 0, 65399
Debugger [candidate] (66.167 ms) : 0, 66167
Remote Config [baseline] (571.637 µs) : 0, 572
Remote Config [candidate] (570.689 µs) : 0, 571
Telemetry [baseline] (9.05 ms) : 0, 9050
Telemetry [candidate] (9.124 ms) : 0, 9124
Flare Poller [baseline] (3.569 ms) : 0, 3569
Flare Poller [candidate] (3.635 ms) : 0, 3635
section iast
crashtracking [baseline] (1.194 ms) : 0, 1194
crashtracking [candidate] (1.188 ms) : 0, 1188
BytebuddyAgent [baseline] (797.113 ms) : 0, 797113
BytebuddyAgent [candidate] (794.976 ms) : 0, 794976
AgentMeter [baseline] (11.355 ms) : 0, 11355
AgentMeter [candidate] (11.311 ms) : 0, 11311
GlobalTracer [baseline] (247.559 ms) : 0, 247559
GlobalTracer [candidate] (247.17 ms) : 0, 247170
IAST [baseline] (25.142 ms) : 0, 25142
IAST [candidate] (25.123 ms) : 0, 25123
AppSec [baseline] (27.341 ms) : 0, 27341
AppSec [candidate] (27.129 ms) : 0, 27129
Debugger [baseline] (64.378 ms) : 0, 64378
Debugger [candidate] (64.126 ms) : 0, 64126
Remote Config [baseline] (536.912 µs) : 0, 537
Remote Config [candidate] (530.224 µs) : 0, 530
Telemetry [baseline] (13.492 ms) : 0, 13492
Telemetry [candidate] (14.067 ms) : 0, 14067
Flare Poller [baseline] (4.24 ms) : 0, 4240
Flare Poller [candidate] (4.22 ms) : 0, 4220
section profiling
crashtracking [baseline] (1.158 ms) : 0, 1158
crashtracking [candidate] (1.158 ms) : 0, 1158
BytebuddyAgent [baseline] (681.502 ms) : 0, 681502
BytebuddyAgent [candidate] (681.217 ms) : 0, 681217
AgentMeter [baseline] (8.642 ms) : 0, 8642
AgentMeter [candidate] (8.588 ms) : 0, 8588
GlobalTracer [baseline] (215.355 ms) : 0, 215355
GlobalTracer [candidate] (215.224 ms) : 0, 215224
AppSec [baseline] (31.788 ms) : 0, 31788
AppSec [candidate] (32.004 ms) : 0, 32004
Debugger [baseline] (63.021 ms) : 0, 63021
Debugger [candidate] (63.664 ms) : 0, 63664
Remote Config [baseline] (588.746 µs) : 0, 589
Remote Config [candidate] (590.42 µs) : 0, 590
Telemetry [baseline] (10.494 ms) : 0, 10494
Telemetry [candidate] (9.856 ms) : 0, 9856
Flare Poller [baseline] (3.481 ms) : 0, 3481
Flare Poller [candidate] (3.518 ms) : 0, 3518
ProfilingAgent [baseline] (93.447 ms) : 0, 93447
ProfilingAgent [candidate] (93.546 ms) : 0, 93546
Profiling [baseline] (94.01 ms) : 0, 94010
Profiling [candidate] (94.103 ms) : 0, 94103
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bdu/report-grpc-status-code-to-tracer-client-computed-stats
git_commit_date 1773300530 1773333398
git_commit_sha c1e9ac6 07ec949
release_version 1.61.0-SNAPSHOT~c1e9ac6389 1.61.0-SNAPSHOT~07ec9497bd
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1773335617 1773335617
ci_job_id 1501315119 1501315119
ci_pipeline_id 102185275 102185275
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-1-d2zemfmb 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-1-d2zemfmb 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 6 performance improvements and 1 performance regressions! Performance is the same for 12 metrics, 17 unstable metrics.

scenario Δ mean agg_http_req_duration_p50 Δ mean agg_http_req_duration_p95 Δ mean throughput candidate mean agg_http_req_duration_p50 candidate mean agg_http_req_duration_p95 candidate mean throughput baseline mean agg_http_req_duration_p50 baseline mean agg_http_req_duration_p95 baseline mean throughput
scenario:load:insecure-bank:iast_FULL:high_load unsure
[-470.495µs; -103.304µs] or [-8.733%; -1.917%]
better
[-1363.383µs; -575.509µs] or [-10.509%; -4.436%]
unstable
[-44.568op/s; +130.068op/s] or [-5.879%; +17.158%]
5.101ms 12.003ms 800.812op/s 5.388ms 12.973ms 758.062op/s
scenario:load:petclinic:tracing:high_load better
[-1.947ms; -0.867ms] or [-10.435%; -4.647%]
better
[-2.144ms; -0.867ms] or [-7.136%; -2.887%]
unstable
[-10.692op/s; +44.504op/s] or [-4.324%; +18.000%]
17.249ms 28.538ms 264.156op/s 18.656ms 30.044ms 247.250op/s
scenario:load:petclinic:profiling:high_load better
[-1202.898µs; -429.442µs] or [-6.356%; -2.269%]
same
[-795.477µs; +395.249µs] or [-2.638%; +1.311%]
unstable
[-16.577op/s; +36.077op/s] or [-6.841%; +14.888%]
18.110ms 29.956ms 252.062op/s 18.927ms 30.156ms 242.312op/s
scenario:load:petclinic:code_origins:high_load better
[-1.730ms; -0.683ms] or [-9.299%; -3.670%]
better
[-2.777ms; -1.278ms] or [-9.187%; -4.230%]
unstable
[-12.704op/s; +43.766op/s] or [-5.124%; +17.652%]
17.395ms 28.199ms 263.469op/s 18.602ms 30.227ms 247.938op/s
scenario:load:petclinic:iast:high_load worse
[+557.892µs; +1409.924µs] or [+3.215%; +8.124%]
unsure
[+301.759µs; +1574.379µs] or [+1.047%; +5.462%]
unstable
[-39.156op/s; +16.406op/s] or [-14.950%; +6.264%]
18.339ms 29.760ms 250.531op/s 17.355ms 28.822ms 261.906op/s
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.168 ms) : 1156, 1179
.   : milestone, 1168,
iast (3.164 ms) : 3126, 3202
.   : milestone, 3164,
iast_FULL (6.102 ms) : 6040, 6165
.   : milestone, 6102,
iast_GLOBAL (3.439 ms) : 3383, 3495
.   : milestone, 3439,
profiling (1.971 ms) : 1954, 1988
.   : milestone, 1971,
tracing (1.751 ms) : 1737, 1765
.   : milestone, 1751,
section candidate
no_agent (1.202 ms) : 1189, 1215
.   : milestone, 1202,
iast (3.053 ms) : 3016, 3089
.   : milestone, 3053,
iast_FULL (5.774 ms) : 5716, 5831
.   : milestone, 5774,
iast_GLOBAL (3.56 ms) : 3503, 3617
.   : milestone, 3560,
profiling (1.926 ms) : 1910, 1942
.   : milestone, 1926,
tracing (1.782 ms) : 1767, 1797
.   : milestone, 1782,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.168 ms [1.156 ms, 1.179 ms] -
iast 3.164 ms [3.126 ms, 3.202 ms] 1.996 ms (171.0%)
iast_FULL 6.102 ms [6.04 ms, 6.165 ms] 4.935 ms (422.7%)
iast_GLOBAL 3.439 ms [3.383 ms, 3.495 ms] 2.271 ms (194.5%)
profiling 1.971 ms [1.954 ms, 1.988 ms] 803.645 µs (68.8%)
tracing 1.751 ms [1.737 ms, 1.765 ms] 583.137 µs (49.9%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.202 ms [1.189 ms, 1.215 ms] -
iast 3.053 ms [3.016 ms, 3.089 ms] 1.851 ms (154.0%)
iast_FULL 5.774 ms [5.716 ms, 5.831 ms] 4.572 ms (380.4%)
iast_GLOBAL 3.56 ms [3.503 ms, 3.617 ms] 2.358 ms (196.2%)
profiling 1.926 ms [1.91 ms, 1.942 ms] 724.284 µs (60.3%)
tracing 1.782 ms [1.767 ms, 1.797 ms] 579.955 µs (48.3%)
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389
    dateFormat X
    axisFormat %s
section baseline
no_agent (18.142 ms) : 17956, 18329
.   : milestone, 18142,
appsec (19.762 ms) : 19562, 19963
.   : milestone, 19762,
code_origins (18.827 ms) : 18634, 19020
.   : milestone, 18827,
iast (17.82 ms) : 17644, 17995
.   : milestone, 17820,
profiling (19.264 ms) : 19073, 19455
.   : milestone, 19264,
tracing (18.877 ms) : 18690, 19064
.   : milestone, 18877,
section candidate
no_agent (18.155 ms) : 17967, 18343
.   : milestone, 18155,
appsec (19.433 ms) : 19235, 19630
.   : milestone, 19433,
code_origins (17.708 ms) : 17534, 17882
.   : milestone, 17708,
iast (18.626 ms) : 18438, 18813
.   : milestone, 18626,
profiling (18.516 ms) : 18329, 18703
.   : milestone, 18516,
tracing (17.657 ms) : 17481, 17832
.   : milestone, 17657,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.142 ms [17.956 ms, 18.329 ms] -
appsec 19.762 ms [19.562 ms, 19.963 ms] 1.62 ms (8.9%)
code_origins 18.827 ms [18.634 ms, 19.02 ms] 684.819 µs (3.8%)
iast 17.82 ms [17.644 ms, 17.995 ms] -322.621 µs (-1.8%)
profiling 19.264 ms [19.073 ms, 19.455 ms] 1.122 ms (6.2%)
tracing 18.877 ms [18.69 ms, 19.064 ms] 734.642 µs (4.0%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.155 ms [17.967 ms, 18.343 ms] -
appsec 19.433 ms [19.235 ms, 19.63 ms] 1.277 ms (7.0%)
code_origins 17.708 ms [17.534 ms, 17.882 ms] -446.892 µs (-2.5%)
iast 18.626 ms [18.438 ms, 18.813 ms] 470.327 µs (2.6%)
profiling 18.516 ms [18.329 ms, 18.703 ms] 360.869 µs (2.0%)
tracing 17.657 ms [17.481 ms, 17.832 ms] -498.351 µs (-2.7%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master bdu/report-grpc-status-code-to-tracer-client-computed-stats
git_commit_date 1773300530 1773333398
git_commit_sha c1e9ac6 07ec949
release_version 1.61.0-SNAPSHOT~c1e9ac6389 1.61.0-SNAPSHOT~07ec9497bd
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1773335376 1773335376
ci_job_id 1501315121 1501315121
ci_pipeline_id 102185275 102185275
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-1-zmr00qym 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-1-zmr00qym 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 11 metrics, 1 unstable metrics.

Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.48 ms) : 1469, 1492
.   : milestone, 1480,
appsec (3.799 ms) : 3579, 4019
.   : milestone, 3799,
iast (2.257 ms) : 2189, 2325
.   : milestone, 2257,
iast_GLOBAL (2.315 ms) : 2246, 2385
.   : milestone, 2315,
profiling (2.088 ms) : 2033, 2142
.   : milestone, 2088,
tracing (2.072 ms) : 2019, 2126
.   : milestone, 2072,
section candidate
no_agent (1.477 ms) : 1466, 1489
.   : milestone, 1477,
appsec (3.829 ms) : 3608, 4049
.   : milestone, 3829,
iast (2.263 ms) : 2194, 2332
.   : milestone, 2263,
iast_GLOBAL (2.312 ms) : 2242, 2382
.   : milestone, 2312,
profiling (2.119 ms) : 2063, 2176
.   : milestone, 2119,
tracing (2.067 ms) : 2014, 2120
.   : milestone, 2067,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.48 ms [1.469 ms, 1.492 ms] -
appsec 3.799 ms [3.579 ms, 4.019 ms] 2.319 ms (156.6%)
iast 2.257 ms [2.189 ms, 2.325 ms] 776.557 µs (52.5%)
iast_GLOBAL 2.315 ms [2.246 ms, 2.385 ms] 834.969 µs (56.4%)
profiling 2.088 ms [2.033 ms, 2.142 ms] 607.194 µs (41.0%)
tracing 2.072 ms [2.019 ms, 2.126 ms] 591.865 µs (40.0%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.477 ms [1.466 ms, 1.489 ms] -
appsec 3.829 ms [3.608 ms, 4.049 ms] 2.351 ms (159.2%)
iast 2.263 ms [2.194 ms, 2.332 ms] 785.379 µs (53.2%)
iast_GLOBAL 2.312 ms [2.242 ms, 2.382 ms] 834.571 µs (56.5%)
profiling 2.119 ms [2.063 ms, 2.176 ms] 642.001 µs (43.5%)
tracing 2.067 ms [2.014 ms, 2.12 ms] 589.654 µs (39.9%)
Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.61.0-SNAPSHOT~07ec9497bd, baseline=1.61.0-SNAPSHOT~c1e9ac6389
    dateFormat X
    axisFormat %s
section baseline
no_agent (14.9 s) : 14900000, 14900000
.   : milestone, 14900000,
appsec (14.944 s) : 14944000, 14944000
.   : milestone, 14944000,
iast (18.74 s) : 18740000, 18740000
.   : milestone, 18740000,
iast_GLOBAL (17.647 s) : 17647000, 17647000
.   : milestone, 17647000,
profiling (14.846 s) : 14846000, 14846000
.   : milestone, 14846000,
tracing (15.202 s) : 15202000, 15202000
.   : milestone, 15202000,
section candidate
no_agent (15.513 s) : 15513000, 15513000
.   : milestone, 15513000,
appsec (15.216 s) : 15216000, 15216000
.   : milestone, 15216000,
iast (18.152 s) : 18152000, 18152000
.   : milestone, 18152000,
iast_GLOBAL (17.727 s) : 17727000, 17727000
.   : milestone, 17727000,
profiling (15.099 s) : 15099000, 15099000
.   : milestone, 15099000,
tracing (15.043 s) : 15043000, 15043000
.   : milestone, 15043000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 14.9 s [14.9 s, 14.9 s] -
appsec 14.944 s [14.944 s, 14.944 s] 44.0 ms (0.3%)
iast 18.74 s [18.74 s, 18.74 s] 3.84 s (25.8%)
iast_GLOBAL 17.647 s [17.647 s, 17.647 s] 2.747 s (18.4%)
profiling 14.846 s [14.846 s, 14.846 s] -54.0 ms (-0.4%)
tracing 15.202 s [15.202 s, 15.202 s] 302.0 ms (2.0%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.513 s [15.513 s, 15.513 s] -
appsec 15.216 s [15.216 s, 15.216 s] -297.0 ms (-1.9%)
iast 18.152 s [18.152 s, 18.152 s] 2.639 s (17.0%)
iast_GLOBAL 17.727 s [17.727 s, 17.727 s] 2.214 s (14.3%)
profiling 15.099 s [15.099 s, 15.099 s] -414.0 ms (-2.7%)
tracing 15.043 s [15.043 s, 15.043 s] -470.0 ms (-3.0%)

@bric3 bric3 added inst: grpc gRPC instrumentation inst: armeria Armeria Instrumentation labels Mar 11, 2026
@bric3 bric3 changed the title Reports gRPC status code in CCS Report gRPC status code in client-computed stats Mar 11, 2026
@bric3 bric3 force-pushed the bdu/report-grpc-status-code-to-tracer-client-computed-stats branch from 21ec5e9 to 9f3f544 Compare March 12, 2026 09:52
bric3 added 2 commits March 12, 2026 11:02
# Conflicts:
#	dd-trace-core/src/main/java/datadog/trace/common/metrics/MetricKey.java
When client-computed stats (CCS) are enabled, the agent **merges** stats
it computes itself from raw spans with stats pre-computed by the tracer.

For gRPC spans, without Client Computed Stats (metrics) the agent
resolves the status code from the span's tags via
[`getGRPCStatusCode()`](https://github.com/DataDog/datadog-agent/blob/47938ea8c9b9894dcb03dc3f81cf2c6e408f1b6c/pkg/trace/stats/aggregation.go#L167-L221),

which always returns a numeric string (e.g. `4`) or an empty string.
With CCS enabled, the code uses [`GRPCStatusCode`](https://github.com/DataDog/datadog-agent/blob/47938ea8c9b9894dcb03dc3f81cf2c6e408f1b6c/pkg/trace/stats/aggregation.go#L160)
without translation.

This change mimics the aggregation of the agent, and what is expected
from the agent, in [`NewAggregationFromGroup`](https://github.com/DataDog/datadog-agent/blob/47938ea8c9b9894dcb03dc3f81cf2c6e408f1b6c/pkg/trace/stats/aggregation.go#L146-L165).

Protocol wise
[ClientGroupedStats.GRPC_status_code](https://github.com/DataDog/datadog-agent/blob/47938ea8c9b9894dcb03dc3f81cf2c6e408f1b6c/pkg/proto/datadog/trace/stats.proto#L103)
is a `string`.
@bric3 bric3 force-pushed the bdu/report-grpc-status-code-to-tracer-client-computed-stats branch from 9f3f544 to a3832a0 Compare March 12, 2026 10:04
@bric3 bric3 marked this pull request as ready for review March 12, 2026 15:51
@bric3 bric3 requested review from a team as code owners March 12, 2026 15:51
@bric3 bric3 requested a review from PerfectSlayer March 12, 2026 15:51
Copy link
Contributor

@amarziali amarziali left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for having fixed that. it looks good. I left a minor comment

@bric3 bric3 requested a review from a team as a code owner March 12, 2026 16:31
@bric3 bric3 requested review from mcculls and removed request for a team March 12, 2026 16:31
@bric3 bric3 force-pushed the bdu/report-grpc-status-code-to-tracer-client-computed-stats branch from b0bf34a to 07ec949 Compare March 12, 2026 16:36
@bric3
Copy link
Contributor Author

bric3 commented Mar 12, 2026

/merge

@gh-worker-devflow-routing-ef8351
Copy link

gh-worker-devflow-routing-ef8351 bot commented Mar 12, 2026

View all feedbacks in Devflow UI.

2026-03-12 16:37:23 UTC ℹ️ Start processing command /merge


2026-03-12 16:37:30 UTC ℹ️ MergeQueue: waiting for PR to be ready

This pull request is not mergeable according to GitHub. Common reasons include pending required checks, missing approvals, or merge conflicts — but it could also be blocked by other repository rules or settings.
It will be added to the queue as soon as checks pass and/or get approvals. View in MergeQueue UI.
Note: if you pushed new commits since the last approval, you may need additional approval.
You can remove it from the waiting list with /remove command.


2026-03-12 21:34:16 UTC ⚠️ MergeQueue: This merge request was unqueued

devflow unqueued this merge request: It did not become mergeable within the expected time

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: metrics Metrics inst: armeria Armeria Instrumentation inst: grpc gRPC instrumentation type: bug Bug report and fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants